aegiscode 5.2.33 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,422 +1,177 @@
1
- # aegiscode
1
+ # aegiscode — the terminal host
2
2
 
3
- <div align="center">
3
+ `aegiscode` in your shell — the command-line version of AEGIS Desktop. The same
4
+ tool surface the Claude Code plugin exposes over MCP, plus a terminal instead of
5
+ an editor — built on the same two shared pieces and no others:
4
6
 
5
- [![GitHub stars](https://img.shields.io/github/stars/aegisinfo/aegiscode?style=flat&logo=github&label=Stars&color=534AB7)](https://github.com/aegisinfo/aegiscode/stargazers)
6
- [![npm version](https://img.shields.io/npm/v/aegiscode?style=flat&logo=npm&label=npm&color=CB3837)](https://www.npmjs.com/package/aegiscode)
7
- [![npm downloads](https://img.shields.io/npm/dt/aegiscode?style=flat&logo=npm&label=downloads&color=CB3837)](https://www.npmjs.com/package/aegiscode)
8
- [![License](https://img.shields.io/badge/license-MIT-brightgreen?style=flat)](LICENSE)
9
- [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-0F6E56?style=flat)](https://github.com/aegisinfo/aegiscode/pulls)
7
+ | Shared piece | What it is |
8
+ |---|---|
9
+ | `client/aegis.js` | The thin transport. Holds the API key, speaks HTTP/SSE. No brain logic. |
10
+ | `mcp/tools.js` | The tool registry — names, JSON schemas, result formatting. |
11
+ | `desktop/renderer/usage.js` | The token-usage → number mapping, shared with the GUI so the two can never disagree. |
10
12
 
11
- </div>
13
+ Routing, model tiers, memory and billing all stay behind aegiscloud.org.
12
14
 
13
- **aegiscode remembers your project between sessions — so you never have to re-explain your stack, decisions, or context.**
15
+ ## Names: one name, `aegiscode`
14
16
 
15
- <picture>
16
- <source media="(prefers-color-scheme: dark)" srcset="assets/demo.svg">
17
- <img src="assets/demo.svg" alt="aegiscode terminal demo — animated" width="100%"/>
18
- </picture>
17
+ This host and the CLI used to be two names for two packages. They are one
18
+ product, so they are one name now:
19
19
 
20
- Multi-model terminal coding assistant. Works with Claude, OpenAI, DeepSeek, Groq, Gemini and Ollama. BYOK — your keys, your cost.
20
+ | Name | Status |
21
+ |---|---|
22
+ | `aegiscode` | **this host**, v6.0.0. Installs a single binary, `aegiscode`. |
23
+ | `aegis-terminal` | deprecated — the 0.1.x spelling of this package, folded into `aegiscode`. |
24
+ | `aegiscode-cli` | 4.0.3, an earlier name of the full `aegisinfo/aegiscode` coding-assistant CLI. Untouched. |
25
+ | `aegis-cli` | 0.4.8 (unrelated). |
26
+ | `aegis` (bin) | claimed **twice already** — by `aegiscode-cli` (→ `bin/cli.js`) and by `aegis-desktop` (→ `bin/aegis.js`). Pre-existing; whichever installs last wins. |
21
27
 
22
- - **Private AI, BYOK** run fully local with Ollama, no API key needed. A free aegiscloud.org account is still required to start the app (one-time Google login), but nothing you run locally leaves your machine.
23
- - **A model that grows over time** — `/router` auto-picks the cheapest model that can handle each task and learns from every session, so cost drops while quality holds.
24
- - **Many models, one answer** `/council` votes and `/debate` makes them argue it out, so you get a reasoned consensus instead of one model's guess.
25
- - **Cloud sync — $2/month** — keep cross-session semantic memory and sync every session across machines. Activate with a single code.
26
-
27
- > ### Semantic memory — €2/month
28
- > The AI remembers your project, stack, and decisions across every session.
29
- > Subscribe at **[aegiscloud.org](https://aegiscloud.org)**, then activate with one command:
30
- >
31
- > ```
32
- > /memory activate <token>
33
- > ```
34
-
35
- ---
28
+ Publishing this host as `aegiscode` moves the `latest` dist-tag for that name
29
+ onto it. The previous line (`aegiscode@5.x`, the `aegisinfo/aegiscode` agent) is
30
+ still installable and immutable on the registry pin `aegiscode@5` for it.
36
31
 
37
32
  ## Install
38
33
 
39
- > Requires **Node.js >= 22**. Install via [nvm](https://github.com/nvm-sh/nvm): `nvm install 22`
40
-
41
- > **Important:** Use [Kitty](https://sw.kovidgoyal.net/kitty/) (recommended) or a modern terminal emulator (Ghostty, WezTerm, Alacritty, iTerm2, Windows Terminal) for the best experience. Older terminals may have rendering issues.
42
-
43
34
  ```bash
44
35
  npm install -g aegiscode
36
+ # or, from a source checkout — no install needed:
37
+ node cli/bin/aegiscode.js
45
38
  ```
46
39
 
47
- Or from source:
40
+ Requires Node 18+. Set your key once:
48
41
 
49
42
  ```bash
50
- git clone https://github.com/aegisinfo/aegiscodex-
51
- cd aegiscodex-
52
- bash install.sh
43
+ export AEGIS_API_KEY="aegis_..."
53
44
  ```
54
45
 
55
- `install.sh` builds the project and creates an `aegis-cli` wrapper in `~/.local/bin` — no sudo needed.
56
-
57
- **Prefer a native window over a raw terminal?** [ds-terminal](https://github.com/aegisinfo/ds-terminal) wraps `aegis-cli` in a GPU-accelerated Alacritty window with a split-pane layout — AI session on top, shell below.
46
+ ## Use
58
47
 
59
48
  ```bash
60
- curl -fsSL https://dl.aegiscloud.org/ds-terminal/install.sh | bash
61
- ```
62
-
63
- ---
64
-
65
- ## First run
66
-
67
- Run `aegis-cli` the first thing it does is open your browser for a one-time login to your free aegiscloud.org account (Google sign-in). This is required even for fully local/Ollama-only use; once logged in, the session is cached and you won't see it again.
68
-
69
- After login, if no API keys are configured, an interactive setup guide launches automatically:
70
-
71
- ```
72
- aegiscode Setup
73
-
74
- Keys are saved to ~/.aegiscode/.env
75
-
76
- Select provider:
77
- Anthropic (Claude) ANTHROPIC_API_KEY
78
- OpenAI (GPT) OPENAI_API_KEY
79
- DeepSeek DEEPSEEK_API_KEY
80
- Groq GROQ_API_KEY
81
- Google Gemini GEMINI_API_KEY
82
- Ollama (local) (no key needed)
83
- ```
84
-
85
- Pick a provider, paste your key, and optionally add more. Keys are saved to `~/.aegiscode/.env` and the app starts immediately.
86
-
87
- **Or configure manually** create `~/.aegiscode/.env`:
88
-
89
- ```env
90
- ANTHROPIC_API_KEY=YOUR_ANTHROPIC_API_KEY
91
- OPENAI_API_KEY=YOUR_OPENAI_API_KEY
92
- DEEPSEEK_API_KEY=YOUR_DEEPSEEK_API_KEY
93
- GROQ_API_KEY=YOUR_GROQ_API_KEY
94
- GEMINI_API_KEY=YOUR_GEMINI_API_KEY
95
- ```
96
-
97
- Only add the keys for providers you want to use. aegiscode picks them up automatically.
98
-
99
- ---
100
-
101
- ## Claude Code Pro/Max subscription login
102
-
103
- Already paying for Claude Code? Use your subscription instead of a pay-per-token Anthropic API key:
49
+ aegiscode # interactive session
50
+ aegiscode "why is the sky blue" # one-shot, prints the answer and the tokens
51
+ aegiscode -p "..." --json # machine-readable
52
+ echo "q" | aegiscode -p - # prompt on stdin
53
+ aegiscode -m deepseek/deepseek-v4-flash -p "..." # pin a model
54
+ ```
55
+
56
+ In a session, plain text is a prompt. `/help` lists commands:
57
+
58
+ | Command | What it does |
59
+ |---|---|
60
+ | `/ask <prompt>` | Pooled inference (identical to typing the prompt) |
61
+ | `/status` | Key, plan, account, memory state |
62
+ | `/models` | The model ids you can pin |
63
+ | `/balance` | Token-bank balance and recent spend — tokens beside € |
64
+ | `/recall <query>` | Search cloud memory |
65
+ | `/remember <text>` | Save a durable note |
66
+ | `/memory` `/import` | Review or import memory from other tools |
67
+ | `/byok` `/byok-set` `/byok-rm` | Bring-your-own-key status and management (the key is prompted, never echoed) |
68
+ | `/model` `/stream` `/theme` `/cost` `/clear` `/help` `/quit` | Session controls |
69
+ | `/tool <name> [json]` | Call any registry tool directly |
70
+
71
+ Every command above that talks to AEGIS names a tool from `mcp/tools.js`, and
72
+ the test suite asserts both directions: no command points at a tool that does
73
+ not exist, and no tool is unreachable from the prompt.
74
+
75
+ Command names, aliases and categories follow `aegiscodex-dev`'s registry, so the
76
+ vocabulary matches the other terminal host: the AEGIS family is spelled
77
+ `/aegis-ask`, `/aegis-status`, `/aegis-recall`, `/aegis-remember`, `/aegis-import`
78
+ (with `/ask`, `/status`, `/recall`, `/remember` kept as aliases), and the session
79
+ and model controls are its `help`/`?`/`h`, `exit`/`quit`, `clear`/`cls`,
80
+ `theme`/`t`, `version`/`v` and `model`/`m`. Commands that need a local agent loop
81
+ this client deliberately does not have — `/login`, `/doctor`, `/permissions`,
82
+ `/mcp`, `/skills`, `/hooks`, `/agents`, `/resume` and a few more — are listed but
83
+ answer honestly with the reason and the nearest working alternative rather than
84
+ pretending to work.
85
+
86
+ ## What it looks like
87
+
88
+ ```
89
+ ━────────────────────────────────────────────────────────────────────────────━
90
+
91
+ ✦ █████▓▓░ ▓▓▓▓▓▓▓▓▓ ✦ ▒▒▒▒▒▒▒▒▒▒▒▒
92
+ ✦ ███▓░ ░░ ▓▓▓▓▓▓▓░░░ ▒▒▒▒▒▒▒▒▒▒▒▒▒
93
+ ░░░░ ███▓░ ▓▓▓▓░░░░░░ ██▒▒▒▒▒▒▒▒▒▒▒▒▓▓
94
+ ░░░░░░░░ ███▓░ ░░░░░░ ██▒▒▒▒▒▒▒▒▒▒▒▒▓
95
+ ░░░░░░░░░░░░ ███▓░ ✦ · · ▒▒▒▒▒▒▒▒▒▒▒▒▒▒
96
+ ██▓░░ ▓ ░░░░░░░░░░░░
97
+ ░▓▓███▓▓░
98
+ ▐▛███▜▌
99
+ ▝▜█████▛▘
100
+ ▘▘ ▝▝
101
+
102
+ Welcome to AEGIS Code
103
+ v6.1.0 · Cloud brain in your shell.
104
+
105
+ ───────────────────────────────── aegiscode ──────────────────────────────────
106
+ version v6.1.0
107
+ model nexus-brain
108
+ base https://aegiscloud.org
109
+ key aegis_••••4f2a
110
+ render streaming
111
+
112
+ type /help for commands · /quit to exit
113
+
114
+ ❯ summarise what changed in the token accounting
115
+ ● Three things changed, and one of them was costing you money:
116
+
117
+ - the pool merges worker usage instead of overwriting it
118
+ - cache reads and writes are billed, not ignored
119
+ - a zero-token call no longer refunds its reservation
120
+
121
+ merge_usage({input_tokens: 1250}, {output_tokens: 312})
122
+ => 1562 total
123
+
124
+ Use /balance to see tokens beside € on every row.
125
+ ⎿ nexus-brain · 1,562 tok · 1,250/312 · €0.0007 · 4.2s · 4 calls
126
+
127
+ * Consulting… (2.1s) esc to interrupt
128
+ aegis · nexus-brain · 1,562 tok · €0.0007 · stream ctrl+c quit
129
+ ```
130
+
131
+ Render it yourself, with no key and no network:
104
132
 
105
133
  ```bash
106
- claude setup-token # generates a Claude Code OAuth token (sk-ant-oat...)
107
- aegis-cli login --claude-pro # paste it in
134
+ node cli/scripts/demo.mjs # from a source checkout
135
+ # --light, --width 100, --plain also work
108
136
  ```
109
137
 
110
- The token is saved to `~/.aegiscode/.env` as `CLAUDE_CODE_OAUTH_TOKEN` and takes priority over `ANTHROPIC_API_KEY` for any Anthropic model. Anthropic only allows OAuth subscription tokens to make API calls through the official `claude` binary, so aegiscode shells out to it instead of calling the API directly — the `claude` CLI must be installed and on `PATH`. Tool calls (file edits, shell commands) run through `claude`'s own permission system, following whichever permission mode you've set in aegiscode.
138
+ ## Design notes
111
139
 
112
- ---
140
+ **It looks like `aegiscodex-dev` on purpose.** The gold/coral/lavender palette,
141
+ the `✦`-studded welcome mark (mascot, crescent moon and diving whale), the `❯`
142
+ prompt, the `⎿` hook rows and the `✻` spinner line are the `aegiscodex-dev`
143
+ design system, adopted wholesale rather than approximated: the palette, glyphs,
144
+ welcome art, working verbs and command vocabulary all come from it, and
145
+ `test/cli-conformance.test.mjs` pins every RGB triple, glyph, spinner frame, verb
146
+ and art row to that source so the two hosts cannot drift apart. (An earlier
147
+ revision of this CLI was a deliberate divergence — a violet/cyan "Signal" theme
148
+ with a test asserting it. That direction is gone.)
113
149
 
114
- ## Quick start
115
-
116
- ```bash
117
- aegis-cli # interactive mode
118
- aegis-cli "refactor this file" # start with a message
119
- aegis-cli --model deepseek-chat # use a specific model
120
- aegis-cli --router # start with the auto-router on
121
- aegis-cli --continue # resume last session
122
- aegis-cli --resume <session-id> # resume specific session
123
- aegis-cli --print "what does this repo do?" # headless — print response, exit
124
- aegis-cli --print --output-format json "summarize this" # headless JSON output, for scripts
125
- ```
150
+ **A linear transcript, not a full-screen TUI.** Finished turns are written once
151
+ to the scrollback; only the one live line (spinner, elapsed time) is redrawn.
152
+ Output stays selectable, searchable and pipeable, which matters for a tool you
153
+ script.
126
154
 
127
- ---
155
+ **Tokens beside money, always.** A turn prints what it consumed and what it
156
+ settled at, in the same line: `1,562 tok ∙ 1,250/312 ∙ €0.0007`. Sub-cent
157
+ amounts keep four decimals, because a €0.0007 call rendered at 2dp reads as
158
+ free usage next to a token count.
128
159
 
129
- ## Configuration
130
-
131
- Config lives at `~/.aegiscode/config.json`. It is created automatically on first run.
132
-
133
- API keys are read from `~/.aegiscode/.env` — you don't need to put them in `config.json`.
134
-
135
- To add a custom model inside the app:
136
-
137
- ```
138
- /model add openrouter-mixtral "Mixtral 8x7B" mistralai/mixtral-8x7b-instruct https://openrouter.ai/api/v1 sk-or-...
139
- ```
140
-
141
- ---
142
-
143
- ## Built-in models
144
-
145
- | ID | Model | Provider |
146
- |----|-------|----------|
147
- | `claude-fable-5` | claude-fable-5 | Anthropic |
148
- | `claude-sonnet-4` | claude-sonnet-4-6 | Anthropic |
149
- | `claude-opus-4` | claude-opus-4-8 | Anthropic |
150
- | `claude-haiku-4` | claude-haiku-4-5-20251001 | Anthropic |
151
- | `openai-gpt-5.5` | gpt-5.5 | OpenAI |
152
- | `openai-gpt-4o` | gpt-4o | OpenAI |
153
- | `openai-o3` | o3 | OpenAI |
154
- | `deepseek-chat` | deepseek-chat | DeepSeek |
155
- | `deepseek-reasoner` | deepseek-reasoner | DeepSeek |
156
- | `groq-llama` | llama-3.3-70b-versatile | Groq |
157
- | `groq-deepseek` | qwen-qwq-32b | Groq |
158
- | `gemini-2.5-pro` | gemini-2.5-pro | Google |
159
- | `gemini-2.5-flash` | gemini-2.5-flash | Google |
160
- | `ollama-local` | llama3.2 | Ollama (local) |
161
-
162
- Any OpenAI-compatible API can be added as a custom model.
163
-
164
- ---
165
-
166
- ## Commands
167
-
168
- Full reference with copy-paste examples: **[aegiscloud.org/aegiscode/commands](https://aegiscloud.org/aegiscode/commands)**
169
-
170
- ### Session & Help
171
-
172
- | Command | Alias | Description |
173
- |---------|-------|-------------|
174
- | `/help [command]` | `/?` `/h` | Show all commands, or detailed help for one |
175
- | `/clear` | `/cls` | Clear chat history, same session ID |
176
- | `/compact` | | Manually compress conversation to free up context window |
177
- | `/status` | `/st` | Session info — current model, permission mode, message count, context usage |
178
- | `/tokens` | `/tok` | Token usage graph and estimated dollar spend |
179
- | `/version` | `/v` | Show installed aegiscode version |
180
-
181
- ### Models & Routing
182
-
183
- | Command | Alias | Description |
184
- |---------|-------|-------------|
185
- | `/model [id]` | `/m` | Interactive model switcher, or jump to a model by ID |
186
- | `/model list` | | List all configured models |
187
- | `/model add <id> <name> <model> <baseURL> <apiKey>` | | Add a custom model |
188
- | `/model remove <id>` | | Remove a model |
189
- | `/router [on\|off\|stats]` | | Auto-pick the cheapest model per task based on complexity |
190
- | `/router set <tier> <id>` | | Pin a model to the simple/medium/complex tier |
191
- | `/effort [off\|low\|medium\|high\|max]` | | Set Claude's extended-thinking effort level |
192
- | `/confirm [on\|off] [model-id\|claude\|deepseek\|all]` | `/confirmations` | Toggle tool-call confirmation prompt per model |
193
- | `/yolo [on\|off]` | | Toggle auto-approve for all tool calls (no prompts) |
194
-
195
- ### Multi-Agent
196
-
197
- | Command | Alias | Description |
198
- |---------|-------|-------------|
199
- | `/multi <task>` | | Orchestrate multiple AI agents on a complex task |
200
- | `/multiyolo <task>` | | Same as `/multi` with auto-approved tool calls |
201
- | `/build <description>` | `/forge` | Build an app with multiple AI models in parallel |
202
- | `/clone <url> [--name <project>]` | `/fetch-site` `/websnap` | Clone a website's structure and styling using DeepSeek |
203
- | `/council <question>` | | Send to every configured model, surface the majority answer |
204
- | `/debate <topic> [--models id1,id2] [--rounds N]` | `/db` | Structured multi-round debate between models |
205
- | `/research <question>` | | Multi-agent deliberation research |
206
-
207
- ### Agent Apps (prebuilt pipelines)
208
-
209
- | Command | Description |
210
- |---------|-------------|
211
- | `/audit` | Full security audit — Scanner → Risk Analyzer → Reporter (3 agents) |
212
- | `/refactor` | Analyze and apply refactoring — Analyzer → Planner → Implementer (3 agents) |
213
- | `/test-gen` | Generate comprehensive test suite — Explorer → Designer → Writer (3 agents) |
214
-
215
- ### Memory & Cloud
216
-
217
- | Command | Alias | Description |
218
- |---------|-------|-------------|
219
- | `/memory activate <token>` | | Activate persistent cross-session semantic memory |
220
- | `/memory stats` | | Show memory usage and quota |
221
- | `/memory clear` | | Wipe stored memory |
222
- | `/memory load <url\|path>` | | Load content into memory index |
223
- | `/memory upload` | | Upload memory to cloud |
224
- | `/cloud [status\|key <k>\|activate\|deactivate]` | | Manage AEGIS Cloud sync — sessions browsable at aegiscloud.org/dashboard |
225
- | `/billing` | | Show subscription tier, next billing date, memory quota |
226
-
227
- ### Customization
228
-
229
- | Command | Alias | Description |
230
- |---------|-------|-------------|
231
- | `/theme [name]` | `/t` | Show or switch UI theme |
232
- | `/thinking` | | Toggle extended-thinking blocks expanded/collapsed |
233
- | `/copy [n\|last\|list\|raw]` | `/cp` | Copy a code block to clipboard |
234
- | `/skills [name\|refresh]` | `/sk` | List, show, or refresh discovered skills |
235
- | `/hooks [status\|list]` | | View configured hooks and their status |
236
- | `/mcp [tools\|<server-name>]` | | Show connected MCP server status and tools |
237
-
238
- ### Copy, paste & text selection
239
-
240
- | Action | How |
241
- |--------|-----|
242
- | Copy last assistant reply | `Alt+C` or `Ctrl+C` at idle (markdown stripped) |
243
- | Copy your last message | `Alt+U` |
244
- | Copy a code block | `/copy [n\|last\|list\|raw]` or `/cp` |
245
- | Select text with the mouse + copy | `Alt+S` toggles **selection mode** — suspends mouse-wheel tracking and pauses the idle cursor blink (which would otherwise erase your selection every 800 ms) so the terminal's native mark/select + `Ctrl+Shift+C` works, then `Alt+S` again to resume wheel scrolling |
246
- | Paste into the input | Works via bracketed paste (`Ctrl+Shift+V` / middle-click); a multi-line paste is collapsed to a **first-line + `…`** preview while the full text is kept and submitted |
247
-
248
- > Note: on VTE-based terminals (gnome-terminal, xfce4-terminal) and Windows Terminal, the app's mouse-wheel tracking disables native mouse selection — use `Alt+S` there. On kitty/iTerm2/wezterm selection works alongside wheel scrolling, so the toggle is rarely needed.
249
-
250
- ---
251
-
252
- ## /router — automatic model routing
253
-
254
- aegiscode can pick which configured model handles each message for you, based on how hard the task actually looks — so a quick lookup doesn't pay for an expensive model, and a real architecture question doesn't get shortchanged by a cheap one.
255
-
256
- ```
257
- /router on # start auto-picking a model per message
258
- /router set simple deepseek-chat # pin a tier to a specific model id
259
- /router # show current status + tier mapping
260
- ```
261
-
262
- Classification is a handful of cheap heuristics (message length, question phrasing, keywords like "architecture" or "security") — no extra model call to decide. When no tier is pinned explicitly, it defaults to a fixed cost-ordered list of the built-in models filtered to ones you have an API key for — and learns from there: if you abort (`Esc`/`Ctrl+C`) a response, that costs the model handling it some confidence for that tier, so a model that keeps getting cut off loses ground to the next cheapest one over time. `/router stats` shows the learned success rate per tier and model. This is a noisy signal (people abort for reasons that have nothing to do with quality too), so don't expect it to be perfectly tuned after a handful of sessions — it's real adaptation from real usage, not a black box.
263
-
264
- Running `/model <id>` always wins — it pins your choice for the rest of the session and the router backs off until you run `/router on` again. The status bar shows `model: <name> (auto)` whenever the router picked it for you.
265
-
266
- ---
267
-
268
- ## /build — parallel multi-model app builder
269
-
270
- `/build` decomposes your task into components, assigns each to the best available AI model, and builds everything simultaneously.
271
-
272
- ```
273
- /build a REST API for a todo app with PostgreSQL
274
- /build a CLI tool that summarizes git commits
275
- /build a Flask web app with login and dashboard
276
- ```
277
-
278
- **How it works:**
279
-
280
- 1. **Plan** — primary model produces a component tree (JSON)
281
- 2. **Build** — all components built in parallel, each by the best model for that role:
282
- - DeepSeek → backend, algorithms (`DEEPSEEK_API_KEY`)
283
- - GPT-4o → frontend, UI (`OPENAI_API_KEY`)
284
- - Llama via Groq → tests, docs (`GROQ_API_KEY`)
285
- - Primary model → architecture, integration
286
- 3. **Sync** — summary of files written and how to run the app
287
-
288
- All agents write real files to your current directory. The more API keys you have configured, the more models work in parallel.
289
-
290
- ---
291
-
292
- ## /council & /debate — many models, one answer
293
-
294
- Don't trust a single model on a hard call. Put several to work on it.
295
-
296
- ```
297
- /council "is a state machine overkill for this form?" # they vote, consensus wins
298
- /debate "monorepo vs polyrepo for this team" --rounds 3 # they argue it out across rounds
299
- /debate "React vs SolidJS" --models gpt-4o,deepseek # pick the panel
300
- ```
301
-
302
- `/council` sends the question to multiple configured models simultaneously, then surfaces the majority answer with the dissents. `/debate` runs a structured, multi-round discussion — each model sees the others' arguments and refines or pushes back — so you get reasoning, not just a tally. Both auto-pick from the models you have keys for; add more keys, get a bigger panel.
303
-
304
- ---
305
-
306
- ## Tools
307
-
308
- aegiscode can read, write, and execute files in your project. Tool permissions are configured per-project in `.aegiscode/settings.json`:
309
-
310
- ```json
311
- {
312
- "permissions": {
313
- "allow": ["Bash(git *)", "Bash(ls *)"],
314
- "ask": ["Bash(curl *)", "Bash(rm -r *)"],
315
- "deny": ["Bash(sudo *)", "Read(.env)"]
316
- }
317
- }
318
- ```
319
-
320
- Permission modes:
321
-
322
- | Mode | Behavior |
323
- |------|----------|
324
- | `default` | Read auto, write requires confirmation |
325
- | `autoEdit` | Read + write auto, execute requires confirmation |
326
- | `yolo` | Everything auto-approved |
327
- | `plan` | Read only, everything else blocked |
328
-
329
- ---
330
-
331
- ## Memory
332
-
333
- Persistent cross-session memory requires an active subscription (€2/month).
334
-
335
- **How to activate:**
336
-
337
- 1. Subscribe at [aegiscloud.org](https://aegiscloud.org)
338
- 2. Check your inbox for the activation token
339
- 3. Run inside aegiscode:
340
-
341
- ```
342
- /memory activate <token>
343
- ```
344
-
345
- Once active, the AI remembers your stack, past decisions, and project context across every session — no re-explaining needed.
346
-
347
- ```
348
- /memory stats # usage and quota
349
- /memory clear # wipe stored memory
350
- ```
351
-
352
- ---
353
-
354
- ## Sessions
355
-
356
- Sessions are stored locally as JSONL files. Resume a previous session:
160
+ ## Tests
357
161
 
358
162
  ```bash
359
- aegis-cli --continue # resume most recent
360
- aegis-cli --resume <session-id> # resume by ID
361
- ```
362
-
363
- If cloud sync is active (`/cloud activate`, requires an aegiscloud.org API key), every session is also uploaded and browsable from **[aegiscloud.org/dashboard](https://aegiscloud.org/dashboard)** search, folders, notes, and bulk export, from any browser. The desktop GUI's Cloud tab links straight there.
364
-
365
- ---
366
-
367
- ## Skills
368
-
369
- Skills are Markdown files (`SKILL.md`) that teach aegiscode a specialized capability or house rule — discovered automatically, loaded only when relevant so they don't cost tokens up front.
370
-
371
- ```
372
- .aegis/skills/<name>/SKILL.md # project-level, git-tracked
373
- ~/.aegis/skills/<name>/SKILL.md # user-level, global
374
- ```
375
-
376
- `.claude/skills/` is also scanned for compatibility with Claude Code skills. Project-level skills win over user-level ones with the same name, so a project can override a global skill with local knowledge.
377
-
378
- ```
379
- /skills # list discovered skills
380
- /skills <name> # show a skill's full details
381
- /skills refresh # rescan skill directories
382
- ```
383
-
384
- A `SKILL.md` is just frontmatter + instructions:
385
-
386
- ```markdown
387
- ---
388
- name: my-skill
389
- description: What it does and when to use it — this is what the AI sees by default.
390
- allowed-tools: [Read, Grep, Bash]
391
- user-invocable: true
392
- ---
393
-
394
- Full instructions, loaded only when the skill is actually triggered.
395
- ```
396
-
397
- ---
398
-
399
- ## MCP
400
-
401
- aegiscode supports MCP (Model Context Protocol) servers. Configure in `~/.aegiscode/config.json`:
402
-
403
- ```json
404
- {
405
- "mcpEnabled": true,
406
- "mcpServers": {
407
- "my-server": {
408
- "type": "stdio",
409
- "command": "npx",
410
- "args": ["-y", "@my/mcp-server"]
411
- }
412
- }
413
- }
414
- ```
415
-
416
- ---
417
-
418
- ## Built by
419
-
420
- **Niklas Borneklint** — [aegiscloud.org](https://aegiscloud.org) · [@aegisinfo](https://github.com/aegisinfo)
421
-
422
- Part of the ÆGIS ecosystem.
163
+ node ../../test/cli-conformance.test.mjs # the design guard: palette, glyphs, art, verbs
164
+ node ../../test/cli-render.test.mjs # width safety, accounting, live region
165
+ node ../../test/cli-overlays.test.mjs # the / palette, model + effort pickers, resume list
166
+ node ../../test/cli-fuzzy.test.mjs # palette ranking and match positions
167
+ node ../../test/cli-markdown.test.mjs # span-line markdown, cell widths
168
+ node ../../test/cli-tools.test.mjs # registry parity with the MCP host + dispatch
169
+ node ../../test/cli-run.test.mjs # the real binary against a real backend
170
+ node ../../test/cli-package.test.mjs # the published layout, isolated from the repo
171
+ npm test # all of the above
172
+ ```
173
+
174
+ `npm run predist` stages `client/`, `mcp/tools.js` and the desktop's `usage.js`
175
+ into `cli/vendor/` (gitignored) so the published package resolves its own
176
+ modules. `test/cli-package.test.mjs` copies that tree somewhere with no repo
177
+ around it and runs the binary there.