Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
199 commits
Select commit Hold shift + click to select a range
a31b88e
fix(frontend): resolve the refractor chunk failure that remounts the …
mmabrouk Jul 14, 2026
378fc41
chore(deps-dev): bump esbuild from 0.23.1 to 0.28.1 in /services/runner
dependabot[bot] Jul 18, 2026
025a1b4
chore(deps): bump @opentelemetry/core in /services/runner
dependabot[bot] Jul 18, 2026
d11d8da
chore(deps): bump axios in /web/packages/agenta-shared
dependabot[bot] Jul 21, 2026
6e12c61
Merge branch 'release/v0.105.8' into dependabot/npm_and_yarn/web/pack…
ardaerzin Jul 21, 2026
2712288
chore(frontend): exclude tests from app tsconfigs
ardaerzin Jul 22, 2026
63b49bd
fix(frontend): restore removed types and repair stale imports
ardaerzin Jul 22, 2026
d19021f
fix(frontend): resolve high-count tsc error clusters
ardaerzin Jul 22, 2026
aacba41
chore(frontend): add tsc error inventory
ardaerzin Jul 22, 2026
e9a6022
fix(frontend): type-check EvalRunDetails layer; oss tsc 422->347
ardaerzin Jul 22, 2026
61a0aee
fix(entities,entity-ui): updater-style refresh atom and optional vari…
ardaerzin Jul 22, 2026
9a882d7
fix(frontend): type-check observability, drawers, playground, onboard…
ardaerzin Jul 22, 2026
779d3c8
chore(frontend): update tsc inventory with final counts
ardaerzin Jul 22, 2026
b76d34a
fix(frontend): type-check InfiniteVirtualTable root + cross-cutting p…
ardaerzin Jul 22, 2026
93fe047
feat(agent-chat): voice input in the composer
ardaerzin Jul 22, 2026
448306e
feat(agent-chat): voice message mode (record audio → attachment)
ardaerzin Jul 22, 2026
4f29082
feat(agent-chat): full voice-message recording UX
ardaerzin Jul 22, 2026
15f57ea
feat(agent-chat): default the mic to voice message, not dictation
ardaerzin Jul 22, 2026
561bcf4
fix(agent-chat): refine the mic-permission state of the recording bar
ardaerzin Jul 22, 2026
8d209ee
fix(agent-chat): orchestrate the voice-recording state transitions wi…
ardaerzin Jul 22, 2026
258ffe4
fix(agent-chat): match the recording bar to the composer box and scal…
ardaerzin Jul 22, 2026
3ffe94f
perf(agent-chat): stop the recorder re-rendering the whole conversati…
ardaerzin Jul 22, 2026
f4811ec
refactor(agent-chat): rAF for painted state, one timer for the hard cap
ardaerzin Jul 22, 2026
d75ca8e
fix(agent-chat): make cancel work while the mic permission is pending
ardaerzin Jul 22, 2026
dab3e21
fix(agent-chat): stay out of the way while the browser asks for the mic
ardaerzin Jul 22, 2026
06f8d92
feat(agent-chat): rolling FFT waveform instead of the level bars
ardaerzin Jul 22, 2026
0529b8f
fix(agent-chat): stop a voice message being destroyed on attach
ardaerzin Jul 22, 2026
c4b0347
feat(agent-chat): play voice messages in the transcript, not just the…
ardaerzin Jul 22, 2026
95c1208
fix(agent-chat): surface dictation failures, and hold the tray while …
ardaerzin Jul 22, 2026
b70c497
fix(agent-chat): brand the recording bar, reserve red for the record …
ardaerzin Jul 22, 2026
2a40990
fix(agent-chat): give each voice mode its own icon so the active one …
ardaerzin Jul 22, 2026
e74b364
feat(agent-chat): send a standalone voice message directly instead of…
ardaerzin Jul 22, 2026
76f1394
feat(rich-chat-input): dictate through editor nodes instead of rewrit…
ardaerzin Jul 22, 2026
0b4f0c7
fix(agent-chat): reuse the composer's send button, and make both voic…
ardaerzin Jul 22, 2026
da710fd
fix(rich-chat-input): soften the live-dictation styling
ardaerzin Jul 22, 2026
d12d358
fix(rich-chat-input): hide the shortcut hints while dictating
ardaerzin Jul 22, 2026
b1225fc
fix(agent-chat): even out the attachment tray and orchestrate its motion
ardaerzin Jul 22, 2026
01067ee
fix(agent-chat): scroll the attachment tray horizontally instead of w…
ardaerzin Jul 22, 2026
cc09cae
fix(ui,entities): drill-in slot types, table selection/locale props, …
ardaerzin Jul 23, 2026
d6a4e65
fix(frontend): type-check remaining long tail; oss+ee tsc 0 errors
ardaerzin Jul 23, 2026
6c57250
chore(frontend): inventory final - oss and ee tsc at zero
ardaerzin Jul 23, 2026
cb415f6
chore(frontend): fail builds on TypeScript errors
ardaerzin Jul 23, 2026
618e0f6
fix(agent-chat): reset the audio duration-probe when src changes
ardaerzin Jul 23, 2026
8826e62
fix(agent-chat): don't emit a partial take after a recorder error
ardaerzin Jul 23, 2026
45a4071
fix(agent-chat): don't offer voice-message mode during onboarding
ardaerzin Jul 23, 2026
62f7165
fix(agent-chat): make dropping files behave at the edges
ardaerzin Jul 22, 2026
82abecf
feat(agent-chat): enable the attach button and give each kind its own…
ardaerzin Jul 22, 2026
29435a9
feat(agent-chat): let model audio capability steer voice, without eve…
ardaerzin Jul 22, 2026
0c5c8c6
fix(agent-chat): align the audio player name and time on one row
ardaerzin Jul 22, 2026
f55603e
refactor(drives): add a byte-source seam to the file viewer
ardaerzin Jul 22, 2026
6ca1713
feat(drives): explicit-files mode for the file drawer
ardaerzin Jul 22, 2026
1675f86
feat(agent-chat): preview attachments in the Files drawer
ardaerzin Jul 22, 2026
a386f8f
feat(agent-chat): per-item upload states, retry, and preview errors —…
ardaerzin Jul 22, 2026
0b3c77c
feat(drives): mount upload transport + in-flight state hook
ardaerzin Jul 22, 2026
a4a2a3a
feat(drives): upload files into a mount from the Files drawer
ardaerzin Jul 22, 2026
5ad6e67
feat(drives): foundation for drag-drop upload — folder-scoped items +…
ardaerzin Jul 22, 2026
24393f1
feat(drives): drag-drop upload in the grid — spring-load + optimistic…
ardaerzin Jul 22, 2026
7012196
feat(drives): drag-drop upload in the tree — spring-load + folder dro…
ardaerzin Jul 22, 2026
7da56ca
feat(drives): ride the list motion for optimistic uploads in grid and…
ardaerzin Jul 22, 2026
bee6501
feat(drives): drop files onto a recents peek to stage them for upload
ardaerzin Jul 23, 2026
d8ae88d
fix(drives): correct optimistic tile sizing + show pending items in t…
ardaerzin Jul 23, 2026
654fdad
fix(drives): drop the upload banner, restyle pending tiles to match f…
ardaerzin Jul 23, 2026
7abb7a0
fix(drives): dedupe upload state so a file is never staged and upload…
ardaerzin Jul 23, 2026
49d33ff
fix(drives): reconcile staged inbox against in-flight so a file shows…
ardaerzin Jul 23, 2026
0be8c6b
style(drives): make dropped-file tiles read like plain file tiles
ardaerzin Jul 23, 2026
f0e22e3
fix(drives): keep dropped-tile caption plain text so tiles match the …
ardaerzin Jul 23, 2026
373ec2f
fix(drives): force dropped-tile thumb to 4:3 with a padding-bottom box
ardaerzin Jul 23, 2026
4d5aefe
feat(drives): render in-flight uploads as real tree/grid rows under t…
ardaerzin Jul 23, 2026
2dd90bd
refactor(drives): one context-aware upload button in the header
ardaerzin Jul 23, 2026
65dc3f9
style(drives): tint pending items so they read as distinct at a glance
ardaerzin Jul 23, 2026
a4823f5
fix(drives): always show Dismiss on a failed upload tile
ardaerzin Jul 23, 2026
854fccf
refactor(drives): unify duplicated drop-to-stage + pending-tile code
ardaerzin Jul 23, 2026
4670419
refactor(drives): share object-URL previews via useImagePreviews + cl…
ardaerzin Jul 23, 2026
ce68d4a
chore(drives): remove the SIMULATE_UPLOAD test stub
ardaerzin Jul 23, 2026
29448e3
fix(agent-chat): never let a blocked file drop navigate the tab away
ardaerzin Jul 23, 2026
c4dafe5
fix(drives): create/revoke image-preview URLs in an effect, not durin…
ardaerzin Jul 23, 2026
0b5dd83
fix(drives): assemble the HTML preview for local (mount-less) attachm…
ardaerzin Jul 23, 2026
9301719
refactor(frontend): single source of truth for span types
ardaerzin Jul 23, 2026
bca0c66
refactor(frontend): drop duplicate EvaluationRun, align step-referenc…
ardaerzin Jul 23, 2026
0133543
refactor(ui): unify extended column type, clear dual-copy imports
ardaerzin Jul 23, 2026
1b3be94
refactor(ui): delete duplicate InfiniteVirtualTable, migrate to @agen…
ardaerzin Jul 23, 2026
6e344f2
chore(frontend): modernize tsconfig, add native TS7 type-check
ardaerzin Jul 23, 2026
050f368
fix(frontend): remove repeated tool trace links
mmabrouk Jul 24, 2026
17beab0
fix(api): keep /api on slash redirects so they don't escape to the we…
Jul 24, 2026
c30b18c
fix(api): resolve the trailing slash in-place instead of redirecting
Jul 24, 2026
c532978
doc: plan the hide pages feature for new user
ashrafchowdury Jul 24, 2026
367b59a
feat(onboarding): add navSimplifiedDefault atom and use itIntroduce a…
ashrafchowdury Jul 24, 2026
96f8a20
fix: workflow default navigation to playground
ashrafchowdury Jul 24, 2026
ddceb4c
feat: Implement InteractionDock for handling client-tool interactions
ashrafchowdury Jul 12, 2026
4b9e0e4
fixed the copy of the dock
ashrafchowdury Jul 13, 2026
939ae4a
fix(frontend): drive latest-edited symlink + open nested file links i…
ardaerzin Jul 26, 2026
9a567ac
fix(api): exclude degraded agent-files symlink marker from drive archive
ardaerzin Jul 26, 2026
4d4a275
fix(onboarding): enhance first-run logic and agent registration handling
ashrafchowdury Jul 27, 2026
a74f006
fix(onboarding): scope agent-list cache writes to the current project
ashrafchowdury Jul 27, 2026
2c7028e
refactor: update ConnectModelBanner prompt text and remove unused var…
ashrafchowdury Jul 27, 2026
946524b
fix(frontend): keep dead-end nav live when the project already has ag…
mmabrouk Jul 27, 2026
22b0372
feat(frontend): group settings by scope and add a personal feature fl…
mmabrouk Jul 27, 2026
ce54191
fix(frontend): stop a failed org delete from escaping as an unhandled…
mmabrouk Jul 27, 2026
56504b0
Merge pull request #5478 from Agenta-AI/feat/simplify-platform-for-fi…
mmabrouk Jul 28, 2026
ac7d28f
v0.106.1
bekossy Jul 28, 2026
09b1e26
chore(deps): bump next from 15.5.18 to 15.5.21 in /web/ee
dependabot[bot] Jul 28, 2026
8b98619
Merge pull request #5536 from Agenta-AI/temp-106.1
mmabrouk Jul 28, 2026
1d8ab6c
Merge remote-tracking branch 'origin/main' into feat/agent-interactio…
ashrafchowdury Jul 28, 2026
e370698
Merge branch 'release/v0.106.1' into feat/agent-interaction-dock
bekossy Jul 28, 2026
99d7026
Merge branch 'main' into api-fix/drive-download-agent-files
ardaerzin Jul 29, 2026
38172e1
Merge branch 'main' into fe-fix/drive-bugs
ardaerzin Jul 29, 2026
d85d54b
Merge branch 'main' into fix/agent-onboarding-playground-related-issues
ardaerzin Jul 29, 2026
e166669
fix(frontend): fold the agent mount into the drive summary fallback
ardaerzin Jul 29, 2026
a734c80
fix(api): resolve zip-namespace collisions when merging drive mounts
ardaerzin Jul 29, 2026
7b30f36
[refactor] Single source of truth for trace span types (#5465)
ardaerzin Jul 29, 2026
dce43c6
[refactor] Drop duplicate EvaluationRun type, align step-reference sh…
ardaerzin Jul 29, 2026
150b00a
Merge branch 'release/v0.106.1' into api-fix/drive-download-agent-files
bekossy Jul 29, 2026
1c12e08
Merge branch 'release/v0.106.1' into fe-fix/drive-bugs
bekossy Jul 29, 2026
9163d37
Merge remote-tracking branch 'origin/release/v0.106.1' into fix/agent…
ashrafchowdury Jul 29, 2026
18f392a
Merge pull request #5521 from Agenta-AI/feat/agent-interaction-dock
bekossy Jul 29, 2026
00f4d32
Merge pull request #5533 from Agenta-AI/dependabot/npm_and_yarn/web/e…
bekossy Jul 29, 2026
b0bc41f
refactor(ui): unify extended column type, clear dual-copy imports
ardaerzin Jul 23, 2026
6c4f588
Merge pull request #5525 from Agenta-AI/fix/agent-onboarding-playgrou…
bekossy Jul 29, 2026
2cc3c99
Merge branch 'release/v0.106.1' into api-fix/drive-download-agent-files
bekossy Jul 29, 2026
41ff410
Merge branch 'release/v0.106.1' into fix/api-prefix-redirect-escape
bekossy Jul 29, 2026
5ca6ce1
refactor(ui): delete duplicate InfiniteVirtualTable, migrate to @agen…
ardaerzin Jul 23, 2026
91c2f45
chore(deps): sync web/pnpm-lock.yaml with next@15.5.21 in web/ee
bekossy Jul 29, 2026
6aaddac
Merge branch 'release/v0.106.1' into fix/api-prefix-redirect-escape
bekossy Jul 29, 2026
750f8c0
Merge branch 'release/v0.106.1' into ts-chore/table-consolidation
ardaerzin Jul 29, 2026
6bcdf18
fix(api): keep raw_path in sync with path in the prefix middleware
bekossy Jul 29, 2026
725070b
chore(frontend): remove dead SessionDrawerButton copied from TraceDra…
ardaerzin Jul 29, 2026
8056073
Merge branch 'release/v0.106.1' into fix/api-prefix-redirect-escape
bekossy Jul 29, 2026
15c88ee
Merge branch 'release/v0.106.1' into api-fix/drive-download-agent-files
ardaerzin Jul 29, 2026
19faeb2
Merge pull request #5487 from Agenta-AI/fix/api-prefix-redirect-escape
bekossy Jul 29, 2026
f573e5b
Merge pull request #5483 from Agenta-AI/fix/remove-repeated-tool-trac…
bekossy Jul 29, 2026
48f1aa6
Merge branch 'release/v0.106.1' into ts-chore/table-consolidation
bekossy Jul 29, 2026
4acc1c2
Merge branch 'ts-chore/table-consolidation' into ts-chore/native-tsc-…
ardaerzin Jul 29, 2026
65e83ca
[refactor] Delete duplicate InfiniteVirtualTable, migrate to @agenta/…
ardaerzin Jul 29, 2026
f114136
Merge branch 'release/v0.106.1' into ts-chore/native-tsc-trial
ardaerzin Jul 29, 2026
e8d27ad
feat(agent-chat): gate voice input behind NEXT_PUBLIC_AGENT_VOICE_INPUT
ardaerzin Jul 29, 2026
2129d25
Merge branch 'release/v0.106.1' into dependabot/npm_and_yarn/services…
bekossy Jul 29, 2026
adcf808
Merge pull request #5371 from Agenta-AI/dependabot/npm_and_yarn/servi…
bekossy Jul 29, 2026
6c83e92
Merge pull request #5523 from Agenta-AI/fe-fix/drive-bugs
bekossy Jul 29, 2026
7201789
Merge branch 'release/v0.106.1' into dependabot/npm_and_yarn/services…
bekossy Jul 29, 2026
69dee29
chore(deps): bump axios from 1.16.0 to 1.18.0 in /web/packages/agenta…
bekossy Jul 29, 2026
01fdb3f
Merge branch 'dependabot/npm_and_yarn/web/packages/agenta-shared/axio…
bekossy Jul 29, 2026
5feebb1
chore: allowlist two benign gitleaks findings
bekossy Jul 29, 2026
14202bc
Merge branch 'release/v0.106.1' into dependabot/npm_and_yarn/web/pack…
bekossy Jul 29, 2026
2977154
Merge branch 'release/v0.106.1' into dependabot/npm_and_yarn/services…
bekossy Jul 29, 2026
e6553ae
Merge pull request #5370 from Agenta-AI/dependabot/npm_and_yarn/servi…
bekossy Jul 29, 2026
945d1c9
Merge pull request #5428 from Agenta-AI/dependabot/npm_and_yarn/web/p…
bekossy Jul 29, 2026
ac5a2ab
Merge branch 'release/v0.106.1' into ts-chore/native-tsc-trial
bekossy Jul 29, 2026
00803bd
Merge release/v0.106.1 into fe-feat/agent-voice-input
ardaerzin Jul 29, 2026
9fe37cb
Merge branch 'release/v0.106.1' into fe-feat/agent-voice-input
ardaerzin Jul 29, 2026
5c1d0de
fix(web): collapse dual axios resolution, fixing the broken agenta-we…
bekossy Jul 29, 2026
459d7f3
Merge branch 'release/v0.106.1' into ts-chore/native-tsc-trial
bekossy Jul 29, 2026
54cdae6
Merge fe-feat/agent-voice-input into fe-feat/agent-attachments
ardaerzin Jul 29, 2026
8638a57
feat(agent-chat): gate uploads + attachments behind NEXT_PUBLIC_AGENT…
ardaerzin Jul 29, 2026
fd8730e
Merge branch 'fe-feat/agent-voice-input' into fe-feat/agent-attachments
ardaerzin Jul 29, 2026
c093bbc
Revert "fix(web): collapse dual axios resolution, fixing the broken a…
bekossy Jul 29, 2026
cb41590
Merge branch 'main' into release/v0.106.1
bekossy Jul 29, 2026
13c7e53
Merge branch 'release/v0.106.1' into ts-chore/native-tsc-trial
bekossy Jul 29, 2026
f833600
Merge branch 'ts-chore/native-tsc-trial' of github-agenta:Agenta-AI/a…
bekossy Jul 29, 2026
8fe9126
Reapply "fix(web): collapse dual axios resolution"
bekossy Jul 29, 2026
a7c58d9
Merge branch 'release/v0.106.1' into ts-chore/native-tsc-trial
bekossy Jul 29, 2026
73f4165
Merge pull request #5472 from Agenta-AI/ts-chore/native-tsc-trial
bekossy Jul 29, 2026
c280032
Merge branch 'release/v0.106.1' into api-fix/drive-download-agent-files
bekossy Jul 29, 2026
0bbdd95
Merge pull request #5524 from Agenta-AI/api-fix/drive-download-agent-…
bekossy Jul 29, 2026
572c25b
Merge pull request #5323 from Agenta-AI/fix-advanced-drawer-remount
bekossy Jul 29, 2026
cbb43f5
feat: enhance session management by adding last-message timestamp and…
ashrafchowdury Jul 29, 2026
762e9cd
[fix] Bound the session-records fetch and consume the persist-drop si…
ardaerzin Jul 29, 2026
465fb5f
Merge branch 'release/v0.106.1' into fe-feat/agent-voice-input
bekossy Jul 29, 2026
032d52b
Merge branch 'fe-feat/agent-voice-input' into fe-feat/agent-attachments
bekossy Jul 29, 2026
931134f
Merge pull request #5459 from Agenta-AI/fe-feat/agent-attachments
bekossy Jul 29, 2026
8df188b
Merge pull request #5458 from Agenta-AI/fe-feat/agent-voice-input
bekossy Jul 29, 2026
913973d
chore(repo): consolidate committed agent skills under .agents/skills …
mmabrouk Jul 29, 2026
c5128d4
chore(repo): finish the add-announcement and create-changelog-announc…
mmabrouk Jul 29, 2026
1c7e42b
chore(repo): symlink all committed skills from .claude/skills to .age…
mmabrouk Jul 29, 2026
894c23b
fix(railway): restore runner and mount connectivity (#5485)
mmabrouk Jul 29, 2026
a7d6a61
fix(api): declare mount binary responses, regenerate the Fern client …
mmabrouk Jul 29, 2026
b849f78
fix(hosting): add init to runner service so orphaned children get rea…
mmabrouk Jul 29, 2026
0638af8
Merge pull request #5558 from Agenta-AI/chore/skills-repo-sync
mmabrouk Jul 29, 2026
2e82ba8
[fix] Unblock editing schedule and subscription triggers (#5552)
ashrafchowdury Jul 29, 2026
e31e173
feat: default the session-storage rework flags to on
mmabrouk Jul 29, 2026
fc71530
docs(design): planning workspace for the STS mount-expiry fix (#5516)
mmabrouk Jul 25, 2026
c527a78
fix(api): make mount-credential TTL real, configurable, and fail-closed
mmabrouk Jul 25, 2026
3d3e8a2
fix(runner): track installed mount credentials and rebuild before the…
mmabrouk Jul 25, 2026
7cd8423
docs(design): decisions register and validated QA status for the moun…
mmabrouk Jul 25, 2026
695a9ee
style(api): format env.py for ruff 0.15 (CI formatter)
mmabrouk Jul 25, 2026
15ed54d
fix: preserve empty runtime session flag overrides
mmabrouk Jul 29, 2026
4c77704
fix(frontend): surface a failed harness catalog instead of silently d…
Jul 24, 2026
9473803
Merge branch 'release/v0.106.1' into fix/session-sort-by-last-used
ardaerzin Jul 30, 2026
ee82caa
fix(frontend): preserve freshest lastMessageAt when bumping session a…
ashrafchowdury Jul 30, 2026
a862938
chore(deps): bump next from 15.5.18 to 15.5.21 in /web
bekossy Jul 30, 2026
3efeaea
Merge pull request #5556 from Agenta-AI/fix/session-sort-by-last-used
mmabrouk Jul 30, 2026
9dc2f41
[5541] fix(frontend): parse skill frontmatter as YAML and isolate bun…
mmabrouk Jul 30, 2026
15f25d6
Merge pull request #5492 from Agenta-AI/fix/agent-drawer-catalog-error
mmabrouk Jul 30, 2026
513003a
Merge pull request #5564 from Agenta-AI/fix/5541-skill-upload-reliabi…
mmabrouk Jul 30, 2026
903c5c1
fix(web): declare react-syntax-highlighter as an ee dependency
bekossy Jul 30, 2026
2f937ba
Merge pull request #5520 from Agenta-AI/worktree-fix-sts-mount-expiry…
mmabrouk Jul 30, 2026
a274e2c
test(api): add mtime regression + acceptance coverage for mounts file…
Yuvakunaal Jul 23, 2026
50bd927
test(api): address CodeRabbit feedback on mtime regression test
Yuvakunaal Jul 23, 2026
3d0cd6a
Merge pull request #5455 from Yuvakunaal/fix/5416-mounts-regression-t…
mmabrouk Jul 30, 2026
9ac0c55
Merge pull request #5560 from Agenta-AI/feat/sessions-flags-default-on
mmabrouk Jul 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
255 changes: 255 additions & 0 deletions .agents/skills/implement-feature/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,255 @@
---
name: implement-feature
description: Drive a researched and planned feature to a landed, tested change. Use after plan-feature has produced a docs/design/<project>/ workspace and the user says "implement it", "build the plan", "run the plan", or "let's ship this". Orchestrates refresh-plan, implement, review, a debug-local-deployment loop, and a test loop across the daytona / local-pi / claude x SDK / UI matrix, then documentation and a GitButler stacked branch. The orchestrator stays in the loop and spins narrow subagents for each phase.
allowed-tools: Read, Edit, Write, Grep, Glob, Bash, Agent, Task
user-invocable: true
---

# Skill: Implement a Planned Feature

This is the step after `plan-feature`. Research is done and a plan exists. Your job is to
turn that plan into a change that builds, runs end to end, and stays green, then to write it
up and put it on a branch.

You are the orchestrator. You do not write the whole feature yourself in one pass. You drive
the feature through phases and spin a narrow subagent for each phase, handing it full
context. You stay in the loop between phases, read each result, update the plan, and decide
the next move. This mirrors the subagent discipline in the `agent-workflows-qa` skill: every
fixer is followed by a reviewer, and every fix is followed by a retest.

## Precondition: a plan workspace exists

The feature must already have a planning workspace from `plan-feature`:

- `docs/design/<project>/` with at least `README.md`, `context.md`, `plan.md`,
`status.md`, and `research.md`.

If there is no such workspace, stop. Run `plan-feature` first. Do not improvise a plan inside
this skill. `status.md` is the source of truth for progress and stays current through every
phase below.

## The chain at a glance

```
plan-feature -> [ implement-feature ] -> write-pr-description (when you open the PR)
|
Phase 0 refresh the plan (status.md is truth)
Phase 1 implement (implementer subagent: smallest correct change)
Phase 2 review (reviewer subagent: root cause, no regression)
Phase 3 debug end to end (debug subagent, loop) -> debug-local-deployment skill
Phase 4 tests (test subagent, loop) -> agent-workflows-qa + agent-replay-test
Phase 5 document + PR draft (docs subagent) -> write-docs + write-pr-description (Context + Scope/risk + How to QA)
Phase 6 stacked branch (GitButler) -> but (publish Phase 5 PR body on push)
```

## Keep the orchestration console current (when the effort has one)

If this work is tracked in an `orchestration-console` project (see the `orchestration-console`
skill), mirror progress to the console as you go, so the user reads status and answers decisions
from the dashboard instead of chat. The console never replaces the PR review flow; it links to
it. The hooks map onto the phases above:

- **Start of every turn:** `console pending --project <p>` and act on the user's answers and
notes first, then `console decision lock` each one you acted on.
- **Phase 0:** `console task add` one task per slice; `console message` what this run attempts.
- **Phase 1:** `console task set <slice> --status running --owner <impl-agent>`.
- **Phase 2:** on changes requested, a `console message --ref task:<slice>`.
- **Phase 3-4:** when a debug/test loop stalls and you would escalate to the user, raise a
`console decision add` (the stuck state + options + your rec) instead of burying it in chat.
This is the highest-value hook: it is exactly the "route / debug" decision that gets lost today.
- **Phase 5:** `console task set <slice> --status in-review --pr <url>`.
- **Phase 6:** on push, `console message` with the PR link.

## Phase 0: Refresh the plan

Before any code changes, re-read the workspace and reconcile it with the code as it stands
now. Plans rot. The repo may have moved since the plan was written.

1. Read `context.md`, `plan.md`, `research.md`, and `status.md`.
2. Verify the plan's file and symbol citations still exist. Where the code drifted, correct
the plan, do not code against a stale map.
3. Cut the plan into the smallest shippable slices, each one independently reviewable and
testable. Record the slice list and the acceptance check for each in `plan.md`.
4. Update `status.md`: what is done, what this run will attempt, known blockers.

End Phase 0 with a concrete slice to build and a written acceptance check for it.

## Phase 1: Implement

Spin an implementer subagent per slice. Keep it narrow and give it everything it needs to
work cold:

- the slice goal and its acceptance check from `plan.md`,
- the exact files and symbols to touch (from the refreshed plan),
- the repo conventions that apply (the relevant `AGENTS.md`, the area skills),
- the rule: make the smallest correct change, match the surrounding code, do not refactor
next door, do not commit.

When the slice defines or changes an interface or contract — API params, wire fields, config
schema, tool definition, event payload — apply the `design-interfaces` skill first: classify
each field by its semantic role (data, config, policy, credentials, routing, metadata,
protocol context), not the feature it touches, and fix the shape before it ships. The
reviewer in Phase 2 checks the same lens on any contract the slice moved.

When the slice spans the API or SDK, the subagent runs `ruff format` then `ruff check --fix`
before reporting done. For frontend slices it runs `pnpm lint-fix` in `web/`. The subagent
returns a short diff summary and a self-check against the acceptance criterion. You read it.
You do not trust "done" without the check.

## Phase 2: Review

Every implementation is followed by a review. Spin a reviewer subagent and hand it the diff
plus the slice goal. Its job is to confirm the change actually solves the slice, find
regressions, and catch the class of mistake a fixer working alone misses (a Dockerfile `CMD`
overridden by a compose `command:`, a default that looks right but is read from the wrong
layer, an edit that the dev stack will not hot-reload).

The reviewer reports: root cause addressed yes or no, regressions, and required changes. If it
asks for changes, loop back to Phase 1 with its notes. Do not advance with an open review.

Note on `/code-review` (ultrareview): the heavy cloud review is user-triggered and billed, and
you cannot launch it from here. When the change is large or risky, finish the subagent review,
then tell the user they can run `/code-review ultra` on the branch for a deeper pass.

## Phase 3: Debug end to end (loop until it works)

A slice is not done when it compiles. It is done when it runs against the live stack. Spin a
debug subagent that drives the running deployment with the `debug-local-deployment` skill:
find the live port and compose project, reproduce the path through the playground UI and the
backend API, read the container logs, and confirm the slice does what the acceptance check
says.

Loop: run, observe, fix, re-run. Each iteration is a debug subagent that reports what it saw
and what it changed, followed by a reviewer when it changes code (Phase 2 still applies inside
the loop). Watch dev-mode reload rules: backend and frontend source hot-reload, but a changed
`@agenta/*` package or a new dependency needs a restart or rebuild. See
`debug-local-deployment` for the exact commands.

Exit the loop when the slice works end to end against the live stack. See the loop discipline
section below for when to stop trying and escalate instead.

## Phase 4: Tests (loop until green across the matrix)

Now make it stay working. Spin a test subagent that improves coverage and runs the suite,
then loops until green. Use the real project test targets, never throwaway scripts.

For agent-workflows changes, the bar is the QA matrix from the `agent-workflows-qa` skill.
"Test with daytona / local pi / claude, using both the SDK and the UI" maps to its axes:

- **Environment**: `E1` service + in-process Pi, `E2` service + Rivet local, `E3` service +
Rivet Daytona, `E4` local SDK script. E3 is the daytona cell. E1 or E2 is the local-pi
cell. E4 is the SDK path.
- **Harness**: `pi`, `agenta`, `claude`. The claude cell needs an `anthropic` provider key in
the target project's vault, and claude always forces the Rivet backend.
- **Surface**: the SDK (E4, a script that pulls config and runs on the host) and the UI (the
playground, driven with the `mcp__chrome-devtools__*` tools against the live deployment).

Force each capability with a token the model cannot guess (a constant inside a code tool, a
value from `uname -m`, a record only the MCP server has) so a pass proves the capability ran,
not just that the agent answered. Consult `qa/matrix.md` for which cells are valid before
testing one. Do not test cells that cannot exist.

When a matrix cell is green and worth keeping green, pin it with the `agent-replay-test` skill:
capture one real `/run`, redact the volatile fields, and write a replay test that exercises
the real SDK and service code against the recorded runner response with no live LLM. These run
cost-free in the default CI lane.

Loop until the suite is green and the targeted matrix cells pass. A capability that is
advertised but never actually invoked is a fail.

## Phase 5: Document and pre-draft the PR body

When the feature works and stays green, write it up. Spin a docs subagent.

- Update `status.md` to "landed" with what shipped and what was deferred.
- Update the living docs under `docs/design/<project>/` and, when the feature changes how a
user runs or configures the agent, the agent-workflows `documentation/` pages. Use the
`write-docs` skill for Agenta voice and structure.
- If the slice moved an interface, wire field, endpoint, config field, default, harness/backend
value, or runtime behavior, run the `keep-docs-in-sync` skill: it maps the change to every
doc that describes it (the `documentation/` pages, the interface inventory page AND its index
row, the relevant `AGENTS.md`, skills) and enforces one source of truth. A contract change and
its docs land in the same PR. Do this inside the same docs subagent.
- Run a clarity pass with the `style-editing` skill (Williams' principles: real characters as
subjects, active voice, old-before-new, cut the throat-clearing, land the strong word last).
- Carry anything you could not finish into `defer-todo` format so it is not lost.
- Draft the PR body now, while the change is fresh. Use the `write-pr-description` skill. The body MUST include: a **Context** section (the symptom + why), a **Scope / risk** section (what was not touched, what could regress), and a **How to QA** section with prerequisites, numbered steps, expected result, the exact test command to run, and edge cases. These are the things reviewers always ask for — they belong in the first draft, not after a review round.

## Phase 6: Stacked branch (GitButler)

Put the work on its own lane. This repo runs GitButler, so use `but`, not raw git, and follow
the repo's gotchas.

1. `but oplog snapshot -m "before <feature> branch"` first. The workspace is usually dirty
with other lanes' work, so protect it.
2. `but status` to see the lanes and pick the parent to stack on.
3. `but branch new <type>/<feature> --anchor <parent>` to stack on that parent.
4. Stage only this feature's files to the new lane with `but rub <path> <branch>`, then
`but commit <branch> --only -m "..."`. Never run a bare `but commit`, which sweeps every
unassigned change in the workspace into the lane.
5. Stop there unless the user asks to push. When they do, `but push <branch>` then
`gh pr create --head <branch> --base <parent-or-main>`. Use the PR body drafted in Phase 5
(via the `write-pr-description` skill). Confirm it includes Context, Scope / risk, and the
full How to QA section (prerequisites, steps, expected result, test command, edge cases)
before creating the PR. End commit messages and PR bodies with the session footer the repo
conventions require.

If a file is gitignored (a personal `.claude/skills/*` skill, for example), it will not enter
the lane. Commit the tracked deliverables and say plainly which files stayed local.

## Multi-agent coordination (when others work in parallel)

This repo often has several agents in one GitButler working tree at once. To avoid tangling
GitButler and to keep local and remote in sync:

- Read `docs/design/agent-workflows/scratch/agent-coordination.md` first and claim a dated row
for your task. Re-read it to see which files other lanes already own.
- Serialize every `but` write behind the board's BUT-LOCK: take it, write, release it. Never
let two `but` mutations run at once across agents.
- Stage ONLY your task's files to your lane (`but rub <path> <lane>`), then
`but commit <lane> --only`. Never a bare `but commit` — it sweeps every unassigned change in
the shared tree into your lane. Leave the shared `agent-coordination.md` edits unassigned.
- Do not edit a file another active agent is mid-change on. If your work and theirs must touch
the same file, sequence (let theirs land first); the board serializes commits, not live
edits, so concurrent same-file edits corrupt each other.
- Commit in small, frequent chunks and keep local and remote in sync: push your lane
(`but push <lane>`) when a slice is done so origin matches your working tree, and update the
PR. Always leave a short "what changed" note (a PR comment, or a board row update) so the
next agent and the reviewer are not left re-diffing.
- Merge into the integration branch (`big-agents`) only when explicitly told.

## Subagent discipline

- Keep each subagent narrow and hand it full context: the goal, the files, the acceptance
check, the conventions. A subagent that has to guess produces work you have to redo.
- Every implementer or fixer is followed by a reviewer. Every fix is followed by a retest. No
exceptions.
- Run independent subagents in parallel (several review dimensions, several matrix cells), but
put a barrier where the next phase needs all of the prior results.
- You synthesize. Subagents return findings, you decide. Do not hand the wheel to a subagent
for a design call.

## Loop discipline (do not spin forever)

The debug loop and the test loop can run away. Bound them.

- Set a cap before you start (for example three rounds). If a round makes no progress, stop
looping.
- When stuck, triage with the `agent-workflows-qa` tree: fix-now only for a small change with
an obvious home and no design question; otherwise **defer** (write a `defer-todo` finding
with a clean repro) or **escalate** to the user (a repo restructure, a security surface, a
new config the user must decide). When in doubt between fix-now and defer, defer.
- Keep `status.md` current at every turn so the next session, or the next agent, can pick up
cold.

## Quick reference

| Phase | Skill it leans on |
|---|---|
| 0 Refresh plan | `plan-feature` workspace (`docs/design/<project>/`) |
| 1 Implement | area `AGENTS.md`, area skills; `design-interfaces` (contract changes); `ruff` / `pnpm lint-fix` |
| 2 Review | reviewer subagent; optional user-run `/code-review ultra` |
| 3 Debug e2e | `debug-local-deployment` |
| 4 Tests | `agent-workflows-qa`, `agent-replay-test` |
| 5 Document + PR draft | `keep-docs-in-sync` (contract/interface changes), `write-docs`, `style-editing`, `defer-todo`, `write-pr-description` (with Context + Scope/risk + How to QA) |
| 6 Branch | `but` (GitButler); publish the Phase 5 PR body on push |
Loading
Loading