docs: add AGENTS.md for team-mode and tmux-subagent features
This commit is contained in:
@@ -0,0 +1,92 @@
|
|||||||
|
# team-mode — Parallel Multi-Agent Coordination
|
||||||
|
|
||||||
|
**Generated:** 2026-04-18
|
||||||
|
|
||||||
|
## OVERVIEW
|
||||||
|
|
||||||
|
Parity with Claude Code Agent Teams. OFF by default. Enable via `team_mode.enabled` in config.
|
||||||
|
|
||||||
|
Spawns coordinated agent teams with shared mailbox, task list, and lifecycle management. Lead delegates, members claim tasks, graceful shutdown with acks.
|
||||||
|
|
||||||
|
## MODULE LAYOUT
|
||||||
|
|
||||||
|
```
|
||||||
|
team-mode/
|
||||||
|
├── index.ts # barrel exports (types, worktree)
|
||||||
|
├── types.ts # Zod schemas: TeamSpec, Member, Message, Task, RuntimeState
|
||||||
|
├── member-parser.ts # member validation with eligibility registry
|
||||||
|
├── deps.ts # dependency injection types
|
||||||
|
├── team-session-registry.ts # in-memory sessionId -> team/member map for spawn-race-safe lookups
|
||||||
|
├── team-registry/ # team spec loading from ~/.omo/teams/
|
||||||
|
│ ├── index.ts
|
||||||
|
│ ├── loader.ts # load from user + project scopes
|
||||||
|
│ ├── paths.ts # path resolution
|
||||||
|
│ └── validator.ts # TeamSpec validation
|
||||||
|
├── team-state-store/ # durable runtime state
|
||||||
|
│ ├── index.ts
|
||||||
|
│ ├── store.ts # CRUD for state.json
|
||||||
|
│ ├── resume.ts # resume orphaned runs
|
||||||
|
│ └── locks.ts # atomic file locks
|
||||||
|
├── team-runtime/ # team lifecycle
|
||||||
|
│ ├── index.ts
|
||||||
|
│ ├── create.ts # team_create implementation
|
||||||
|
│ ├── status.ts # team_status implementation
|
||||||
|
│ ├── shutdown.ts # shutdown request/approve/reject
|
||||||
|
│ ├── resolve-member.ts # member agent resolution
|
||||||
|
│ └── resolve-member-dependencies.ts
|
||||||
|
├── team-mailbox/ # async messaging
|
||||||
|
│ ├── index.ts
|
||||||
|
│ ├── send.ts # team_send_message
|
||||||
|
│ ├── poll.ts # inbox polling
|
||||||
|
│ ├── ack.ts # message ack
|
||||||
|
│ └── inbox.ts # inbox file ops
|
||||||
|
├── team-tasklist/ # shared task list
|
||||||
|
│ ├── index.ts
|
||||||
|
│ ├── store.ts # task CRUD
|
||||||
|
│ ├── list.ts # team_task_list
|
||||||
|
│ ├── get.ts # team_task_get
|
||||||
|
│ ├── update.ts # team_task_update (claim, complete)
|
||||||
|
│ ├── claim.ts # task claiming with locks
|
||||||
|
│ └── dependencies.ts # task dependency graph
|
||||||
|
├── team-worktree/ # git worktree per member
|
||||||
|
│ ├── index.ts
|
||||||
|
│ ├── manager.ts # worktree lifecycle
|
||||||
|
│ └── cleanup.ts # worktree removal
|
||||||
|
├── team-layout-tmux/ # optional tmux visualization
|
||||||
|
│ ├── index.ts
|
||||||
|
│ ├── layout.ts # pane layout management
|
||||||
|
│ ├── close-team-member-pane.ts # close member pane + rebalance window
|
||||||
|
│ ├── rebalance-team-window.ts # redistribute layout after pane changes
|
||||||
|
│ └── sweep-stale-team-sessions.ts # garbage-collect orphaned team tmux sessions
|
||||||
|
└── tools/ # 12 team_* tools
|
||||||
|
├── index.ts # tool registration
|
||||||
|
├── lifecycle.ts # create, delete, shutdown
|
||||||
|
├── messaging.ts # send_message
|
||||||
|
├── tasks.ts # task_create, list, update, get
|
||||||
|
└── query.ts # status, list
|
||||||
|
```
|
||||||
|
|
||||||
|
## STORAGE LAYOUT
|
||||||
|
|
||||||
|
See user guide: `docs/guide/team-mode.md`
|
||||||
|
|
||||||
|
## KEY INVARIANTS
|
||||||
|
|
||||||
|
1. **Deferred ack**: Messages are fire-and-forget; recipient acks via separate call.
|
||||||
|
2. **Locked tasks**: Task claiming uses atomic file locks; concurrent claims resolve safely.
|
||||||
|
3. **Atomic writes**: All state changes write to temp file then rename.
|
||||||
|
4. **Eligible agents only**: sisyphus, atlas, sisyphus-junior, hephaestus allowed. Read-only agents rejected at parse.
|
||||||
|
5. **No nested teams**: Members cannot call `team_create`.
|
||||||
|
6. **Spawn-race-safe session resolution**: Every team session spawn MUST call `registerTeamSession(sessionId, entry)` synchronously when the sessionID becomes known; every hook that resolves a sessionID to a team/member MUST call `lookupTeamSession` before falling back to `loadRuntimeState` to avoid the spawn-race window.
|
||||||
|
|
||||||
|
## WHERE TO LOOK
|
||||||
|
|
||||||
|
| Task | Location |
|
||||||
|
|------|----------|
|
||||||
|
| Add new team tool | `tools/` + register in `index.ts` |
|
||||||
|
| Modify member eligibility | `types.ts` AGENT_ELIGIBILITY_REGISTRY |
|
||||||
|
| Change storage format | `types.ts` Zod schemas |
|
||||||
|
| Add worktree features | `team-worktree/manager.ts` |
|
||||||
|
| Modify tmux layout | `team-layout-tmux/layout.ts` |
|
||||||
|
| Task lifecycle changes | `team-tasklist/` |
|
||||||
|
| Mailbox protocol changes | `team-mailbox/` |
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
## OVERVIEW
|
## OVERVIEW
|
||||||
|
|
||||||
28 files. State-first tmux integration managing panes for background agent sessions. Handles split decisions, grid planning, polling, and lifecycle events.
|
32 files. State-first tmux integration managing panes for background agent sessions. Handles split decisions, grid planning, polling, and lifecycle events.
|
||||||
|
|
||||||
## CORE ARCHITECTURE
|
## CORE ARCHITECTURE
|
||||||
|
|
||||||
@@ -16,6 +16,8 @@ TmuxSessionManager (manager.ts)
|
|||||||
└─→ EventHandlers: React to session create/delete
|
└─→ EventHandlers: React to session create/delete
|
||||||
```
|
```
|
||||||
|
|
||||||
|
All tmux command execution is centralized through `src/shared/tmux/runner.ts` (`runTmuxCommand`). Do NOT add direct `Bun.spawn([tmux,...])` calls in this module. They will drift from the retry/timeout/terminal-error discipline.
|
||||||
|
|
||||||
## KEY FILES
|
## KEY FILES
|
||||||
|
|
||||||
| File | Purpose |
|
| File | Purpose |
|
||||||
|
|||||||
Reference in New Issue
Block a user