@voybio/ace-swarm 2.4.4 → 2.4.6

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.
Files changed (120) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/README.md +72 -532
  3. package/assets/eval-battery/battery.json +85 -0
  4. package/assets/eval-battery/fixtures/edit-target.js +3 -0
  5. package/assets/scripts/render-mcp-configs.sh +12 -0
  6. package/dist/ace-context.d.ts +18 -0
  7. package/dist/ace-context.js +161 -16
  8. package/dist/ace-server-instructions.js +36 -9
  9. package/dist/bridge-trace.d.ts +17 -0
  10. package/dist/bridge-trace.js +23 -0
  11. package/dist/cli.d.ts +9 -1
  12. package/dist/cli.js +619 -10
  13. package/dist/discovery-runtime-wrappers.d.ts +16 -1
  14. package/dist/discovery-runtime-wrappers.js +65 -9
  15. package/dist/eval-harness.d.ts +110 -0
  16. package/dist/eval-harness.js +254 -0
  17. package/dist/experience-reflector.d.ts +13 -0
  18. package/dist/experience-reflector.js +62 -0
  19. package/dist/goal-engine.d.ts +155 -0
  20. package/dist/goal-engine.js +795 -0
  21. package/dist/helpers/store-resolution.js +40 -39
  22. package/dist/hermes/session-manager.d.ts +10 -0
  23. package/dist/hermes/session-manager.js +130 -27
  24. package/dist/job-scheduler.d.ts +58 -0
  25. package/dist/job-scheduler.js +202 -2
  26. package/dist/job-worker.d.ts +87 -0
  27. package/dist/job-worker.js +182 -0
  28. package/dist/local-model-policy.d.ts +8 -2
  29. package/dist/local-model-policy.js +31 -17
  30. package/dist/local-model-runtime.d.ts +6 -0
  31. package/dist/local-model-runtime.js +130 -2
  32. package/dist/measured-classing.d.ts +66 -0
  33. package/dist/measured-classing.js +165 -0
  34. package/dist/model-bridge.d.ts +45 -0
  35. package/dist/model-bridge.js +502 -44
  36. package/dist/orchestrator-supervisor.js +1 -1
  37. package/dist/plan-proposal.d.ts +7 -0
  38. package/dist/plan-proposal.js +74 -4
  39. package/dist/playbook-adaptation.d.ts +37 -0
  40. package/dist/playbook-adaptation.js +159 -0
  41. package/dist/playbook-curator.d.ts +16 -0
  42. package/dist/playbook-curator.js +106 -0
  43. package/dist/playbook-llm-reflector.d.ts +26 -0
  44. package/dist/playbook-llm-reflector.js +157 -0
  45. package/dist/public-surface.d.ts +2 -0
  46. package/dist/public-surface.js +26 -14
  47. package/dist/safe-edit.d.ts +20 -0
  48. package/dist/safe-edit.js +355 -78
  49. package/dist/server.d.ts +11 -2
  50. package/dist/server.js +55 -5
  51. package/dist/shared.d.ts +12 -0
  52. package/dist/shared.js +13 -1
  53. package/dist/source-mutation-coordinator.d.ts +54 -0
  54. package/dist/source-mutation-coordinator.js +259 -0
  55. package/dist/status-events.d.ts +4 -1
  56. package/dist/status-events.js +41 -6
  57. package/dist/store/ace-packed-store.d.ts +28 -9
  58. package/dist/store/ace-packed-store.js +324 -57
  59. package/dist/store/bgzf.d.ts +4 -0
  60. package/dist/store/bgzf.js +94 -0
  61. package/dist/store/bootstrap-store.d.ts +4 -1
  62. package/dist/store/bootstrap-store.js +57 -3
  63. package/dist/store/cache-workspace.d.ts +8 -0
  64. package/dist/store/cache-workspace.js +67 -1
  65. package/dist/store/crc32.d.ts +2 -0
  66. package/dist/store/crc32.js +16 -0
  67. package/dist/store/fsck.d.ts +16 -0
  68. package/dist/store/fsck.js +240 -0
  69. package/dist/store/materializers/context-snapshot-materializer.d.ts +1 -0
  70. package/dist/store/materializers/context-snapshot-materializer.js +4 -1
  71. package/dist/store/materializers/projection-manager.d.ts +7 -0
  72. package/dist/store/materializers/projection-manager.js +37 -0
  73. package/dist/store/materializers/scheduler-projection-materializer.js +10 -3
  74. package/dist/store/repositories/goal-repository.d.ts +112 -0
  75. package/dist/store/repositories/goal-repository.js +157 -0
  76. package/dist/store/repositories/playbook-repository.d.ts +107 -0
  77. package/dist/store/repositories/playbook-repository.js +314 -0
  78. package/dist/store/store-artifacts.js +44 -2
  79. package/dist/store/store-authority-audit.js +1 -0
  80. package/dist/store/store-cli.d.ts +30 -0
  81. package/dist/store/store-cli.js +242 -0
  82. package/dist/store/store-snapshot.d.ts +12 -0
  83. package/dist/store/store-snapshot.js +74 -11
  84. package/dist/store/types.d.ts +1 -0
  85. package/dist/store/write-coordinator.d.ts +7 -0
  86. package/dist/store/write-coordinator.js +11 -0
  87. package/dist/todo-state.d.ts +21 -0
  88. package/dist/todo-state.js +150 -53
  89. package/dist/tools-agent.js +86 -22
  90. package/dist/tools-discovery.js +5 -3
  91. package/dist/tools-files.js +39 -18
  92. package/dist/tools-framework.js +31 -3
  93. package/dist/tools-goal.d.ts +11 -0
  94. package/dist/tools-goal.js +108 -0
  95. package/dist/tools-handoff.js +7 -11
  96. package/dist/tools-lifecycle.js +2 -0
  97. package/dist/tools-scheduler.js +44 -1
  98. package/dist/tools-skills.js +3 -2
  99. package/dist/tools-todo.js +64 -3
  100. package/dist/tools.js +2 -0
  101. package/dist/tui/chat.js +4 -0
  102. package/dist/tui/index.js +4 -1
  103. package/dist/tui/ollama.d.ts +2 -0
  104. package/dist/tui/openai-compatible.d.ts +14 -0
  105. package/dist/tui/openai-compatible.js +15 -2
  106. package/dist/tui/provider-discovery.d.ts +1 -0
  107. package/dist/tui/provider-discovery.js +2 -2
  108. package/docs/cli-reference.md +125 -0
  109. package/docs/development.md +46 -0
  110. package/docs/evaluation-safety.md +27 -0
  111. package/docs/experience-playbook.md +35 -0
  112. package/docs/hermes.md +129 -0
  113. package/docs/library-api.md +31 -0
  114. package/docs/mcp-tool-reference.md +290 -0
  115. package/docs/provider-security.md +85 -0
  116. package/docs/state-model.md +113 -0
  117. package/docs/troubleshooting.md +95 -0
  118. package/docs/tui-operator-guide.md +75 -0
  119. package/package.json +3 -1
  120. package/scripts/dev/run_hermes_crispr_live.mjs +212 -0
