meisnerd
Joined 8 months ago
Joined 8 months ago
The activity log captures every state change with timestamps and actor IDs, so when something breaks you can trace the exact sequence. And since agents communicate through inbox.json, there's a full message trail — who delegated what, what reports came back, what decisions were requested.
Curious about your markdown + git approach — do you get merge conflicts when multiple agents write to the same state files simultaneously? That was the main reason I went with JSON + async-mutex instead. Git history gives you great auditability but concurrent writes to the same file need some kind of coordination layer.
Mission Control's mitigation is treating the shared data layer as the durable state rather than the session itself. Each agent session is ephemeral, but it reads from and writes to persistent JSON files — tasks, inbox, decisions, activity log — so the accumulated state of all previous sessions is available to the next one. There's also a compressed context snapshot (ai-context.md, ~650 tokens) that gets regenerated and gives each new session situational awareness: what's done, what's in progress, what's blocked, what decisions are pending.
So agents aren't fully amnesiac — they inherit the project state — but you're right that they can't replay their own previous reasoning. If an agent tried approach A in session 1 and it failed, session 2 only knows that if someone (or the agent itself) wrote it down in the task notes or activity log. That's a manual bridge, not a structural one.
Named, resumable sessions with full transcript replay would be a better foundation. That's more of a Claude Code platform feature than something I can build on top — but if claude -p ever supports session IDs or transcript export, wiring that into Mission Control's task history would be a natural fit.
Curious what you're using for the persistent session layer — custom wrapper around the API, or something off-the-shelf?
acceptanceCriteria: [ "All tests pass (pnpm test)", "No TypeScript errors (pnpm tsc --noEmit)", "File written to src/components/NewFeature.tsx", "Completion report posted to inbox" ]
When a task launches, those criteria get injected into the agent's prompt context alongside the task description, subtasks, and agent instructions. The agent sees exactly what "done" means before it starts working.
You're also right that the deeper problem is "successfully completed the wrong thing." Retry logic assumes failure is obvious (exit code ≠ 0), but a task that silently drifts is harder to catch. The /ship-feature command enforces a verification step — runs tests, lints, and typechecks before marking anything complete — which catches a lot of the "it wrote code but nothing actually works" cases.
That said, there's still a gap between "tests pass" and "this actually does what I asked." That's where the human-in-the-loop decisions queue helps — agents can post a decision request like "I implemented X, but the acceptance criteria mention Y. Should I continue?" — but making agents reliably self-evaluate against criteria is still an open problem.
And you don't actually need Claude Code to use it — Mission Control works with any AI agent that can read/write local files. The data layer is just JSON, and the API is token-optimized (~50 tokens per request vs ~5,400 unfiltered, about a 94% reduction) so it's lightweight for any agent to consume. The Eisenhower matrix, Kanban, goal hierarchy, and brain dump all work standalone too. The daemon and agent orchestration just layer on top when you're ready for it.
On email specifically: great callout about structured vs raw MIME. My current thinking is a parsed webhook approach — sender, subject, body, thread ID as structured fields. Raw MIME would be a nightmare for agents to parse and waste tokens on headers nobody cares about. The GitHub Issues integration is closer to shipping (it's one of our open issues now), email is further out but the inbox architecture already supports it — just needs an ingest layer.
Task provenance is an interesting gap you've identified. Right now tasks have createdAt, assignedTo, and the activity log tracks every state change, but there's no explicit "originated from" field linking back to an email or Slack message. That would be a clean addition to the schema — something like source: { type: "email" | "github" | "manual", ref: "..." }. Appreciate the specific feedback.