@mrciphersmith/keryx 0.2.14 → 0.2.17

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 (3) hide show
  1. package/README.md +70 -42
  2. package/dist/cli.js +3065 -1719
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -93,15 +93,13 @@ it by reading files at random.
93
93
  ### What it looks like on a real repository
94
94
 
95
95
  Real output from a fresh clone of
96
- [express](https://github.com/expressjs/express) — four commands, nothing edited:
96
+ [express](https://github.com/expressjs/express) — three commands after `init`,
97
+ nothing edited:
97
98
 
98
99
  ```console
99
- $ keryx init --yes
100
- ✓ gdgraph ✓ gdctx ✓ gdwiki ✓ gdskills
101
- ✓ health ✓ testing ✓ memory ✓ tasks ✓ security
102
-
103
100
  $ keryx gdgraph build
104
101
  gdgraph build complete: 139 nodes, 153 edges
102
+ summary: .metaproject/data/gdgraph/artifacts/summary.md
105
103
 
106
104
  $ keryx gdgraph query cycles
107
105
  No cycles found.
@@ -127,6 +125,7 @@ affected graph supplies deterministically, in one command.
127
125
 
128
126
  ```text
129
127
  .metaproject/
128
+ ├── metaproject.json # the module manifest
130
129
  ├── index.md # the routing index every agent reads first
131
130
  ├── wiki/ # architecture, domain models, decisions, flows
132
131
  ├── memory/ # lessons, decisions, constraints, known mistakes
@@ -136,7 +135,8 @@ affected graph supplies deterministically, in one command.
136
135
  ├── data/gdgraph/ # graph artifacts, module map, query results
137
136
  ├── data/testing/ # test context, related tests, normalized reports
138
137
  ├── data/health/ # normalized health artifacts and trends
139
- └── flows/ # task flows with frozen acceptance criteria
138
+ ├── flows/ # task flows with frozen acceptance criteria
139
+ └── … # per-module config, hooks, templates, dashboard
140
140
  ```
141
141
 
142
142
  All Markdown and JSON. All diffable. All yours. And readable as a dashboard when
@@ -182,31 +182,40 @@ of guessing — the same `ask` the policy engine raises for a guarded action:
182
182
 
183
183
  What is in it today:
184
184
 
185
- - **Provider-neutral loop.** Anthropic, Ollama, OpenRouter and Grok, plus an
185
+ - **Provider-neutral loop.** Anthropic, Ollama, and any OpenAI-compatible
186
+ gateway — OpenRouter, DeepSeek, Z.AI, Cerebras, Groq, Moonshot, Grok — plus an
186
187
  offline fake provider for deterministic runs. Swapping the model does not
187
188
  change the loop, the tools or the policy.
188
- - **Durable sessions, per project.** Append-only event log on disk, resume across
189
- a process restart, branching, and context compaction that keeps the archive.
190
- `/resume`, `/compact`, `/new` and `keryx sessions list|export`.
189
+ - **Durable sessions, per project.** JSONL transcripts on disk, resume across a
190
+ process restart, and context compaction that keeps the full archive.
191
+ `/resume`, `/compact`, `/new`, and `keryx sessions list|fork|export` — `fork`
192
+ branches a conversation into a new session that keeps its ancestry, without
193
+ editing a transcript by hand.
191
194
  - **A policy engine with three answers, not two.** `allow`, `ask`, `deny` over
192
- paths, commands, tools, network and resources. Filesystem mutation is
193
- path-checked, security-scanned, approval-bound and recorded as evidence.
195
+ seven risk classes — read, write, shell, network, credential, delegate,
196
+ destructive with path and command rules underneath. Shell and destructive
197
+ actions are default-deny and need an explicit approval before they run.
194
198
  - **Kernel-enforced containment underneath.** The OS sandbox sits *below* the
195
199
  policy engine — Seatbelt on macOS, bubblewrap on Linux — with network off/on,
196
200
  and on macOS a loopback domain allowlist, credential masking behind a per-run
197
- sentinel, and opt-in TLS termination. It fails closed when a launcher or a
198
- posture is missing rather than quietly doing less.
201
+ sentinel, and TLS termination where masking requires it. It fails closed when a
202
+ launcher or a posture is missing rather than quietly doing less.
199
203
  - **Child agents with budgets.** Dispatch over the canonical
200
204
  `subagent-dispatch`/`subagent-result` contracts, token budgets per child,
201
- bounded parallel scheduling, and a fleet monitor (`keryx agents monitor`).
202
- - **Completion you can audit.** An evidence ledger backs the completion gate: a
205
+ bounded parallel scheduling, and an offline fleet report over a recorded event
206
+ log (`keryx agents monitor <events-file>`).
207
+ - **Completion you can audit.** The completion gate blocks on missing evidence: a
203
208
  run that cannot produce the evidence its flow requires does not get to claim
204
209
  it finished.
205
- - **Deterministic replay.** Recorded provider and tool fixtures replay a run with
206
- no network and no mutation, and report where the state transitions diverge.
207
- - **Four doors, one loop.** The CLI (`keryx harness run|exec|extension|wave`),
208
- JSONL/RPC, the TUI, and the loopback HTTP entry (`keryx serve`) all drive the
209
- same execution loop and the same session state.
210
+ - **Four doors.** The CLI (`keryx harness run|exec|extension|wave|replay`), JSONL/RPC
211
+ and the loopback HTTP entry (`keryx serve`) share one execution loop; the
212
+ interactive TUI runs its own on the same tool registry and the same policy.
213
+ - **A record you can check.** `keryx harness run --record` writes a run's
214
+ recomputable hash surface and `keryx harness replay` validates a fixture
215
+ against it, naming the diverging field when one moves.
216
+
217
+ The full tour — including what the harness does *not* do yet — is in
218
+ [the harness page](docs/docs/harness.md).
210
219
 
211
220
  Provider-neutral means what it says — the same loop, the same tool registry and
212
221
  the same policy, with the model swapped out from under it:
@@ -226,7 +235,7 @@ Grouped by what you are trying to do, not by internal module layout.
226
235
  **Understand the codebase**
227
236
 
228
237
  - **gdgraph** — language-aware dependency graph for TypeScript/JavaScript, Java
229
- (Maven/Gradle) and Python: cycle and orphan queries, concept and symbol lookup,
238
+ (Maven/Gradle) and Python: cycle and orphan queries, file and symbol search,
230
239
  shortest paths, affected-set blast radius, PageRank repo map, and an optional
231
240
  tree-sitter symbol/call graph.
232
241
  - **gdwiki** — a Markdown architecture wiki with hierarchical indexes, link
@@ -237,7 +246,7 @@ Grouped by what you are trying to do, not by internal module layout.
237
246
  **Preserve knowledge**
238
247
 
239
248
  - **memory** — long-term project memory with indexing, lexical search, dedup and
240
- bitemporal validity, so a lesson learned once stays learned.
249
+ as-of validity queries, so a lesson learned once stays learned.
241
250
  - **gdskills** — bundled and project-generated agent skills with routing,
242
251
  verification, learning from reviews, and export to different agent runtimes.
243
252
 
@@ -246,9 +255,11 @@ Grouped by what you are trying to do, not by internal module layout.
246
255
  - **testing** — testing context, related-test selection, changed-scope runs, and
247
256
  an opt-in coverage-map Test Impact Analysis.
248
257
  - **health** — normalized reports from TypeScript, tests, audit, complexity,
249
- coverage and lint (optional SonarQube), plus a quality gate and trends.
250
- - **review** — managed review packages under `.metaproject/reviews/`, standalone
251
- or attached to a flow, so review findings become durable project artifacts.
258
+ coverage and lint (optional SonarQube issue import), plus a quality gate and
259
+ trends.
260
+ - **review** managed review packages, standalone under `.metaproject/reviews/`
261
+ or inside the flow package when attached to a flow, so review findings become
262
+ durable project artifacts.
252
263
 
253
264
  **Operate agents**
254
265
 
@@ -258,13 +269,13 @@ Grouped by what you are trying to do, not by internal module layout.
258
269
  scanning, redaction, and a policy gate at agent write seams, with a committed
259
270
  evaluation corpus.
260
271
  - **mcp** — an opt-in [Model Context Protocol](https://modelcontextprotocol.io)
261
- server exposing read-only module services to agents.
272
+ server exposing read-only module services to agents, plus one report-writing
273
+ security scan.
262
274
 
263
275
  **Run agents inside boundaries**
264
276
 
265
277
  - **harness** — the first-party agent runtime described above: provider-neutral
266
- loop, durable sessions, policy engine, child agents, evidence-gated completion,
267
- deterministic replay.
278
+ loop, durable sessions, policy engine, child agents, evidence-gated completion.
268
279
  - **sandbox** — kernel-enforced containment under the policy engine
269
280
  (`keryx harness exec`), with filesystem boundaries, network posture and, on
270
281
  macOS, a domain allowlist with credential masking.
@@ -301,9 +312,16 @@ Alternative install paths — the managed installer (`~/.keryx` with a wrapper i
301
312
  `~/.local/bin`), project-local installs, and running from source — are in the
302
313
  [onboarding guide](docs/docs/onboarding.md).
303
314
 
304
- Bare `keryx` prints the CLI surface; `keryx shell` starts the agent harness
315
+ Bare `keryx` prints the main commands; `keryx shell` starts the agent harness
305
316
  described [above](#the-agent-harness).
306
317
 
318
+ Agent mode protects each user turn with nested unique-signature budgets: `48`
319
+ total, including at most `40` risk-`read` signatures and `8` non-read (or
320
+ unknown-risk) signatures. An identical `tool + normalized input` may retry up
321
+ to three times while occupying one unique slot. Reaching a limit exactly still
322
+ gives the model a normal round to answer; only a new signature beyond a pool or
323
+ a no-progress repeat loop forces the final tool-free wrap-up.
324
+
307
325
  ## Agent integrations
308
326
 
309
327
  | Runtime | Integration |
@@ -317,24 +335,32 @@ After `init`, agents follow the root `AGENTS.md`/`CLAUDE.md` pointer to
317
335
  `.metaproject/index.md`, which routes them to the right capability. Two commands
318
336
  sharpen that routing:
319
337
 
338
+ `keryx orient` emits a bounded excerpt of the launch project's own
339
+ `.metaproject/index.md`, followed by the graph map and wiki index. The excerpt
340
+ directs the agent to read the full project-root entrypoint; it does not discover
341
+ or substitute an ancestor Metaproject.
342
+
320
343
  ```bash
321
344
  keryx orient install-hook --runtime codex # graph + wiki map at turn start
322
345
  keryx agents bootstrap install --runtime claude
323
346
  keryx mcp install --runtime cursor # opt-in read-only MCP server
324
347
  ```
325
348
 
349
+ Each of those commands has its own `--runtime` vocabulary — run
350
+ `keryx <command> --help` for the values it accepts.
351
+
326
352
  ## Requirements and compatibility
327
353
 
328
354
  | Requirement | Status |
329
355
  |-------------|--------|
330
356
  | Bun | >= 1.1.0 |
331
- | Git | Required |
357
+ | Git | Required for hooks, `--changed` scopes and the managed installer; the core runs without it |
332
358
  | ripgrep | Required only for `keryx ctx rg` and the agent's `search_code` tool |
333
359
  | Model provider credential | Required only for the optional AI commands below |
334
360
  | macOS | Full support, including the complete policy sandbox |
335
361
  | Linux | Full core support; filesystem containment and network on/off (needs `bubblewrap`) |
336
362
  | Windows | Core CLI is not verified in CI; the OS sandbox is macOS/Linux only |
337
- | CI | Ubuntu and macOS runners on every push |
363
+ | CI | Ubuntu and macOS runners on every pull request and every push to `main` |
338
364
 
339
365
  ## Optional AI features
340
366
 
@@ -365,7 +391,7 @@ graph falls back to its deterministic resolver when a grammar is absent.
365
391
  | Domain allowlist is macOS-only | Domain-level egress policy, credential masking and TLS termination refuse to run on Linux rather than silently doing less | Filesystem containment and network on/off work on both |
366
392
  | No bundled embedding runtime | No semantic ranking in memory search | Lexical memory search remains fully available |
367
393
  | ripgrep is external | `keryx ctx rg` needs `rg` on `PATH` | Install ripgrep, or let the agent read files directly |
368
- | Model commands need a credential | The five commands above exit non-zero without one | Everything else runs deterministically offline |
394
+ | Model commands need a credential | Four of the five commands above exit non-zero without one; `wiki enrich` exits `0` and marks the affected pages skipped | Everything else runs deterministically offline |
369
395
 
370
396
  Full detail, including known defects and platform caveats:
371
397
  [limitations](docs/docs/limitations.md).
@@ -383,11 +409,12 @@ keryx serve # bind 127.0.0.1 and listen
383
409
  keryx serve status --json # configuration state
384
410
  ```
385
411
 
386
- It is off unless you configure it, binds loopback unless you pass
387
- `--acknowledge-non-loopback`, and authenticates *before* routing, so an
388
- unauthenticated caller cannot tell a known path from an unknown one. The remote
389
- policy profile may never be weaker than the local one it is compared on every
390
- turn and a weaker profile is refused. See
412
+ It is off unless you configure it, and moving it off loopback takes a `--bind`
413
+ address plus an explicit acknowledgement in *both* the stored config and the
414
+ command line either one alone refuses to start. It authenticates *before*
415
+ routing, so an unauthenticated caller cannot tell a known path from an unknown
416
+ one. The remote policy profile may never be weaker than the local one — it is
417
+ compared at startup, and a weaker profile refuses to bind at all. See
391
418
  [drive keryx remotely](docs/docs/guides/drive-keryx-remotely.md) for routes and
392
419
  setup.
393
420
 
@@ -405,7 +432,9 @@ keryx dashboard build
405
432
 
406
433
  `keryx health gate --strict-warn` fails a job on the normalized health gate
407
434
  instead of parsing raw linter/test logs, and `keryx security eval --corpus all`
408
- fails on any detector breaching its committed false-negative threshold. See
435
+ fails on any detector breaching its committed false-negative threshold — from a
436
+ repository checkout, since the evaluation corpus is not shipped in the npm
437
+ package. See
409
438
  [run keryx in CI](docs/docs/guides/run-in-ci.md).
410
439
 
411
440
  ## Documentation
@@ -415,13 +444,12 @@ Full documentation site: **<https://mrciphersmith.github.io/keryx/>**
415
444
  - **[Onboarding](docs/docs/onboarding.md)** — install paths, first-run walkthrough, the build loop.
416
445
  - **[Architecture](docs/docs/architecture.md)** — the four-layer pattern, invariants, cross-module data flows.
417
446
  - **[Module reference](docs/docs/modules.md)** — one section per module: purpose, CLI surface, mechanics, data paths.
418
- - **[CLI reference](docs/docs/cli-reference.md)** — every command, subcommand, flag and exit code.
447
+ - **[CLI reference](docs/docs/cli-reference.md)** — the command surface: subcommands, flags and exit codes.
419
448
  - **[Workspace & lifecycle](docs/docs/workspace-and-lifecycle.md)** — the `.metaproject/` contract and `init`/`update` lifecycle.
420
449
  - **[Limitations](docs/docs/limitations.md)** — known gaps, platform caveats, and what to do instead.
421
450
  - **[Changelog](CHANGELOG.md)** — what has landed since `v0.1.0`.
422
451
 
423
- Run `keryx <command> --help` (or `keryx` with no arguments) for the live command
424
- surface.
452
+ Run `keryx <command> --help` for the live flag surface of any command.
425
453
 
426
454
  ## Local development
427
455