package/README.md CHANGED
@@ -4,9 +4,9 @@ Autonomous Coding Entity (ACE) is a local MCP server and CLI for agent-assisted
4
4
 
5
5
  `ace-swarm` provides Claude Code, Codex, Cursor, GitHub Copilot CLI, VS Code, and provider-backed workflows with a shared runtime: durable workspace state, typed handoffs, scheduler support, change intelligence, and operator tooling. All state lives in a single binary file — `agent-state/ace-state.ace` — with `.agents/ACE/ace-state.ace` kept only as a legacy fallback for older workspaces.
6
6
 
7
- Modern coding agents can already read files, write code, run commands, and call tools. The missing layer is coordination that survives restarts, model switches, and multi-agent work. ACE keeps the workflow in the store and projects only the files external clients still need. For provider-backed runs, ACE provides task context, tool surfaces, status events, evidence trails, and resumable state.
7
+ Modern coding agents can already read files, write code, run commands, and call tools. The missing layer is coordination that survives restarts, model switches, and multi-agent work. ACE keeps the workflow in the store and projects only the files external clients still need. For provider-backed runs, ACE supplies task context, tool surfaces, status events, evidence trails, and resumable state.
8
8
 
9
- The full MCP surface spans **~70 registered tools** across 12 domain modules — handoffs, scheduler, file ops, drift detection, git, memory, discovery, skills, lifecycle events, vericify, tracker, and framework orchestration — plus resources and prompts.
9
+ The full MCP surface spans **119 registered tools** across 13 domain modules — handoffs, scheduler, goals, file ops, drift detection, git, memory, discovery, skills, lifecycle events, vericify, tracker, and framework orchestration — plus resources and prompts. For premium hosts (Claude Code, Codex) a curated **`ace mcp --profile host-min`** exposes 22 high-value tools; the rest remain reachable via `run_orchestrator` delegation or `--profile full`. See the [MCP Tool Reference](docs/mcp-tool-reference.md) for the full catalog.
10
10
 
11
11
  ## ACE Manifesto
12
12
 
@@ -22,12 +22,12 @@ The full MCP surface spans **~70 registered tools** across 12 domain modules —
22
22
  ACE provides model providers with the context they cannot infer on their own: task state, tool surfaces, status events, evidence trails, and the next move in the loop.
23
23
 
24
24
  - `ace init --llm <provider>` records the selected runtime profile in the store.
25
- - `ace connect` records an explicit runtime profile from a user-chosen local runtime endpoint or hosted provider without inventing a local model preset.
26
- - `ace doctor` validates local or hosted runtime wiring, checks the selected model when the provider exposes listings, and keeps the runtime honest.
25
+ - `ace connect` records an explicit runtime profile from a user-chosen local runtime endpoint or hosted provider.
26
+ - `ace doctor` validates local or hosted runtime wiring and checks the selected model when the provider exposes listings.
27
27
  - `ace doctor --scan` probes common Ollama and llama.cpp endpoints and writes the selected profile back into the store.
28
28
  - `ace tui` is provider-aware for `ollama`, `llama.cpp`, `codex`, `claude`, `gemini`, and `copilot` when credentials or base URLs are configured.
29
29
  - `ace mcp` and `ace tui` expose the same workspace truth to the host, the terminal, and the model.
30
- - `ace mcp-shadow --tools <csv>` starts a filtered stdio server that exposes only the listed tools — used internally by the Hermes bridge so the local model sees a scoped, safe subset of the surface.
30
+ - `ace mcp-shadow --tools <csv>` starts a filtered stdio server that exposes only the listed tools — used by the Hermes bridge so a local model sees a scoped, safe subset of the surface.
31
31
 
32
32
  ## Why This Exists Now
33
33
 
@@ -38,66 +38,29 @@ Frontier models are getting more capable and more restricted at the same time. P
38
38
  - Ollama and llama.cpp keep local runtimes in play.
39
39
  - MCP remains the common protocol surface across clients and runtimes.
40
40
 
41
- ACE sits underneath that stack. It does not compete with the host you already use. It provides that host with a durable local runtime.
42
-
43
- ACE also provides scheduler primitives for queued work, dependency gates, leases, and resource locks so multi-agent runs stay coordinated.
41
+ ACE sits underneath that stack. It does not compete with the host you already use — it provides that host with a durable local runtime, plus scheduler primitives for queued work, dependency gates, leases, and resource locks so multi-agent runs stay coordinated.
44
42
 
45
43
  ## ACEPACK State Model
46
44
 
