Resuming Sessions, Working in Parallel, and Keeping Costs Sensible — Automating Project… A practitioner's guide to running multiple Claude Code sessions in parallel describes using the /resume command to recover prior task context and Git worktrees to advance independent tasks, while warning that a resumed conversation may be stale because merged changes, new ticket requirements, or another developer's edits can invalidate its assumptions. The guide recommends asking Claude to summarize where a task stopped, separating accepted decisions from implemented changes and unresolved ideas, and verifying the current state of files and branches before any new implementation begins. In this part I’m sharing how I organize a working day with several Claude Code sessions: finding useful old context, moving independent tasks forward with Git worktrees, and leaving myself enough time to review what comes back. An agent working on a substantial task can take thirty minutes, sometimes less and sometimes more. Reading unfamiliar code takes time. A database investigation can spend a long time waiting for queries. I can open another terminal tab with Claude Code while that happens. Unfortunately, opening another tab does not create another me to review the result : That is the balance I’m trying to find. I want useful work to continue while a task is running, but I also want to understand the changes when they arrive. Part 2 https://pub.towardsai.net/automating-project-implementation-and-maintenance-with-claude-code-mcp-ai-agent-skills-dc7839fc4819 in this series covered skills and technical review, and Part 3 https://pub.towardsai.net/automating-project-implementation-and-maintenance-with-claude-code-mcp-ai-agent-skills-2b2a4861db6b covered scheduled maintenance. Here I’m concentrating on the small decisions between starting work and having something ready to review. You can work through this guide with a repository you already know, Claude Code, Git, and two small tasks. One could be a frontend correction, the other could be an investigation in a different component. Choose work you can assess yourself. Your first experiment with parallel sessions should leave you with two understandable results. We’ll start with choosing a conversation, then set up two workspaces and follow their results through review. The command examples use ordinary local Git operations. The prompts are suggested briefs for your own sessions, rather than quotations from the original project transcripts. Before explaining a feature from the beginning, I usually try /resume and look for a session where I already worked on some similar task. For example if the task is related to cron job that will process the data I search for session with similar task to have a good context for start. That can save quite a lot of rediscovery. The earlier session may already contain the relevant classes, a rejected hypothesis, or the reason we kept an unusual behavior. A ticket often contains the final decision, while the conversation contains the route we took to reach it. Also to keep important information I write Claude “memorize this and that” when it makes mistakes or something is a important nuance. Resuming feels a little like loading a saved game, with one inconvenient difference: the rest of the team has kept playing. The conversation remembers where we stopped, but changes may have been merged, the ticket may have gained a new requirement, or another developer may have changed the implementation. I still need Claude to check the current repository and task state. Open /resume and inspect the likely session before sending “continue.” I look for the last accepted decision, the last change, and anything explicitly left unfinished. A conversation that merely mentions the same class may carry a different task and several assumptions that no longer apply. My first request after resuming would be: Summarize where this task stopped.Separate accepted decisions, implemented changes, and unresolved ideas.List the files and branch we worked on, then verify their current state.Do not begin another implementation until you have compared the oldassumptions with the latest code and ticket discussion. The distinction between a decision and an idea matters. A long conversation can contain three proposed solutions followed by a small accepted fix. The longest explanation can be the one we rejected. If Claude picks that up, we can spend another hour rediscovering why we rejected it. If the useful context is short, I sometimes prefer a new session with a compact handover. For example: Goal: correct mobile spacing on the product page.Keep: the approved desktop layout, one offer, and existing checkout.Previous work: redesign already merged; inspect the current default branch.New evidence: the latest review comment lists four phone-layout defects.Expected result: a separate follow-up change with screenshots at thereported widths and a clear account of remaining device testing. That handover gives the new session the important conclusions without requiring it to reconstruct every discarded animation idea. It also makes the task easier to hand to another developer. As a small exercise, take one completed session and write this kind of handover yourself. Then compare it with Claude’s summary. If the summaries disagree, settle the difference before using either as the next task’s starting point. After the landing-page redesign, I asked Claude to address a set of mobile issues from a review comment. It reproduced the problems, changed the responsive styles, and pushed a commit to the branch used for the original page work. Then I asked a short question: are changes fixed on master? The answer changed the situation. The original pull request had already been squash-merged, and its source branch had been deleted. The new push recreated that old branch. The mobile fix therefore existed remotely, but it was not on the default branch and was not attached to a new open pull request. The push had succeeded. It had just delivered the work to a place we had already finished using. Claude moved the fix to a fresh branch based on the current default branch. In that session it could push, but it could not create the pull request with the available access, so it provided the link for me to open it. At that point, the next action was mine: open the new PR. The branch problem had been corrected, but the fix still needed review and merging before it could reach deployment. This is now something I want checked at the start of a resumed task: which branch are we on, what is the current default branch, and is the related PR still open? A familiar conversation can make an old working state feel current. A brief I would use for a similar follow-up is Resume the context of this feature, then check its current state.Read the latest ticket discussion and inspect the related PR.If the previous PR is already merged, prepare the follow-up fromthe current default branch in a new worktree and branch.Keep the change limited to the reported mobile issues. it can be also added to CLAUDE.md file https://claude.com/blog/using-claude-md-files https://claude.com/blog/using-claude-md-files . In a Git checkout, these commands provide a useful first look: git status --short --branchgit branch --show-currentgit log -5 --oneline --decorategit worktree list Then fetch the remote refs when you need the current remote state: git fetch origin These commands do not establish whether a PR is open. Check that separately in GitHub, Bitbucket, or the project tool available to Claude. A branch name can remain after a merge, and a deleted branch can be recreated by a later push, as happened in my example. Ask Claude to report the result in one compact record: Repository:Working directory:Current branch:Default branch and current commit:Related PR and its status:Uncommitted changes:Proposed branch for this task: Keep this short enough that you will actually read it. A few lines can expose a mismatch between “the branch I remember” and “the branch we are actually changing.” If there are existing local edits, identify their owner and purpose before allowing a checkout, reset, or cleanup. For a follow-up to a squash-merged PR, inspect the current default branch as the starting implementation. Reapplying the entire old branch can bring back changes that are already present under a different commit. Claude should identify the new correction you need, not assume that an old history should be merged again wholesale. When I move to an unrelated task, I use /clear. It starts a new conversation with empty conversational context, project instructions and persistent memory can still apply. There is a small but important correction to how I initially described this command. It does more than clean the terminal display. If I only want to redraw the screen while keeping the conversation, Ctrl+L does that. See the interactive-mode reference https://code.claude.com/docs/en/interactive-mode . I think of /clear as wiping the conversation’s whiteboard. That can help when the previous task is finished and I want to start new unrelated one. For related work, I usually want to keep those useful notes and resume the session. I also try to leave a useful handover before switching: what changed, what was verified, which branch holds it, and what remains undecided. That makes the next session easier for me as well as for Claude. A practical experiment makes the distinction easier to remember. Ask a session to summarize an investigation, then press Ctrl+L and continue discussing it. The display changes, while the conversation remains available. For a genuinely new task, use /clear and state the new objective explicitly. Do not use the new session as evidence that files were rolled back. Conversation state and repository state are separate. The code written during the old session is still in the working directory unless you deliberately changed it through Git or another file operation command: git worktree remove