Guide

Managing Multiple AI Agents in Your Own Private Workflow

This is the one-developer version of managing multiple AI agents: no team dashboard, no shared secrets, just you running several Claude Code or Codex sessions at once without them tripping over each other.

Quick Answer

A private workflow for managing multiple AI agents means one developer running several coding agent sessions, such as Claude Code or Codex, on their own machine, with nothing shared to a team and no platform sitting over the top. The core of it is giving each agent its own git worktree and branch so two sessions never fight over the same files, naming each terminal tab for the task it's doing instead of the agent running it, keeping each session's API keys and context local to that session rather than copied into a shared config, and having one clear way to tell which session actually needs you right now instead of switching between five tabs to check. None of this needs a specialized platform. It needs a few habits and, if you want oversight built in rather than assembled by hand, a terminal app designed around exactly this case.

This guide assumes you already know your scale

There's a real split in what "managing multiple AI agents" means: a developer running a handful of sessions themselves, and a company scheduling hundreds of agent jobs through other software with no one watching any single run. If you haven't settled which one describes you, work that out first; the tools genuinely don't transfer between them.

This page is written entirely for the first case, and on purpose: one person, their own Mac, several agent sessions they're personally driving, nothing shared with a team and no enterprise job scheduler in sight. If a search brought you here but you're actually scheduling unattended cloud jobs, that's a different problem with a different answer.

  • This page is for one developer running several sessions themselves.
  • A company scheduling unattended agent jobs across a fleet needs a scheduler and per-job credentials instead.

One git worktree per agent, so nothing collides

The single most common failure in running several agents against one project is two of them editing the same checkout at once. Git has a built-in answer for this that most developers never reach for until they need it: git worktree lets you check out more than one branch from the same repository into separate directories at the same time, each with its own working files and its own HEAD, all sharing the same commit history underneath.

In practice that means you create a worktree per task, point one agent at each, and they genuinely cannot step on each other's uncommitted changes, because they're not in the same directory. When an agent finishes, you merge or discard that branch and remove the worktree. This is the same discipline a careful human contributor would use for parallel branches; running several agents just makes it necessary rather than optional.

  • The git worktree add command, given a path and a branch name, gives each agent its own working directory and branch, sharing one history.
  • No two agents should ever share an uncommitted working directory.
  • Remove a worktree once its branch is merged or dropped, so stale directories don't pile up.

Name the session for the task, not the agent

Five terminal tabs all labeled "Claude" tell you nothing by the third context switch. Name each one for what it's actually doing: the ticket number, the branch, or a two-word description of the task, and keep that name visible in the tab or window title rather than buried in scrollback you'd have to scroll up to find.

This sounds small, but it's the difference between a two-second glance and re-reading a transcript to remember what you set a session up to do an hour ago. The more sessions you run at once, the more this habit pays for itself, because your own memory is the bottleneck, not the agents.

  • Label each session by task, branch or ticket, not by which agent is running it.
  • Keep the label somewhere you see it without opening the tab.
  • This matters more as the number of parallel sessions grows.

Keep each session's keys local to that session

In a private, single-developer workflow, there's no team secret store to worry about, which makes it easy to get sloppy in the other direction: one API key pasted into a shell profile and sourced by every terminal you open. That key is now live in every session, including the one testing something risky, and a mistake in any one of them can expose it.

Scope keys to what each session actually needs instead. A session touching a payment provider's test mode doesn't need your production deploy credential loaded; a session fixing a typo in documentation doesn't need either. Fewer live credentials per session means a bad session costs you less.

  • Avoid one shared shell profile loading every key into every session.
  • Give each session only the credential the task in front of it actually needs.
  • A narrow key that leaks from one session is a smaller problem than a key everything shares.

What permission systems like Salesforce's don't solve here

