IV · The code agent

It never touches the branch you are working on, and it never pushes code that does not compile.

Mention it on a task. It takes a clean copy of your default branch, writes the change there, runs your own type-check and build against it, and fixes what it broke before anybody sees it. What arrives is a pull request with a transcript.

Starts in a clean git worktree. Your local branch is never touched.

Mention @Claude on KITE-142. The runner fetches origin/main, creates an isolated git worktree in /tmp/td-worktree-kite-142 on branch claude/kite-142-safari-session, and checks project_repo_map before editing.

src/lib/checkout/session.ts
WORKTREE ISOLATED · EDITING
3939 export async function hydrateCartSession(req: Request) {
4040 const cookie = req.headers.get('cookie') ?? '';
4141 const token = parseSessionToken(cookie);
4242 if (!token) return createEmptySession();
43− const persisted = await kv.get<CartPayload>(`cart:${token}`);
43+ const persisted = await kv.get<CartPayload>(`cart:${token}`, {
44+ cache: 'no-store', // Avoid Safari ITP stale disk cache
Isolated branch · allowedEdits guard active

The harness records that src/lib/checkout/session.ts was read prior to editing. Lockfiles, .env, and GitHub workflows are blocked at the runner layer.

git worktree add -b claude/kite-142-safari-session
45+ });
4446 return { token, items: persisted.items, updatedAt: Date.now() };
4547 }
$ git fetch origin main --quiet
Fetched refs/remotes/origin/main (commit 8f41c2a)
$ git worktree add -b claude/kite-142-safari-session /tmp/td-worktree-kite-142 origin/main
Preparing worktree (new branch 'claude/kite-142-safari-session')

It reads your brief, then reads the diff, and tells you where they disagree.

A developer changed one number that nobody asked them to change. A type-check passes it, a linter passes it, a reviewer skimming eleven lines passes it — and the client's recurring margin quietly drops five points.

Brief on ARBR-088: 'Adjust mobile drawer spacing on the subscription roast selector and keep the existing 10% recurring subscriber discount unchanged.'

PR #187ARBR-088: Update subscription roast selector & cart discount math
CHANGES_REQUESTED
2121 export function computeSubscriptionPrice(baseCents: number, isSubscriber: boolean) {
2222 if (!isSubscriber) return baseCents;
23− const discountRate = 0.10; // Standard 10% subscriber tier
23+ const discountRate = 0.15; // Bumped for autumn promo test
BRIEF DISAGREEMENT · LINE 23

Task brief ARBR-088 explicitly states: 'keep the existing 10% recurring subscriber discount unchanged.' This diff changes discountRate from 0.10 to 0.15, which alters recurring margin without a Change Order.

2424 return Math.round(baseCents * (1 - discountRate));
2525 }
2626
2727 export function RoastDrawerHeader({ title }: { title: string }) {
28− return <header className="px-3 py-2 border-b border-border">{title}</header>;
28+ return <header className="px-4 py-3.5 border-b border-border">{title}</header>;
MATCHES BRIEF · LINE 28

Mobile drawer header padding updated (px-4 py-3.5) as requested in ARBR-088 design spec.

2929 }
rohan/arbr-088-roast-selector → mainBrief vs. diff mismatch flagged on line 28

V · The editor

Read the diff, the checks and the build without leaving the task.

KITE-142 · PR #184
AST CHECKS 3/3 · BUILD GREEN
Changed in this run
src/lib/checkout/session.tssplit diff
39export async function hydrateCartSession(req: Request) {39export async function hydrateCartSession(req: Request) {
40 const cookie = req.headers.get('cookie') ?? '';40 const cookie = req.headers.get('cookie') ?? '';
41 const token = parseSessionToken(cookie);41 const token = parseSessionToken(cookie);
42 if (!token) return createEmptySession();42 if (!token) return createEmptySession();
43 const persisted = await kv.get<CartPayload>(`cart:${token}`);43 const persisted = await kv.get<CartPayload>(`cart:${token}`, {
44 cache: 'no-store', // Avoid Safari ITP stale disk cache
45 });
46 if (!persisted) return createEmptySession(token);
44 return { token, items: persisted.items, updatedAt: Date.now() };47 return { token, items: persisted.items, updatedAt: Date.now() };
45}48}
Syntax-tree checks on session.ts
  • Export signature stabilityhydrateCartSession(req: Request) return shape unchanged across 4 callers
  • Strict null narrowingpersisted narrowed from CartPayload | null before property access .items
  • allowedEdits & sensitive path guardFile read recorded in session transcript · 0 forbidden imports
Build log
> tsc -p tsconfig.check.json --noEmit
✓ 0 errors · 1,284 files checked in 6.1s
> npm run build
Creating an optimized production build …
✓ Compiled successfully in 1.9s
24 static routes · 11 dynamic · 0 warnings
✓ Verification PASS — ready for human merge

The same editor your team opens from the task card. Nothing is downloaded, and nobody needs a local checkout to read what the agent did.

Three files, a split diff, and the checks the run actually performed — the export signature compared across every caller, the null narrowing that fixed the Safari bug, and the record proving no lockfile, workflow or environment file was touched.

Review documents live beside the code they are about, so the sign-off and the diff are never two different conversations.


Open the studio at seven. Everything is already in sync.

Free to start • the first person to sign up runs the organisation