47
- ACE uses a custom binary format called ACEPACK to present `agent-state/ace-state.ace` as a structured single-file store. Existing workspaces that still carry `.agents/ACE/ace-state.ace` are read through the legacy fallback path. The file has three regions:
48
-
49
- ```
50
- ace-state.ace
51
- ├── Header (128 bytes)
52
- │ magic · version · flags
53
- │ kv_index_offset · kv_index_length · kv_chunk_end
54
- │ evt_offset · evt_length · evt_count · evt_base_id
55
- ├── KV Chunk Region (append-only, random-access)
56
- │ knowledge/agents/{name}/{file} → agent instruction text
57
- │ knowledge/skills/{name}/{file} → skill content
58
- │ topology/{kind} → swarm registry, route tables
59
- │ state/{...} → handoffs, todo, ledger, scheduler
60
- │ meta/{...} → schema version, project name
61
- │ Each chunk: [uint32 length][bytes]
62
- └── Columnar Event Section (rewritten on commit)
63
- uint32 event count
64
- int64[N] timestamps (epoch ms, big-endian)
65
- uint8[N] kinds (EntityKind enum)
66
- uint8[N] sources (ContentSource enum)
67
- uint8[N] flags (0x01 = deleted)
68
- uint32[N] payload offsets (→ payload pool)
69
- uint32[N] payload lengths
70
- uint32 pool length
71
- bytes[M] payload pool (UTF-8 JSON blobs)
72
- ```
73
-
74
- ### KV region — random-access blob cache
75
-
76
- All persistent state — agent instructions, skills, topology, task indexes, scheduler queues — lives in the KV region. Each key maps to an immutable chunk appended at write time. `commit()` rewrites the KV index (a small JSON map at the file tail) to reflect the live keys. `compact()` rewrites the KV region to remove dead space from overwritten keys, atomically via tmp-rename.
77
-
78
- Write cost: O(1) append + O(index_size) index rewrite.
79
- Read cost: O(1) seek + O(chunk_length) read.
80
-
81
- ### Columnar event section — typed handoff log
45
+ Most agent frameworks scatter runtime state across dozens of generated files — status logs, handoff records, todo lists, indexes — that drift apart and get re-parsed on every read. ACEPACK closes that gap: it is a custom binary format that presents all workspace state as one structured, single-file store at `agent-state/ace-state.ace`.
82
46
 
83
- Every `appendEntry()` call — handoffs, status events, ledger entries, session events — lands in an in-memory buffer and is flushed to the columnar section on `commit()`. The columnar layout stores fixed-width fields (timestamp, kind, source, flags) separately from payloads. This means:
47
+ - A **random-access KV region** holds agent instructions, skills, topology, task indexes, and scheduler queues as append-only chunks.
48
+ - A **columnar event section** stores the typed handoff and status log so time/kind scans read a few bytes per event instead of parsing full JSON.
49
+ - **Store-backed projections** mean external tools read the same truth through a single authority instead of divergent files.
84
50
 
85
- - Scanning "all handoffs in the last hour" reads only `timestamps[]` + `kinds[]` — 9 bytes per event, never touching the payload pool.
86
- - Per-event overhead is ~19 bytes fixed vs ~150 bytes for equivalent JSON.
87
- - At 100,000 events, the fixed columns are ~1.9 MB; a full JSON log would be ~15 MB.
51
+ The result is one coherent source of truth that survives restarts, compacts to reclaim space, and keeps a full replayable event history. For the on-disk byte layout, KV mechanics, and columnar details, see the [ACEPACK State Model reference](docs/state-model.md).
88
52
 
89
- Events accumulate for the workspace lifetime and survive `compact()`. Full historical replay is always available.
53
+ ### Reading hidden state
90
54
 
91
- ### Why one state file
55
+ Generated state is store-only by default — the workspace stays clean and agents read
56
+ through MCP tools. Humans stay in the loop through the CLI:
92
57
 
93
- | One `.ace` authority | What it avoids |
94
- |---|---|
95
- | Single append-only file | Hundreds of generated state files drifting apart |
96
- | KV region with typed keys | Hand-rolled file sprawl for runtime state, instructions, indexes |
97
- | Columnar event log | Repeated full-JSON parsing for timestamp and kind scanning |
98
- | Store-backed projections | External tools reading the same truth through different paths |
58
+ ace ls agent-state # list hidden artifacts by logical path
59
+ ace read agent-state/kanban.json
60
+ ace read agent-state/STORE_AUTHORITY_AUDIT.md --out /tmp/audit.md
99
61
 
100
- The store holds runtime state, agent instructions, skills, topology, schemas, and the complete event history. Materialized files exist only when an external client still needs a path on disk.
62
+ `ace read` is exact-length by construction: it returns the complete stored block or
63
+ fails loudly — never a truncated or delimiter-clipped view.
101
64
 
102
65
  ## Quick Start
103
66
 
@@ -108,6 +71,8 @@ npx -y @voybio/ace-swarm turnkey --project "My Project"
108
71
  ace mcp
109
72
  ```
110
73
 
74
+ The bare `ace` commands throughout the docs assume a global install (`npm install -g @voybio/ace-swarm`); without one, prefix each with `npx -y @voybio/ace-swarm`.
75
+
111
76
  Then, in your MCP host:
112
77
 
113
78
  ```text
@@ -117,10 +82,10 @@ initiate ACE
117
82
  Local-model path with Ollama:
118
83
 
119
84
  ```bash
120
- npx -y @voybio/ace-swarm turnkey --project "My Project" --llm ollama --model llama3.1:8b --base-url http://localhost:11434
85
+ npx -y @voybio/ace-swarm turnkey --project "My Project" --llm ollama --model qwen3:8b --base-url http://localhost:11434
121
86
  ollama serve
122
- ollama pull llama3.1:8b
123
- ace doctor --llm ollama --model llama3.1:8b --base-url http://localhost:11434
87
+ ollama pull qwen3:8b
88
+ ace doctor --llm ollama --model qwen3:8b --base-url http://localhost:11434
124
89
  ace mcp
125
90
  ```
126
91
 
@@ -133,20 +98,6 @@ ace doctor --llm llama.cpp --model local-model --base-url http://localhost:8080
133
98
  ace mcp
134
99
  ```
135
100
 
136
- Optional local-model path with the Hermes execution engine:
137
-
138
- ```bash
139
- ace init --project "My Project" --llm llama.cpp --base-url http://localhost:8080
140
- llama-server -m /path/to/model.gguf --port 8080
141
- ace doctor --scan # auto-detect endpoint and model
142
- ACE_HERMES_ROOT=/path/to/hermes-agent HERMES_PYTHON=/path/to/python \
143
- ace doctor --llm llama.cpp --base-url http://127.0.0.1:8080/v1 --model <model> --hermes
144
- ACE_HERMES_ROOT=/path/to/hermes-agent HERMES_PYTHON=/path/to/python \
145
- ace tui --provider llama.cpp --base-url http://127.0.0.1:8080/v1 --model <model> --hermes
146
- ```
147
-
148
- If you already have a local runtime running, `ace doctor --scan` will probe common Ollama and llama.cpp endpoints and write the selected profile back into the store.
149
-
150
101
  Hosted provider path with Codex:
151
102
 
152
103
  ```bash
@@ -156,6 +107,8 @@ ace doctor --llm codex --model gpt-5
156
107
  ace mcp
