Skip to content

v1.79.0 ·

One window instead of three

The problem

Bare aidlc opens a one-shot menu: pick a command, it runs, the program exits. Working with AIDLC still takes three terminals — one for aidlc commands, one for the agent, one for aidlc autopilot status --watch.

How it could be solved

Three choices, each about keeping one window honest without rebuilding the tools it sits on.

The first was how a command runs inside the console. It runs in the same process, through the same parser the plain command line uses, so its options, defaults and prompts behave exactly as they do anywhere else. Its output is copied as it prints, so the agent can read what just happened without anyone pasting it across. Starting a separate program for each command would have lost either that copy or the inline prompts.

The second was how to talk to the agent. Each message starts one short run of the agent's own command line tool, picking up the previous conversation by its id. A single long-lived process would have spawned less, but it would tie the console to the least stable part of each tool, and one of the two supported agents has no such mode at all. The message goes in on standard input, never as an argument, so nothing typed can be mistaken for an option.

The third was what the agent may do. When it asks for a tool it is not allowed, the console asks the person, and a yes allows that exact command for the rest of the session and nothing wider. No flag that skips permission checks is ever passed. The autopilot view follows the same restraint: it prints a line when an item changes instead of redrawing a frame every few seconds, so the conversation above it stays readable.

How AIDLC solves it

Bare aidlc and aidlc menu open a console that stays open, instead of the one-shot menu.

  • /command runs any aidlc command in-process, asking inline for missing arguments; /setup runs autopilot setup; /help lists everything; Tab completes.
  • !command runs a shell line in the project directory.
  • Plain words go to the user's own Claude Code or Codex, one resumed process per turn, message on stdin. Output of / and ! commands since the last turn is handed to the agent. Tools Claude Code refused are asked about inline. /agent switches, /new starts over, Ctrl-C stops a turn, the running cost is shown.
  • The opening summary shows autopilot, stalled instances, the roadmap and the agent, plus a newer version when one exists.
  • Autopilot changes print above the prompt; Ctrl-T or /watch hides them; Tab on an empty prompt focuses the section (approve, read artifact, log, open worktree, forget).
  • Leaving never stops autopilot and says how to come back.

Minor, not patch: a new capability. No command, flag or exit code is removed. aidlc menu keeps its name and now opens the console. Off a terminal, bare aidlc and aidlc menu behave exactly as before.

Not shipped: the two-column Cockpit layout. Captured as .aidlc/roadmap/inbox/20261010-console-cockpit-layout.md.

Changes

  • packages/cli/src/console/ — new: route.ts, harness.ts, standing.ts, autopilot-view.ts, session.ts, terminal.ts, index.ts.
  • packages/cli/src/cli.ts, packages/cli/src/commands/menu.ts — open the console.
  • packages/cli/src/menu/index.ts — openMenu retired; fallbacks and commandForm kept.
  • packages/cli/src/commands/status.ts — stalledInstances export.
  • Tests: packages/cli/test/console-units.test.ts, packages/cli/test/console-session.test.ts (new), packages/cli/test/cli-menu.test.ts (updated).
  • Docs: README.md, packages/cli/README.md (regenerated), packages/content/docs/lifecycle.md, packages/website/src/data/cli-reference.json (regenerated).
  • Spec: four ADDED requirements under the new console capability, folded at completion (aidlc spec fold aidlc-console --dry-run is clean).

Docs topic page: this repository has no docs/index.yaml; the topic text that described the menu (packages/content/docs/lifecycle.md) was updated.