@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.
- package/README.md +70 -42
- package/dist/cli.js +3065 -1719
- 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) —
|
|
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
|
-
|
|
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,
|
|
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.**
|
|
189
|
-
|
|
190
|
-
`/resume`, `/compact`, `/new
|
|
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
|
-
|
|
193
|
-
|
|
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
|
|
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
|
|
202
|
-
|
|
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
|
-
- **
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
|
250
|
-
|
|
251
|
-
|
|
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
|
|
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 |
|
|
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,
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
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
|
|
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)** —
|
|
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`
|
|
424
|
-
surface.
|
|
452
|
+
Run `keryx <command> --help` for the live flag surface of any command.
|
|
425
453
|
|
|
426
454
|
## Local development
|
|
427
455
|
|