diff --git a/wiki/personal-os-architecture.md b/wiki/personal-os-architecture.md index 9ce4eb9b..0584cc17 100644 --- a/wiki/personal-os-architecture.md +++ b/wiki/personal-os-architecture.md @@ -22,7 +22,7 @@ See: `personal-os-purpose.md` ### Орёл / Eagle (Tactician + reactive layer) — Hermes v0.11.x Discord bot - Reads `~/context/status.md`, daily/weekly briefs, vault via obsidian MCP - Discord channels: `#daily-brief` `#inbox` `#focus` `#executor` `#projects` `#journal` `#retrospector` -- Cron jobs: morning-brief (08:30 MTWRF), eod-summary (18:00 MTWRF), inbox-check (30 min 09–19 MTWRF), weekly-plan (Mon 08:00), weekly-review (Fri 17:00), retrospector (Fri 17:30), commit-vault (23:00 daily) +- Cron jobs: morning-brief (08:30 MTWRF), eod-summary (18:00 MTWRF), inbox-check (30 min 09–19 MTWRF), weekly-plan (Mon 08:00), weekly-review (Fri 17:00), retrospector (Fri 17:30), executor-autonomous (hourly 09–18 MTWRF), commit-vault (23:00 daily) - Logs corrections to `corrections_log` table (SQL INSERT, silently on pushback) - **Never accesses Asana API directly** — only reads pre-rendered markdown and DB @@ -31,14 +31,39 @@ See: `personal-os-purpose.md` - Sources: corrections_log table, status.md subtask counts, obsidian git log, activity_daily quadrants, stories visibility metric - Prompt: `~/Developer/personal-os/agent/prompts/retrospector.md` -### Исполнитель (Executor) — on-demand autonomous worker -- Triggered by explicit "fix bug [GID]" in #executor — never autonomous -- Creates git worktree at `~/DuckDuckGo/apple-browsers.git/.claude/worktrees/executor-{gid}-{slug}/` +### Исполнитель (Executor) — two modes + +**Manual mode**: triggered by "fix bug [GID]" in #executor - Single STOP gate after analysis; then autonomous: fix → build → test → draft PR → CI loop -- State machine in `executor_runs` table - Prompt: `~/Developer/personal-os/agent/prompts/executor-bug-fix.md` + +**Autonomous mode**: hourly cron (09–18 workdays) → #executor +- Maintains a queue from: My Hack Days, Watched, O-L Backlog, stale My Tasks +- Analyzes tasks → posts "[Auto] Ready to start" with complexity/feasibility +- Waits for "go {gid}" to start; no reply = moves to next analysis +- Max 1 active fix at a time; handles CI/review on open draft PRs +- Stops touching a PR once Alex moves it out of draft or pushes commits +- No Asana comments; no touching other people's PRs +- Queue state in `executor_queue` table; live plan: `~/Developer/personal-os/briefs/executor-queue.md` +- Prompt: `~/Developer/personal-os/agent/prompts/executor-autonomous.md` + +**Shared**: +- Worktree at `~/DuckDuckGo/apple-browsers.git/.claude/worktrees/executor-{gid}-{slug}/` +- Always `git fetch origin main` + branch from `origin/main` +- State machine in `executor_runs` table - For UI tests: spins VM via ddg-vm MCP (virfield), cleans up on PR close/merge +**Eagle commands in #executor**: +| Command | Effect | +|---------|--------| +| `fix bug {gid}` | Spawn manual executor (separate agent) | +| `go {gid}` | Approve autonomous task → starts next tick | +| `skip {gid}` | Skip task in queue | +| `stop` | Pause current autonomous task | +| `next` | Pause current, analyze next | +| `resume {gid}` | Re-queue paused task | +| `queue` | Show current executor-queue.md | + ## Data Flow ``` @@ -92,7 +117,8 @@ Executor runs | task_annotations | manual / Eagle | generate-status.js irrelevant filter | | activity_daily | generate-status.js | retrospector quadrant drift | | corrections_log | Eagle on pushback | retrospector pattern analysis | -| executor_runs | executor | generate-status.js active runs, executor state machine | +| executor_runs | executor (manual + autonomous) | generate-status.js active runs, executor state machine | +| executor_queue | executor-autonomous | generate-status.js queue display, autonomous tick state | ## MCP Servers