Skip to content

v0.12.0 — .aegis.yaml + aegis config + ConfigPanel

Choose a tag to compare

@apiad apiad released this 27 May 16:21
· 1313 commits to main since this release

Breaking

  • .aegis.py removed. .aegis.yaml is now the single config substrate. Rewrite imperative Agent(...) / queues = {...} / telegram_token = ... lines as YAML sections — see Configuration. Any .aegis.py in the tree is ignored.
  • aegis init retired. Bootstrap by launching aegis in an empty directory (the TUI opens the ConfigPanel — press a to add an agent), or via the scriptable CLI: aegis config agent add <slug> --provider <…> --model <…>.

aegis config CLI surface

Idempotent subcommands for every authorable section of .aegis.yaml. Each writing verb routes through ruamel.yaml so existing comments + key order are preserved, validates the prospective body via the YAML loader before persisting, and fails loud on invalid input (the on-disk file is unchanged):

```
aegis config show [--json]
aegis config agent list / add --provider --model [--effort] [--permission] / remove
aegis config queue list / add --agent --max-parallel [--budget …]+ / remove
aegis config telegram show / set [--token --chat-id --auto-prompt + --clear-* variants]
aegis config default-agent
aegis config plugin-dir list / add / remove
```

--budget format: usd:1.00:1h or output_tokens:500000:1h (repeatable).

TUI ConfigPanel

New tab type. Stacks default-agent + agents/queues/telegram/plugin_dirs tables, re-reads .aegis.yaml on each refresh. Launching aegis with no .aegis.yaml mounts the panel as the only tab. F2 opens (or focuses) it from any other tab mid-session. Press a on the panel for an AddAgentModal that validates through the same add_agent helper the CLI uses.

Ctrl+, was the original mid-session binding but most terminals can't deliver it distinctly from , — F2 is the new home.

File picker — keyboard nav + unique-match bypass

  • Up/Down/PgUp/PgDn move the highlight while focus stays in the Input (priority bindings).
  • Top match is always preselected after each filter — Enter opens it without arrow keys.
  • Escape is a priority binding so the Input can't swallow it.
  • Indexer poll is one-shot; was running every 150ms forever and clobbering your typed query.
  • Ctrl+click on a backtick token bypasses the picker entirely when the token resolves to a unique indexed file. Falls back to the prefilled picker, whose dismiss path now actually opens the file (the previous push_screen call dropped the result).

File viewer — cancel-edit confirm bar

Escape in edit mode with unsaved modifications now shows a ⚠ unsaved edits — [d] discard / [esc] keep editing bar and parks the TextArea read-only so the bar's keystrokes don't get typed into the buffer. Clean buffer still exits edit mode silently.


1009 hermetic tests green. Full changelog: CHANGELOG.md.