If what actually brought you here is giving an AI agent permission to act inside a system like Salesforce, that's a genuinely different problem from this one. Salesforce's own permission model (profiles, permission sets, field-level security) governs what a user or integration can do inside Salesforce's data; it has nothing to do with how many terminal sessions you're running on your own Mac or how they share your screen. Securing an agent's access to a CRM is worth solving properly, but bolting it onto a private, single-developer workflow page would answer a question nobody actually has.

The overlap is narrower than it looks: whatever credential lets an agent or an integration reach Salesforce still deserves the same treatment as any other key in the previous section, scoped narrowly and kept out of a file every session can read. Beyond that, treat Salesforce permissions as Salesforce's own configuration surface, not something a terminal workflow habit fixes.

  • Salesforce's permission model governs access inside Salesforce; it's unrelated to how many local agent sessions you run.
  • A Salesforce credential an agent uses still needs narrow scope and a safe place to sit, same as any other key.
  • Don't expect a private terminal workflow to double as enterprise SaaS permission management.

Know which session needs you, without a dashboard

Past two or three sessions, scanning every tab yourself stops working. What actually helps is a signal that's based on something observable, like whether a process is still producing output or burning CPU, rather than on the agent reporting its own status, because a stuck agent can describe itself as fine while doing nothing useful.

You can build a rough version of this yourself: a terminal multiplexer like tmux can flag a pane with unseen activity, which gets you partway there. If you want it built in rather than assembled, that's the specific gap a terminal app designed for running several agents at once is meant to close.

  • Base an "attention needed" signal on observable activity, not the agent's own self-report.
  • A terminal multiplexer's pane-activity flag is a rough do-it-yourself version of this.
  • This is one of the few parts of a private workflow worth a dedicated tool.

A private setup you can run today

Start with the worktree habit, because it's the one that actually prevents damage rather than just reducing annoyance: never point two agents at the same checkout. Add naming next, since it costs nothing and pays off immediately. Then tighten key scope per session before you add more parallel sessions, not after.

Forkbench is a desktop app for the Mac built around exactly this private, single-developer case: each tab runs a coding agent like Claude Code or Codex in a real terminal, with a live pulse (based on CPU use and output rate, never a token count) showing which session is actually working, and a flag when one is blocked and needs you. Its Vault keeps API keys in your Keychain and hands one to a command by name, so a key never has to live in a shared profile every session can read, and a Thread's folder access can be locked to stop one agent wandering into another project. The folder lock is opt-in and doesn't restrict the network, and a key that's been handed to a running program can still be read by that program; Forkbench governs what each session holds and can touch, not your whole Mac.

  • Never run two agents against one shared working directory.
  • Name sessions by task before you scale up how many you run at once.
  • Narrow each session's keys before adding more parallel sessions, not after something leaks.

Related: How to manage AI coding agents at scale, Run multiple AI coding agents in parallel, Organize terminal tabs when running agents, Download Forkbench

Frequently asked

  • How many AI coding agents can one developer realistically run at once?

    There's no fixed number; it's limited by your own attention and your machine's resources, not the tools. Most developers find somewhere between three and a dozen sessions is where they need a real signal for which one needs attention, rather than scanning every tab.

  • Do I need a shared secrets platform for a private, one-person workflow?

    No. A shared secrets platform is for a team. A single developer just needs each session's keys scoped narrowly and kept out of files every session can read, such as a shared shell profile.

  • Can git worktree really stop two agents from conflicting?

    It stops them from conflicting over uncommitted working-directory changes, because each worktree is its own checked-out directory sharing one repository's history. It doesn't prevent a merge conflict later when you combine their branches.

  • Does managing multiple private AI agents help with Salesforce permissions?

    No. Salesforce's permission model controls access inside Salesforce and is unrelated to how many agent sessions you run locally. If an agent uses a Salesforce credential, scope and protect that credential the same way you would any other key.

  • What's the simplest signal for which agent session needs me?

    Something based on observable activity, like CPU use or how recently the process produced output, rather than the agent's own self-reported status. A terminal multiplexer's activity flag is a basic version; Forkbench's pulse is a built-in one.

Keep reading