@voybio/ace-swarm 2.4.1 → 2.4.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.4.1] - 2026-05-08
4
+
5
+ ### Changed
6
+
7
+ - Added the local-model execution-engine seam for Hermes-local remediation while preserving provider identity.
8
+ - Added filtered ACE shadow-server registration support for Hermes-local tool allowlists.
9
+ - Added strict Hermes bridge frame decoding tests for fragmented UTF-8, malformed JSON, and control-byte rejection.
10
+
3
11
  ## [2.4.0] - 2026-05-02
4
12
 
5
13
  ### Changed
package/README.md CHANGED
@@ -6,6 +6,8 @@ Autonomous Coding Entity (ACE) is a local MCP server and CLI for agent-assisted
6
6
 
7
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.
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.
10
+
9
11
  ## ACE Manifesto
10
12
 
11
13
  - Agent work should survive restarts, handoffs, and review.
@@ -25,6 +27,7 @@ ACE provides model providers with the context they cannot infer on their own: ta
25
27
  - `ace doctor --scan` probes common Ollama and llama.cpp endpoints and writes the selected profile back into the store.
26
28
  - `ace tui` is provider-aware for `ollama`, `llama.cpp`, `codex`, `claude`, `gemini`, and `copilot` when credentials or base URLs are configured.
27
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.
28
31
 
29
32
  ## Why This Exists Now
30
33
 
@@ -130,6 +133,18 @@ ace doctor --llm llama.cpp --model local-model --base-url http://localhost:8080
130
133
  ace mcp
131
134
  ```
132
135
 
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
+
133
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.
134
149
 
135
150
  Hosted provider path with Codex:
@@ -158,35 +173,38 @@ That containment matters. ACE is meant to structure the workflow, not contaminat
158
173
 
159
174
  ```text
160
175
  Developer or MCP host
161
- |
162
- +-- Claude Code / Codex / Cursor / VS Code / Antigravity
163
- | |
164
- | `-- calls ace-swarm over MCP
165
- |
166
- +-- agent-state/
167
- | |
168
- | +-- ace-state.ace
169
- | +-- STATUS.md / TASK.md / HANDOFF.json projections
170
- |
171
- +-- ace mcp
172
- | |
173
- | +-- tools, prompts, resources
174
- | +-- typed handoff validation
175
- | +-- scheduler and resource locks
176
- | `-- state-aware workflow tools
177
- |
178
- +-- .agents/ACE/
179
- | |
180
- | +-- ace-hook-context.json
181
- | +-- tasks/todo.md
182
- | `-- host config bundles
183
- |
184
- `-- ace tui
185
- |
186
- +-- chat
187
- +-- agent tabs
188
- +-- telemetry
189
- `-- provider-aware runtime
176
+
177
+ ├── Claude Code / Codex / Cursor / VS Code / Antigravity
178
+
179
+ └── calls ace-swarm over MCP
180
+
181
+ ├── agent-state/
182
+
183
+ ├── ace-state.ace (ACEPACK binary store)
184
+ └── STATUS.md / kanban.html / HANDOFF.json projections
185
+
186
+ ├── ace mcp (full surface, ~70 tools)
187
+
188
+ ├── tools, prompts, resources
189
+ ├── typed handoff validation
190
+ ├── scheduler and resource locks
191
+ └── state-aware workflow tools
192
+
193
+ ├── ace tui
194
+
195
+ ├── chat, agent tabs, telemetry
196
+ └── provider-aware runtime (direct | optional hermes_local)
197
+ │ │
198
+ │ └── [hermes_local] HermesSubprocessExecutor
199
+ │ │ spawns Python worker per turn
200
+ │ ├── ace mcp-shadow --tools <csv> (scoped surface for Hermes)
201
+ │ └── hermes_bridge_worker.py → local model (Ollama / llama.cpp)
202
+
203
+ ├── .agents/ACE/
204
+ │ │
205
+ │ ├── ace-hook-context.json
206
+ │ ├── tasks/todo.md
207
+ │ └── host config bundles
190
208
  ```
191
209
 
192
210
  ## What Ships Today