157
108
  ```
158
109
 
110
+ If you already have a local runtime running, `ace doctor --scan` will probe common Ollama and llama.cpp endpoints and write the selected profile back into the store. For the optional Hermes engine path, see [Local Models & Hermes](#local-models--hermes) and the [Hermes reference](docs/hermes.md). The full command list lives in the [CLI Reference](docs/cli-reference.md).
111
+
159
112
  ## What Bootstrap Writes
160
113
 
161
114
  ACE bootstrap is intentionally contained. The store is authoritative at `agent-state/ace-state.ace`; only a few host-facing files land in the workspace when requested.
@@ -183,7 +136,7 @@ Developer or MCP host
183
136
  │ ├── ace-state.ace (ACEPACK binary store)
184
137
  │ └── STATUS.md / kanban.html / HANDOFF.json projections
185
138
  │
186
- ├── ace mcp (full surface, ~70 tools)
139
+ ├── ace mcp [--profile host-min|full] (full surface 119 tools; host-min 22)
187
140
  │ │
188
141
  │ ├── tools, prompts, resources
189
142
  │ ├── typed handoff validation
@@ -215,20 +168,27 @@ Developer or MCP host
215
168
  +----------------------+--------------------------------------------------------------+
216
169
  | Runtime roles | ACE-Orchestrator, Coders, QA, Spec, Docs, Research, Ops, |
217
170
  | | Security, Memory, Release, Eval, Skeptic, astgrep, Builder |
218
- | MCP server | ~70 tools across 12 domain modules (stdio transport) |
171
+ | MCP server | 119 tools across 13 domain modules (stdio); host-min |
172
+ | | profile exposes 22 curated tools |
219
173
  | Durable state | Single `agent-state/ace-state.ace` authority for handoffs, |
220
- | | status events, todos, run ledger, job queue, and discovery |
221
- | Projections | Hook context, todo surface, and host config bundles |
222
- | Coordination | Scheduler queues, dependency gates, leases, resource locks |
223
- | Change intelligence | Delta scan, semantic snapshots, drift reports, rewrite hints |
224
- | Structural editing | ast-grep query, locate, rewrite, compile, patch |
225
- | Hermes bridge | Optional, user-supplied subprocess engine selected only with |
226
- | | `--hermes`; scoped shadow MCP tools, evidence tracking |
227
- | Terminal UI | Provider-aware TUI with chat, tabs, telemetry, and agent UI |
228
- | Local models | Ollama and llama.cpp bootstrap, doctor checks, and bridges |
229
- | Tracker integration | GitHub Issues, Linear adapter layer with snapshot cache |
230
- | Vericify | Test evidence log, process post trail (incl. blocker routing), bridge snapshot |
231
- | Skills | Packaged skills with catalog, audit, and triage |
174
+ | | status events, todos, run ledger, job queue, and discovery |
175
+ | Projections | Hook context, todo surface, and host config bundles |
176
+ | Coordination | Scheduler queues, dependency gates, leases, resource locks, |
177
+ | | in-process job worker, heartbeat watchdog, circuit breakers |
178
+ | Goal engine | `ace goal` self-paced objective loop with evidence-gated |
179
+ | | completion, tick/replan budgets, and operator stop |
180
+ | Change intelligence | Delta scan, semantic snapshots, drift reports, rewrite hints |
181
+ | Structural editing | ast-grep query, locate, rewrite, compile, patch |
182
+ | Hermes bridge | Optional, user-supplied subprocess engine selected only with |
183
+ | | `--hermes`; scoped shadow MCP tools, evidence tracking |
184
+ | Terminal UI | Provider-aware TUI with chat, tabs, telemetry, and agent UI |
185
+ | Local models | Ollama and llama.cpp bootstrap, doctor checks, and bridges |
186
+ | Tracker integration | GitHub Issues, Linear adapter layer with snapshot cache |
187
+ | Vericify | Test evidence log, process post trail (incl. blocker |
188
+ | | routing), bridge snapshot |
189
+ | Skills | Packaged skills with catalog, audit, and triage |
190
+ | Experience playbook | Evidence-gated lessons store (experimental, injection off by |
191
+ | | default; `ace playbook` / `ace eval --adapt`) |
232
192
  +----------------------+--------------------------------------------------------------+
233
193
  ```
234
194
 
@@ -243,360 +203,28 @@ ACE is for teams and solo operators who already like their coding host and want
243
203
 
244
204
  In that setup, the host remains the interface. ACE becomes the state contract underneath it.
245
205
 