@@ -195,16 +213,22 @@ Developer or MCP host
195
213
  +----------------------+--------------------------------------------------------------+
196
214
  | Surface | Current scope |
197
215
  +----------------------+--------------------------------------------------------------+
198
- | Runtime roles | swarm and composable runtime roles |
199
- | Skills | packaged skills |
200
- | MCP server | stdio surface for tools, prompts, resources, and workflows |
201
- | Durable state | single `agent-state/ace-state.ace` authority for handoffs, status events, todos, run ledger, job queue, and discovery |
202
- | Projections | hook context, todo surface, and host config bundles |
203
- | Coordination | scheduler queues, dependency gates, leases, and resource locks |
204
- | Change intelligence | delta scan, semantic snapshots, drift reports, rewrite hints |
205
- | Terminal UI | provider-aware TUI with chat, tabs, telemetry, and agent UI |
206
- | Local models | Ollama and llama.cpp bootstrap, doctor checks, and bridges |
207
- | Verification | automated test suite and regression coverage |
216
+ | Runtime roles | ACE-Orchestrator, Coders, QA, Spec, Docs, Research, Ops, |
217
+ | | Security, Memory, Release, Eval, Skeptic, astgrep, Builder |
218
+ | MCP server | ~70 tools across 12 domain modules (stdio transport) |
219
+ | 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 |
208
232
  +----------------------+--------------------------------------------------------------+
209
233
  ```
210
234
 
@@ -219,16 +243,360 @@ ACE is for teams and solo operators who already like their coding host and want
219
243
 
220
244
  In that setup, the host remains the interface. ACE becomes the state contract underneath it.
221
245
 
222
- ## Local Models
246
+ ## Local Models & Hermes Companion Engine
223
247
 
224
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.
225
249
 
226
- - `ace init --llm <provider>` seeds the profile inside `agent-state/ace-state.ace`.
227
- - `ace doctor` verifies that the selected runtime is configured and, when possible, reachable.
228
- - `ace tui` can talk to either local runtime and surface the same workspace state the MCP server sees.
229
- - The ACE model bridge gives local runs tool selection, execution flow, and persisted state instead of a fragile one-shot chat loop.
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 |
297
+
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.
299
+
300
+ ### Running with Hermes
301
+
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
+ ```
317
+
318
+ Or use the TUI with explicit engine selection:
319
+
320
+ ```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.
327
+
328
+ ### Doctor checks for Hermes
329
+
330
+ `ace doctor` surfaces Hermes-local readiness gates only when `--hermes` is passed:
331
+
332
+ ```bash
333
+ 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 |
230
468
 
231
- If you want local agents with memory, evidence, and handoff discipline, this is the point of the package.
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
+ }
523
+ ```
524
+
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
583
+
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 |
232
600
 
233
601
  ## Compatible Surfaces
234
602
 
@@ -247,17 +615,64 @@ If you want local agents with memory, evidence, and handoff discipline, this is
247
615
  ## CLI
248
616
 
249
617
  ```text
250
- +---------------------------------------------+---------------------------------------------------+
251
- | Command | Purpose |
252
- +---------------------------------------------+---------------------------------------------------+
253
- | `ace init [options]` | seed the ACE store and optional host stubs |
254
- | `ace turnkey [options]` | project the store-backed host surface |
255
- | `ace mcp` / `ace serve` | start the MCP server over stdio |
256
- | `ace tui [options]` | open the terminal operator surface |
257
- | `ace doctor [options]` | validate ACE runtime readiness |
258
- | `ace mcp-config [--client <name>|--all]` | print baked client snippets for optional install |
259
- | `ace paths` | show resolved package and workspace paths |
260
- +---------------------------------------------+---------------------------------------------------+
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
261
676
  ```
262
677
 
263
678
  ## Development
@@ -270,6 +685,36 @@ npm test
270
685
  npm run start
271
686
  ```
272
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:
703
+
704
+ | File | Role |
705
+ |---|---|
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
+
273
718
  See [CHANGELOG.md](./CHANGELOG.md) for release history.
274
719
 
275
720
  ## References