246
- ## Local Models & Hermes Companion Engine
247
-
248
- Local models are good at generating text. They usually need help seeing the workspace, hearing the handoff trail, and remembering what changed two turns ago. ACE closes that gap.
249
-
250
- ### What Hermes is
251
-
252
- Hermes is an optional, user-supplied companion execution substrate. ACE does not install Hermes, clone it, or make it a package dependency. When the operator explicitly passes `--hermes` or `--engine hermes_local`, Hermes handles local provider quirks, streaming delivery, and robust tool-call framing. The local model provider is still Ollama or llama.cpp. ACE remains the system of record — state, evidence, verification, scheduler — and exports a **scoped shadow MCP tool surface** to Hermes so the local model only sees the tools it needs for a given task scope.
253
-
254
- ```
255
- ACE TUI (ace tui --hermes / --engine hermes_local)
256
- │ user input → ChatSession.sendMessage();
257
- │ ACE owns session identity, policy, state
258
- ▼
259
- runLocalModelTask() ← src/local-model-runtime.ts
260
- │ ACE dispatches, ACE controls the turn
261
- ▼
262
- HermesSubprocessExecutor ← Node.js class, src/hermes/session-manager.ts
263
- │ spawns Python worker; ACE controls lifecycle
264
- ├── writes hermesHome/config.yaml (provider, model, user-supplied Hermes path, shadow MCP entry)
265
- ├── pipes ace mcp-shadow --tools <csv> ← scoped tools-only shadow server (stdio)
266
- │ (ACE-owned; local model sees only allowed tools, not public prompts/resources)
267
- ▼
268
- hermes_bridge_worker.py ← Python subprocess
269
- │ reads config.yaml; calls shadow MCP & local model
270
- ├── streams framed NDJSON events → HermesBridgeFrameDecoder
271
- └── calls local model (ollama / llama.cpp)
272
- │
273
- ▼ bridge frames validated and applied by ACE
274
- ACE store (ace-state.ace) ← authoritative output; ACE-owned
275
- evidence, continuity, run ledger persisted here
276
- ```
277
-
278
- ### Bridge protocol
279
-
280
- The Node ↔ Hermes channel is a strictly typed newline-delimited JSON frame stream. Each frame carries a `type` field:
281
-
282
- | Frame type | Direction | Purpose |
283
- |---|---|---|
284
- | `session_open` | N→H | start session with config |
285
- | `turn_run` | N→H | submit a task turn |
286
- | `interrupt` | N→H | cancel in-flight turn |
287
- | `session_close` | N→H | shut down the worker |
288
- | `status` | H→N | heartbeat / progress |
289
- | `delta` | H→N | streaming token chunk |
290
- | `reasoning` | H→N | chain-of-thought (optional) |
291
- | `assistant_interim` | H→N | partial assistant message |
292
- | `tool_start` | H→N | tool call initiated |
293
- | `tool_progress` | H→N | tool call in flight |
294
- | `tool_complete` | H→N | tool call result |
295
- | `final` | H→N | complete assistant response |
296
- | `error` | H→N | fatal bridge error |
206
+ For hosted Codex, Claude, Gemini, and Copilot backends, use the [hosted provider quick setup](docs/provider-security.md#hosted-provider-quick-setup) to configure credentials, endpoints, current default models, and a provider-specific doctor preflight.
297
207
 
298
- Frame decoding is handled by `HermesBridgeFrameDecoder` in `src/hermes/bridge-protocol.ts`. The decoder strips control bytes, sanitizes the line, and validates against the event schema before handing frames to the session manager.
208
+ ## Local Models & Hermes
299
209
 
300
- ### Running with Hermes
210
+ Local models are good at generating text. They usually need help seeing the workspace, hearing the handoff trail, and remembering what changed two turns ago. ACE closes that gap by giving any OpenAI-compatible local runtime — Ollama or llama.cpp — the same shared context, tool surfaces, evidence trails, and resumable state that hosted providers get. The direct provider path works out of the box; no extra runtime is required.
301
211
 
302
- ```bash
303
- # User owns Hermes/Python setup. ACE only discovers and launches it when asked.
304
- ACE_HERMES_ROOT=/path/to/hermes-agent \
305
- HERMES_PYTHON=/path/to/python \
306
- ace doctor --llm llama.cpp --base-url http://127.0.0.1:8080/v1 --model <model> --hermes
307
-
308
- ACE_HERMES_ROOT=/path/to/hermes-agent \
309
- HERMES_PYTHON=/path/to/python \
310
- ace tui --provider llama.cpp --base-url http://127.0.0.1:8080/v1 --model <model> --hermes
311
-
312
- # Optional uv-managed Hermes project, still operator supplied.
313
- ACE_HERMES_ROOT=/path/to/hermes-agent \
314
- ACE_HERMES_UV_PROJECT=/path/to/hermes-agent \
315
- ace tui --provider llama.cpp --base-url http://127.0.0.1:8080/v1 --model <model> --hermes
316
- ```
212
+ **Hermes** is an optional layer on top of that. Local providers vary in how they stream tokens, frame tool calls, and handle interrupts. Rather than special-case every quirk in ACE, the operator can point ACE at Hermes — a user-supplied companion execution engine — to handle streaming delivery and robust tool-call framing. ACE does not install Hermes or bundle it; it discovers and launches the operator's own Hermes/Python setup only when `--hermes` (or `--engine hermes_local`) is passed. ACE stays the system of record — state, evidence, verification, scheduler — and exposes only a scoped shadow MCP tool surface to Hermes, so the local model sees just the tools its task scope needs.
317
213
 
318
- Or use the TUI with explicit engine selection:
214
+ Hermes-local is opt-in. The local model provider is still Ollama or llama.cpp; Hermes is only the optional execution bridge around that provider.
319
215
 
320
216
  ```bash
321
- ace tui --provider llama.cpp --base-url http://localhost:8080 --engine hermes_local
322
- # shorthand
323
- ace tui --provider ollama --model llama3.1:8b --hermes
324
- ```
325
-
326
- Note: Hermes-local is opt-in. Without `--hermes` or `--engine hermes_local`, the TUI uses the direct provider path and does not require Python, uv, or Hermes. When Hermes is selected, ACE launches the user-supplied Hermes/Python setup for that session and exposes only the scoped shadow MCP tool surface. Tool evidence, not model prose, determines executable mutation.
217
+ # Direct path (no Python, no Hermes) — just a local model
218
+ ace tui --provider ollama --model qwen3:8b
327
219
 
328
- ### Doctor checks for Hermes
329
-
330
- `ace doctor` surfaces Hermes-local readiness gates only when `--hermes` is passed:
331
-
332
- ```bash
220
+ # Optional Hermes engine, operator-supplied
333
221
  ACE_HERMES_ROOT=/path/to/hermes-agent HERMES_PYTHON=/path/to/python \
334
- ace doctor --llm llama.cpp --model gemma-4 --base-url http://localhost:8080 --hermes
335
- ```
336
-
337
- Checks performed:
338
-
339
- - Hermes bridge worker packaged (`scripts/hermes_bridge_worker.py` present)
340
- - Hermes checkout supplied by the operator (`ACE_HERMES_ROOT` or `--hermes-root`)
341
- - Python supplied by the operator (`HERMES_PYTHON` or `--hermes-python`)
342
- - Optional uv project supplied by the operator (`ACE_HERMES_UV_PROJECT` or `--hermes-uv-project`)
343
- - Shadow MCP command available for scoped tools-only transport
344
- - Local runtime reachable and model available
345
-
346
- ```bash
347
- # Auto-scan common Ollama + llama.cpp endpoints
348
- ace doctor --scan
349
- ```
350
-
351
- ### Evidence model
352
-
353
- ACE persists tool evidence only when the model invokes `write_workspace_file` successfully through the shadow MCP surface. If Hermes returns a complete artifact in its final response but never called the write tool, the live driver materializes the artifact for inspection and records `materialized_from_hermes_final` — diagnostic only, not counted as `tool_write_done`.
354
-
355
- Operator-restricted models (e.g. `deepseek-r1:8b`) are blocked in `local-model-policy.ts` before a session even starts.
356
-
357
- ## MCP Tool Surface
358
-
359
- ACE exposes tools through a domain-modular registration system (`src/tools.ts` delegates to 12 domain modules). Tools can be allow-listed at startup; `ace mcp-shadow` uses this to give Hermes a scoped tools-only subset. Public `ace mcp` still exposes the full tools, prompts, and resources surface.
360
-
361
- ### Agent & Runtime
362
-
363
- | Tool | Purpose |
364
- |---|---|
365
- | `get_agent_instructions` | Read instruction content for any ACE agent role |
366
- | `get_agent_manifest` | Read the manifest for a given agent role |
367
- | `get_all_agents_summary` | List all registered agents with role metadata |
368
- | `get_kernel_artifact` | Read a named kernel artifact from the store |
369
- | `get_runtime_profile` | Read the active runtime profile (provider, model, base URL) |
370
- | `validate_runtime_profile` | Schema-validate the stored runtime profile |
371
- | `get_transition_log` | Read recent agent state-transition history |
372
- | `get_capability_snapshot` | Summarize current capability coverage across agents |
373
- | `get_runtime_tool_specs` | Read the tool-spec registry for the active runtime |
374
- | `validate_runtime_tool_specs` | Schema-validate the tool-spec registry |
375
- | `list_runtime_tool_specs` | List all registered tool specs |
376
- | `execute_runtime_tool` | Execute a named runtime tool by spec |
377
-
378
- ### Orchestration & Planning
379
-
380
- | Tool | Purpose |
381
- |---|---|
382
- | `propose_plan` | Generate a multi-step task plan proposal |
383
- | `validate_plan` | Validate a plan proposal against acceptance contracts |
384
- | `run_local_model` | Dispatch a task to the configured local model runtime |
385
- | `run_orchestrator` | Run an ACE orchestrator session for a given task |
386
- | `route_task` | Route an incoming task to the appropriate agent role |
387
- | `bootstrap_state` | Seed or repair the ACE store for the current workspace |
388
- | `get_framework_status` | Read aggregate framework health and readiness |
389
- | `validate_framework` | Run the full framework validation gate suite |
390
- | `audit_public_surface` | Audit schema-bound tools, resources, and prompts |
391
- | `audit_store_authority` | Verify store authority and projection consistency |
392
- | `execute_gates` | Run named gate conditions (dependency, handoff, time) |
393
-
394
- ### Handoffs
395
-
396
- | Tool | Purpose |
397
- |---|---|
398
- | `create_handoff` | Create a typed, validated handoff record |
399
- | `validate_handoff` | Validate a handoff payload against the schema |
400
- | `get_handoff_template` | Retrieve the handoff template for a given role pair |
401
- | `get_handoff_status` | Read the status of a specific handoff |
402
- | `ack_handoff` | Acknowledge a handoff as received and accepted |
403
-
404
- Example — creating a handoff from orchestrator to qa:
405
-
406
- ```bash
407
- # via any MCP client
408
- create_handoff {
409
- "from_role": "orchestrator",
410
- "to_role": "qa",
411
- "summary": "Auth module implementation complete, ready for test coverage review",
412
- "evidence": ["src/auth.ts", "src/auth.test.ts"],
413
- "priority": "P1"
414
- }
415
- ```
416
-
417
- ### Scheduler
418
-
419
- | Tool | Purpose |
420
- |---|---|
421
- | `enqueue_job` | Add a job to the queue with priority, deps, and resource locks |
422
- | `dispatch_jobs` | Tick the scheduler and dispatch ready jobs |
423
- | `acknowledge_job` | Mark a job as accepted by a worker |
424
- | `complete_job` | Mark a job done or failed |
425
- | `get_job_queue` | Read the current job queue |
426
- | `get_job_lock_table` | Read active resource locks |
427
- | `get_scheduler_lease` | Read the current scheduler lease |
428
-
429
- Example — queuing a blocked job:
430
-
431
- ```bash
432
- enqueue_job {
433
- "kind": "handoff.lifecycle",
434
- "priority": "P1",
435
- "dependencies": [{ "kind": "handoff", "ref": "HNDOFF-abc123", "expected": "ack" }],
436
- "resource_requirements": ["agent-state/handoff-registry.json"],
437
- "run_after": "2026-05-08T18:00:00Z"
438
- }
439
- ```
440
-
441
- ### Files & Structural Editing
442
-
443
- | Tool | Purpose |
444
- |---|---|
445
- | `read_workspace_file` | Read any file in the workspace |
446
- | `write_workspace_file` | Write or overwrite a file (evidence-tracked) |
447
- | `list_workspace` | Directory listing with optional glob filter |
448
- | `safe_edit_file` | Edit a file with collision-safe write semantics |
449
- | `diff_files` | Produce a unified diff between two workspace paths |
450
- | `read_file_lines` | Read a line range from a file |
451
- | `outline_file` | Extract structural outline (symbols, headings) from a file |
452
- | `astgrep_query` | Run an ast-grep query pattern against the workspace index |
453
- | `astgrep_locate` | Locate a specific symbol or construct with ast-grep |
454
- | `compile_structural_edit` | Compile an ast-grep rewrite to a patch |
455
- | `preview_structural_edit` | Preview a structural edit without applying |
456
- | `astgrep_rewrite` | Apply an ast-grep rewrite rule across matched files |
457
- | `apply_patch` | Apply a unified diff patch to the workspace |
458
-
459
- ### Change Intelligence & Drift
460
-
461
- | Tool | Purpose |
462
- |---|---|
463
- | `snapshot_state` | Take a semantic snapshot of the current workspace state |
464
- | `semantic_diff` | Diff two semantic snapshots |
465
- | `drift_report` | Produce a drift report between baseline and current state |
466
- | `list_snapshots` | List available workspace snapshots |
467
- | `rewrite_targets` | Identify files that are candidates for rewrite based on drift |
468
-
469
- ### Discovery & Indexing
470
-
471
- | Tool | Purpose |
472
- |---|---|
473
- | `refresh_astgrep_index` | Rebuild the ast-grep structural index |
474
- | `scan_workspace_delta` | Scan for file changes since the last index pass |
475
- | `web_research_packet` | Package a web research context for agent consumption |
476
- | `mcp_ingestion_probe` | Probe an MCP server and ingest its tool/resource surface |
477
- | `codemunch_snapshot` | Take a full codemunch snapshot of the workspace |
478
- | `codemunch_index` | Index a codemunch snapshot for search |
479
-
480
- ### Git
481
-
482
- | Tool | Purpose |
483
- |---|---|
484
- | `git_status` | Read working-tree status |
485
- | `git_commit` | Stage and commit changes with a message |
486
- | `git_diff` | Diff staged, unstaged, or between refs |
487
- | `git_log` | Read recent commit history |
488
-
489
- ### Memory & Continuity
490
-
491
- | Tool | Purpose |
492
- |---|---|
493
- | `context_snapshot` | Capture a structured context snapshot for the current session |
494
- | `build_continuity_packet` | Build a continuity packet for cross-session handoff |
495
- | `recall_context` | Recall a previous context snapshot by ID or recency |
496
-
497
- Example — before switching models mid-task:
498
-
499
- ```bash
500
- build_continuity_packet {
501
- "session_summary": "Implemented auth module, blocked on integration test setup",
502
- "next_step": "Write integration tests for /api/auth endpoints"
503
- }
504
- ```
505
-
506
- ### Lifecycle & Status Events
507
-
508
- | Tool | Purpose |
509
- |---|---|
510
- | `emit_status_event` | Append a typed lifecycle event to `STATUS_EVENTS.ndjson` |
511
- | `get_framework_status` | Read aggregate status across all modules |
512
- | `refresh_kanban` | Rebuild the kanban board from current state |
513
-
514
- Example:
515
-
516
- ```bash
517
- emit_status_event {
518
- "source_module": "capability-ops",
519
- "event_type": "TASK_COMPLETE",
520
- "status": "pass",
521
- "summary": "Auth integration tests green across all providers"
522
- }
222
+ ace tui --provider llama.cpp --base-url http://127.0.0.1:8080/v1 --model gemma-3-4b-it --hermes
523
223
  ```
524
224
 
525
- ### Todo & Run Ledger
526
-
527
- | Tool | Purpose |
528
- |---|---|
529
- | `get_todo` | Read the current todo surface |
530
- | `get_todo_state` | Read structured todo state from the store |
531
- | `update_todo` | Update one or more todo items |
532
- | `get_run_ledger` | Read the run ledger (history of major tool invocations) |
533
-
534
- ### Vericify (Verification)
535
-
536
- | Tool | Purpose |
537
- |---|---|
538
- | `get_vericify_context` | Get the current verification context packet |
539
- | `get_vericify_delta` | Get the incremental verification delta |
540
- | `get_vericify_bridge` | Read the vericify bridge snapshot |
541
- | `refresh_vericify_bridge` | Refresh the bridge snapshot from test runner output |
542
- | `validate_vericify_bridge` | Schema-validate the bridge snapshot |
543
- | `get_vericify_process_posts` | Read the vericify process post log |
544
- | `append_vericify_process_post` | Append a test result post to the process log |
545
- | `validate_vericify_process_post_log` | Schema-validate the process post log |
546
-
547
- ### Tracker Integration
548
-
549
- | Tool | Purpose |
550
- |---|---|
551
- | `get_tracker_snapshot` | Read the cached tracker snapshot (GitHub Issues, Linear, etc.) |
552
- | `validate_tracker_snapshot` | Schema-validate the tracker snapshot |
553
- | `list_tracker_adapter_kinds` | List available tracker adapters |
554
- | `get_tracker_adapter_health` | Check health of the active tracker adapter |
555
- | `list_tracker_items` | List items from the tracker |
556
- | `create_tracker_comment` | Post a comment to a tracker item |
557
- | `update_tracker_item_state` | Update the state of a tracker item |
558
- | `refresh_tracker_snapshot` | Pull fresh data from the tracker into the snapshot |
559
-
560
- ### Skills & Tasks
561
-
562
- | Tool | Purpose |
563
- |---|---|
564
- | `skill_catalog_summary` | List all available skills with brief descriptions |
565
- | `skill_audit` | Audit skill freshness and coverage |
566
- | `problem_triage` | Triage a problem description against known skills |
567
- | `list_skills` | List skills in the store |
568
- | `get_skill_instructions` | Read full instructions for a named skill |
569
- | `get_task_pack` | Read a named task pack |
570
- | `get_lessons` | Read the lessons log |
571
- | `add_lesson` | Append a lesson to the log |
572
-
573
- ### Workspace Sessions
574
-
575
- | Tool | Purpose |
576
- |---|---|
577
- | `list_workspace_sessions` | List managed workspace sessions |
578
- | `create_workspace_session` | Create a new managed workspace session |
579
- | `remove_workspace_session` | Remove a workspace session |
580
- | `validate_managed_workspace_path` | Validate a workspace path against the session registry |
581
-
582
- ### Unattended Sessions
225
+ Hermes launch configuration can be supplied with `--hermes-root`, `--hermes-python`, and `--hermes-uv-project`, or with the matching environment variables `ACE_HERMES_ROOT`, `HERMES_PYTHON`, and `ACE_HERMES_UV_PROJECT`.
583
226
 
584
- | Tool | Purpose |
585
- |---|---|
586
- | `list_unattended_sessions` | List registered unattended agent sessions |
587
- | `get_unattended_session` | Read details of a specific unattended session |
588
- | `start_unattended_session` | Launch an unattended agent session |
589
- | `stop_unattended_session` | Stop a running unattended session |
590
- | `wait_for_unattended_session` | Block until a session reaches a terminal state |
591
- | `validate_unattended_session_registry` | Schema-validate the session registry |
592
-
593
- ### Framework & Config
594
-
595
- | Tool | Purpose |
596
- |---|---|
597
- | `get_mcp_config` | Read the baked MCP config for a named client |
598
- | `run_tests` | Run the ACE test suite |
599
- | `get_cli_split` | Read the CLI split configuration |
227
+ Tool evidence, not model prose, authorizes completion: a `completed` claim from a mutation-intent run is demoted to `blocked` unless the declared artifacts and evidence actually exist. For the bridge architecture, frame protocol, doctor checks, and evidence model, see the [Hermes reference](docs/hermes.md).
600
228
 
601
229
  ## Compatible Surfaces
602
230
 
@@ -612,110 +240,22 @@ emit_status_event {
612
240
  +-------------------+------------------------------------------------------------------+
613
241
  ```
614
242
 
615
- ## CLI
616
-
617
- ```text
618
- +-----------------------------------------------+---------------------------------------------------+
619
- | Command | Purpose |
620
- +-----------------------------------------------+---------------------------------------------------+
621
- | `ace mcp` / `ace serve` | Start MCP server over stdio |
622
- | `ace mcp-shadow --tools <csv>` | Start filtered shadow MCP server (Hermes use) |
623
- | `ace tui [options]` | Open the terminal operator surface |
624
- | `ace init [options]` | Seed the ACE store and optional host stubs |
625
- | `ace connect [provider] [options]` | Register a live local runtime or hosted provider |
626
- | `ace turnkey [options]` | Project store-backed host surface stubs |
627
- | `ace doctor [options]` | Validate ACE runtime + Hermes readiness |
628
- | `ace cache [options]` | Cache ACE artifacts into ace-state.ace |
629
- | `ace mcp-config [--client <name>|--all]` | Print baked client snippets for optional install |
630
- | `ace preconfig` | Write .mcp-config/ bundle for all clients |
631
- | `ace paths` | Show resolved package and workspace paths |
632
- | `ace help` | Show help |
633
- +-----------------------------------------------+---------------------------------------------------+
634
- ```
635
-
636
- ### CLI examples
637
-
638
- ```bash
639
- # Bootstrap a workspace with a hosted provider
640
- ace init --project "My App" --llm claude --client-config-bundle
641
-
642
- # Bootstrap with local Ollama model and write VS Code MCP config
643
- ace init --project "My App" --llm ollama --model llama3.1:8b \
644
- --base-url http://localhost:11434 --mcp-config
645
-
646
- # Connect to a running llama.cpp server from a Hugging Face model
647
- ace connect llama-server --hf bartowski/gemma-3-4b-it-GGUF \
648
- --base-url http://localhost:8080
649
-
650
- # Run doctor checks with auto-scan of common local endpoints
651
- ace doctor --scan
652
-
653
- # Run doctor checks for a specific provider + model
654
- ace doctor --llm ollama --model llama3.1:8b --base-url http://localhost:11434
655
-
656
- # Run optional Hermes checks with user-supplied Hermes/Python
657
- ACE_HERMES_ROOT=/path/to/hermes-agent HERMES_PYTHON=/path/to/python \
658
- ace doctor --llm llama.cpp --model gemma-4 --base-url http://localhost:8080 --hermes
659
-
660
- # Repair a missing Ollama model found during doctor
661
- ace doctor --llm ollama --model llama3.1:8b --repair-ollama
662
-
663
- # Print VS Code MCP config snippet to stdout
664
- ace mcp-config --client vscode
665
-
666
- # Write config bundles for every supported client at workspace root
667
- ace preconfig
668
-
669
- # Launch TUI with optional Hermes engine against a local llama.cpp server
670
- ACE_HERMES_ROOT=/path/to/hermes-agent HERMES_PYTHON=/path/to/python \
671
- ace tui --provider llama.cpp --base-url http://localhost:8080 --model gemma-4 --hermes
672
-
673
- # Cache all ACE artifacts into ace-state.ace (dry run first)
674
- ace cache --dry-run
675
- ace cache
676
- ```
677
-
678
- ## Development
679
-
680
- ```bash
681
- cd ace-mcp-server
682
- npm install
683
- npm run build
684
- npm test
685
- npm run start
686
- ```
687
-
688
- Run the Hermes live driver against your workspace:
689
-
690
- ```bash
691
- npm run build
692
- # with a local llama.cpp or Ollama runtime running:
693
- ACE_WORKSPACE_ROOT=$PWD \
694
- ACE_LIVE_PROVIDERS=llama.cpp \
695
- ACE_LIVE_LLAMA_CPP_BASE_URL=http://127.0.0.1:8080/v1 \
696
- ACE_LIVE_LLAMA_CPP_MODEL=gemma-4-it \
697
- ACE_LIVE_HERMES_MAX_TURNS=3 \
698
- ACE_LIVE_OUTPUT_ONLY=1 \
699
- node scripts/dev/run_hermes_crispr_live.mjs
700
- ```
701
-
702
- Key source files:
243
+ ## Documentation
703
244
 
704
- | File | Role |
245
+ | Reference | Contents |
705
246
  |---|---|
706
- | `src/index.ts` | Package entry point |
707
- | `src/cli.ts` | CLI command dispatch |
708
- | `src/server.ts` | MCP server setup and stdio transport |
709
- | `src/tools.ts` | Tool registration hub (delegates to domain modules) |
710
- | `src/hermes/session-manager.ts` | `HermesSubprocessExecutor` — Hermes subprocess lifecycle |
711
- | `src/hermes/bridge-protocol.ts` | Frame decoder for the Hermes bridge protocol |
712
- | `src/model-bridge.ts` | Model bridge interface and process orchestration |
713
- | `src/public-surface.ts` | Public surface audit and schema-bound entry map |
714
- | `src/store/ace-packed-store.ts` | ACEPACK binary store read/write |
715
- | `src/local-model-policy.ts` | Operator allow/block policy for local models |
716
- | `scripts/hermes_bridge_worker.py` | Packaged Python worker for the Hermes bridge |
717
-
718
- See [CHANGELOG.md](./CHANGELOG.md) for release history.
247
+ | [CLI Reference](docs/cli-reference.md) | Every `ace` command and worked examples |
248
+ | [MCP Tool Reference](docs/mcp-tool-reference.md) | The full 119-tool surface across 13 domain modules |
249
+ | [ACEPACK State Model](docs/state-model.md) | On-disk binary format, KV region, columnar event log |
250
+ | [Hermes Companion Engine](docs/hermes.md) | Bridge architecture, frame protocol, doctor checks, evidence model |
251
+ | [TUI Operator Guide](docs/tui-operator-guide.md) | Provider setup, navigation, interrupt behavior, and recovery |
252
+ | [Provider Security](docs/provider-security.md) | Hosted/local credentials, endpoint setup, and trust boundaries |
253
+ | [Evaluation Safety](docs/evaluation-safety.md) | Disposable eval roots, fixtures, provenance, and reproducibility |
254
+ | [Troubleshooting](docs/troubleshooting.md) | Symptom-driven diagnostics and recovery commands |
255
+ | [Library API](docs/library-api.md) | Supported programmatic entry points and stability boundaries |
256
+ | [Experience Playbook](docs/experience-playbook.md) | Experimental evidence-gated lessons store |
257
+ | [Development](docs/development.md) | Build, test, live driver, and key source files |
258
+ | [CHANGELOG](./CHANGELOG.md) | Release history |
719
259
 
720
260
  ## References
721
261