@mrciphersmith/keryx 0.2.10 → 0.2.12
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 +299 -229
- package/dist/cli.js +13 -7
- package/package.json +13 -7
package/README.md
CHANGED
|
@@ -6,52 +6,94 @@
|
|
|
6
6
|
|
|
7
7
|
<p align="center"><strong>One project-local brain for your AI agents and your team.</strong></p>
|
|
8
8
|
|
|
9
|
+
<p align="center">
|
|
10
|
+
Version-controlled repository context for Codex, Claude, Cursor,<br>
|
|
11
|
+
and any other AI coding agent.
|
|
12
|
+
</p>
|
|
13
|
+
|
|
9
14
|
<p align="center">
|
|
10
15
|
<a href="https://github.com/MrCipherSmith/keryx/actions/workflows/ci.yml"><img src="https://github.com/MrCipherSmith/keryx/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
16
|
+
<a href="https://www.npmjs.com/package/@mrciphersmith/keryx"><img src="https://img.shields.io/npm/v/@mrciphersmith/keryx.svg" alt="npm"></a>
|
|
11
17
|
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
|
|
12
|
-
<a href="package.json"><img src="https://img.shields.io/badge/version-0.2.0-blue.svg" alt="Version"></a>
|
|
13
18
|
</p>
|
|
14
19
|
|
|
15
|
-
`keryx`
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
20
|
+
`keryx` turns what agents keep rediscovering about your repository into durable
|
|
21
|
+
Markdown and JSON under `.metaproject/`: code relationships, architecture,
|
|
22
|
+
project memory, relevant tests, quality signals, agent skills, and task state.
|
|
23
|
+
Every agent and every teammate reads the same context, and it is reviewed in a
|
|
24
|
+
diff like the rest of the code.
|
|
25
|
+
|
|
26
|
+
The core is deterministic, local, offline, and has no required runtime
|
|
27
|
+
dependencies. keryx does not take your coding agent away and does not make
|
|
28
|
+
engineering decisions for you — it gives every agent the same project context
|
|
29
|
+
instead of letting each one reconstruct the repository from scratch.
|
|
30
|
+
|
|
31
|
+
It also ships **an agent runtime of its own**, built directly on that context:
|
|
32
|
+
durable sessions, an allow/ask/deny policy engine, kernel-enforced sandboxing,
|
|
33
|
+
child agents and evidence-gated completion. Keep using Codex, Claude or Cursor,
|
|
34
|
+
run `keryx shell`, or do both — they all read the same project brain.
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npm install -g @mrciphersmith/keryx
|
|
38
|
+
|
|
39
|
+
cd path/to/your-project
|
|
40
|
+
keryx init --yes
|
|
41
|
+
keryx gdgraph build
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Local-first · deterministic core · offline by default · MIT
|
|
45
|
+
|
|
46
|
+
## Why keryx
|
|
47
|
+
|
|
48
|
+
An agent starts every task by re-deriving what your repository already knows:
|
|
49
|
+
|
|
50
|
+
- which files and symbols are connected;
|
|
51
|
+
- what a change is going to affect;
|
|
52
|
+
- which architectural decision constrains it, and why;
|
|
53
|
+
- which tests verify the behaviour;
|
|
54
|
+
- what broke the last time someone tried this;
|
|
55
|
+
- which project rules apply.
|
|
56
|
+
|
|
43
57
|
That work is repeated per task, per agent, per person — and the answers land in
|
|
44
58
|
scratchpads, CI logs and IDE rule files that never agree with each other.
|
|
45
59
|
|
|
46
|
-
keryx materializes those answers **into the repository
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
60
|
+
keryx materializes those answers **into the repository**. The context is
|
|
61
|
+
versioned with the code, readable in a diff, and shared by humans and agents
|
|
62
|
+
alike, whichever agent runtime happens to be open.
|
|
63
|
+
|
|
64
|
+
## What you get
|
|
65
|
+
|
|
66
|
+
| Need | keryx provides |
|
|
67
|
+
|------|----------------|
|
|
68
|
+
| Understand a change | Dependency and call graph, symbol/concept lookup, affected-set blast radius |
|
|
69
|
+
| Recover project intent | Architecture wiki with grounded retrieval and code↔wiki backlinks |
|
|
70
|
+
| Avoid repeating an investigation | Long-term project memory: lessons, decisions, constraints, known mistakes |
|
|
71
|
+
| Choose what to verify | Related tests for a file, changed-scope runs, coverage-map test impact analysis |
|
|
72
|
+
| Judge readiness | Normalized health reports and a quality gate over lint, types, tests, coverage, complexity |
|
|
73
|
+
| Coordinate work | Versioned task flows, managed review packages, generated agent skills |
|
|
74
|
+
| Keep agents inside boundaries | Deterministic secret / PII / prompt-injection scanning, redaction, policy gate, OS sandbox |
|
|
75
|
+
| Run an agent at all | A first-party harness on top of all of the above: durable sessions, allow/ask/deny policy, child agents, evidence-gated completion |
|
|
76
|
+
|
|
77
|
+
## A typical agent workflow
|
|
50
78
|
|
|
51
|
-
|
|
79
|
+
One task, one repository, no re-exploration:
|
|
52
80
|
|
|
53
|
-
|
|
54
|
-
|
|
81
|
+
```bash
|
|
82
|
+
keryx gdgraph affected src/payments/retry.ts # what a change here touches
|
|
83
|
+
keryx wiki ask "How are payment retries designed?"
|
|
84
|
+
keryx memory search "payment retry" # decisions and past failures
|
|
85
|
+
keryx test related src/payments/retry.ts # the verification scope
|
|
86
|
+
keryx health run --changed # normalized quality result
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
The agent gets structural context, architectural intent, previous decisions, the
|
|
90
|
+
tests that matter, and a normalized health result — without reconstructing any of
|
|
91
|
+
it by reading files at random.
|
|
92
|
+
|
|
93
|
+
### What it looks like on a real repository
|
|
94
|
+
|
|
95
|
+
Real output from a fresh clone of
|
|
96
|
+
[express](https://github.com/expressjs/express) — four commands, nothing edited:
|
|
55
97
|
|
|
56
98
|
```console
|
|
57
99
|
$ keryx init --yes
|
|
@@ -78,208 +120,244 @@ $ keryx gdgraph affected lib/express.js
|
|
|
78
120
|
- index.js
|
|
79
121
|
```
|
|
80
122
|
|
|
81
|
-
That last answer — *what breaks if I change this* — is the
|
|
82
|
-
|
|
83
|
-
that matter most.
|
|
84
|
-
|
|
85
|
-
### Is this for you?
|
|
86
|
-
|
|
87
|
-
**Probably not, if:**
|
|
88
|
-
|
|
89
|
-
- **you want a hosted service.** There is no server, no account, no dashboard in
|
|
90
|
-
the cloud. If nothing runs on your machine, nothing runs.
|
|
91
|
-
- **you are on Linux and need the network allowlist.** The domain allowlist,
|
|
92
|
-
credential masking and TLS termination are macOS-only and **refuse** to run on
|
|
93
|
-
Linux rather than quietly doing less. Filesystem containment and network
|
|
94
|
-
on/off work on both.
|
|
95
|
-
- **you need remote approvals today.** `keryx serve` exists, but a turn whose
|
|
96
|
-
policy decision is `ask` terminates in a recorded denial. Approvals are not
|
|
97
|
-
implemented yet.
|
|
98
|
-
- **you want it to think for you.** keryx does deterministic mechanics — scan,
|
|
99
|
-
graph, score, checksum. The judgement stays with the agent and with you.
|
|
100
|
-
|
|
101
|
-
**Probably yes, if** you run agents against a repository you care about, more
|
|
102
|
-
than once, and you have noticed them rediscovering the same things.
|
|
103
|
-
|
|
104
|
-
## Quick Start
|
|
105
|
-
|
|
106
|
-
**Requirements:** `git` and `bun` (>= 1.1.0). Code search (`keryx ctx rg` and the
|
|
107
|
-
agent's `search_code` tool) additionally requires [ripgrep](https://github.com/BurntSushi/ripgrep)
|
|
108
|
-
(`rg`) on `PATH` — install it with `brew install ripgrep` (macOS) or `apt install ripgrep`
|
|
109
|
-
(Debian/Ubuntu). Without it, code search is unavailable and the harness falls back to
|
|
110
|
-
reading files directly.
|
|
111
|
-
|
|
112
|
-
### Install / update (global)
|
|
113
|
-
|
|
114
|
-
```bash
|
|
115
|
-
npm install -g @mrciphersmith/keryx
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
> **The package is scoped, and the scope matters.** The unscoped name `keryx` on
|
|
119
|
-
> npm belongs to [an unrelated project](https://github.com/actionhero/keryx) —
|
|
120
|
-
> `npm install -g keryx` installs a different program. The executable this
|
|
121
|
-
> package installs is still called `keryx`.
|
|
123
|
+
That last answer — *what breaks if I change this* — is exactly the context the
|
|
124
|
+
affected graph supplies deterministically, in one command.
|
|
122
125
|
|
|
123
|
-
|
|
124
|
-
`~/.local/bin/keryx`. Re-run either command to upgrade.
|
|
125
|
-
|
|
126
|
-
```bash
|
|
127
|
-
# curl (short)
|
|
128
|
-
curl -fsSL https://raw.githubusercontent.com/MrCipherSmith/keryx/main/install | bash
|
|
126
|
+
### What lands in your repository
|
|
129
127
|
|
|
130
|
-
|
|
131
|
-
|
|
128
|
+
```text
|
|
129
|
+
.metaproject/
|
|
130
|
+
├── index.md # the routing index every agent reads first
|
|
131
|
+
├── wiki/ # architecture, domain models, decisions, flows
|
|
132
|
+
├── memory/ # lessons, decisions, constraints, known mistakes
|
|
133
|
+
├── skills/ # bundled agent skills and routing
|
|
134
|
+
├── project-skills/ # skills generated from your own modules
|
|
135
|
+
├── rules/ # your AGENTS.md / CLAUDE.md as project rules
|
|
136
|
+
├── data/gdgraph/ # graph artifacts, module map, query results
|
|
137
|
+
├── data/testing/ # test context, related tests, normalized reports
|
|
138
|
+
├── data/health/ # normalized health artifacts and trends
|
|
139
|
+
└── flows/ # task flows with frozen acceptance criteria
|
|
132
140
|
```
|
|
133
141
|
|
|
134
|
-
|
|
142
|
+
All Markdown and JSON. All diffable. All yours. And readable as a dashboard when
|
|
143
|
+
a human wants to look at it (`keryx dash`):
|
|
135
144
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
145
|
+
<p align="center">
|
|
146
|
+
<img src="docs/assets/dashboard.png" alt="The keryx dashboard: health score, attention signals, and the enabled modules" width="880">
|
|
147
|
+
</p>
|
|
139
148
|
|
|
140
|
-
|
|
149
|
+
## The agent harness
|
|
141
150
|
|
|
142
|
-
|
|
143
|
-
export PATH="$HOME/.local/bin:$PATH"
|
|
144
|
-
```
|
|
151
|
+
This is the half that makes the other half worth having.
|
|
145
152
|
|
|
146
|
-
|
|
153
|
+
> **The agent is ephemeral; the project brain is durable.**
|
|
147
154
|
|
|
148
|
-
|
|
149
|
-
|
|
155
|
+
keryx ships its own agent runtime — not a wrapper around someone else's. It owns
|
|
156
|
+
the execution loop, the tool registry, permissions, sessions, subagents and
|
|
157
|
+
completion gates, and it assembles its context from the same `.metaproject/`
|
|
158
|
+
graph, wiki, memory, rules, skills, testing, health and security that every other
|
|
159
|
+
agent reads. That combination is the point: an agent that starts a turn already
|
|
160
|
+
knowing the repository, and that cannot end one by asserting it is done.
|
|
150
161
|
|
|
151
162
|
```bash
|
|
152
|
-
keryx
|
|
153
|
-
keryx shell
|
|
163
|
+
keryx shell # TUI + agent (default UI)
|
|
164
|
+
keryx shell --no-tui # classic readline shell
|
|
165
|
+
keryx shell --chat # chat without tools
|
|
166
|
+
keryx shell --provider ollama --model llama3.1:latest
|
|
154
167
|
```
|
|
155
168
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|------|--------|
|
|
160
|
-
| *(default)* | TUI + agent |
|
|
161
|
-
| `--no-tui` | classic readline shell |
|
|
162
|
-
| `--chat` | chat without tools (readline) |
|
|
163
|
-
| `--agent` | agent mode explicitly |
|
|
164
|
-
| `--provider <p> --model <m>` | skip the provider/model picker |
|
|
165
|
-
| `--base-url <url>` | custom provider endpoint |
|
|
169
|
+
<p align="center">
|
|
170
|
+
<img src="docs/assets/shell.png" alt="keryx shell: the TUI agent harness with session commands and a project sidebar" width="880">
|
|
171
|
+
</p>
|
|
166
172
|
|
|
167
|
-
|
|
173
|
+
What is in it today:
|
|
174
|
+
|
|
175
|
+
- **Provider-neutral loop.** Anthropic, Ollama, OpenRouter and Grok, plus an
|
|
176
|
+
offline fake provider for deterministic runs. Swapping the model does not
|
|
177
|
+
change the loop, the tools or the policy.
|
|
178
|
+
- **Durable sessions, per project.** Append-only event log on disk, resume across
|
|
179
|
+
a process restart, branching, and context compaction that keeps the archive.
|
|
180
|
+
`/resume`, `/compact`, `/new` — and `keryx sessions list|export`.
|
|
181
|
+
- **A policy engine with three answers, not two.** `allow`, `ask`, `deny` over
|
|
182
|
+
paths, commands, tools, network and resources. Filesystem mutation is
|
|
183
|
+
path-checked, security-scanned, approval-bound and recorded as evidence.
|
|
184
|
+
- **Kernel-enforced containment underneath.** The OS sandbox sits *below* the
|
|
185
|
+
policy engine — Seatbelt on macOS, bubblewrap on Linux — with network off/on,
|
|
186
|
+
and on macOS a loopback domain allowlist, credential masking behind a per-run
|
|
187
|
+
sentinel, and opt-in TLS termination. It fails closed when a launcher or a
|
|
188
|
+
posture is missing rather than quietly doing less.
|
|
189
|
+
- **Child agents with budgets.** Dispatch over the canonical
|
|
190
|
+
`subagent-dispatch`/`subagent-result` contracts, token budgets per child,
|
|
191
|
+
bounded parallel scheduling, and a fleet monitor (`keryx agents monitor`).
|
|
192
|
+
- **Completion you can audit.** An evidence ledger backs the completion gate: a
|
|
193
|
+
run that cannot produce the evidence its flow requires does not get to claim
|
|
194
|
+
it finished.
|
|
195
|
+
- **Deterministic replay.** Recorded provider and tool fixtures replay a run with
|
|
196
|
+
no network and no mutation, and report where the state transitions diverge.
|
|
197
|
+
- **Four doors, one loop.** The CLI (`keryx harness run|exec|extension|wave`),
|
|
198
|
+
JSONL/RPC, the TUI, and the loopback HTTP entry (`keryx serve`) all drive the
|
|
199
|
+
same execution loop and the same session state.
|
|
200
|
+
|
|
201
|
+
You do not have to use it. Every module above works with Codex, Claude Code or
|
|
202
|
+
Cursor driving them instead. But if you want an agent that is native to the
|
|
203
|
+
project rather than a guest in it, it is here and it is the same install.
|
|
204
|
+
|
|
205
|
+
## Core capabilities
|
|
206
|
+
|
|
207
|
+
Grouped by what you are trying to do, not by internal module layout.
|
|
208
|
+
|
|
209
|
+
**Understand the codebase**
|
|
210
|
+
|
|
211
|
+
- **gdgraph** — language-aware dependency graph for TypeScript/JavaScript, Java
|
|
212
|
+
(Maven/Gradle) and Python: cycle and orphan queries, concept and symbol lookup,
|
|
213
|
+
shortest paths, affected-set blast radius, PageRank repo map, and an optional
|
|
214
|
+
tree-sitter symbol/call graph.
|
|
215
|
+
- **gdwiki** — a Markdown architecture wiki with hierarchical indexes, link
|
|
216
|
+
checks, code↔wiki backlinks, and grounded `wiki ask` retrieval.
|
|
217
|
+
- **gdctx** — compact command, search and file-read output, so agents keep raw
|
|
218
|
+
logs out of their context window while the full output stays on disk.
|
|
219
|
+
|
|
220
|
+
**Preserve knowledge**
|
|
221
|
+
|
|
222
|
+
- **memory** — long-term project memory with indexing, lexical search, dedup and
|
|
223
|
+
bitemporal validity, so a lesson learned once stays learned.
|
|
224
|
+
- **gdskills** — bundled and project-generated agent skills with routing,
|
|
225
|
+
verification, learning from reviews, and export to different agent runtimes.
|
|
226
|
+
|
|
227
|
+
**Change with confidence**
|
|
228
|
+
|
|
229
|
+
- **testing** — testing context, related-test selection, changed-scope runs, and
|
|
230
|
+
an opt-in coverage-map Test Impact Analysis.
|
|
231
|
+
- **health** — normalized reports from TypeScript, tests, audit, complexity,
|
|
232
|
+
coverage and lint (optional SonarQube), plus a quality gate and trends.
|
|
233
|
+
- **review** — managed review packages under `.metaproject/reviews/`, standalone
|
|
234
|
+
or attached to a flow, so review findings become durable project artifacts.
|
|
235
|
+
|
|
236
|
+
**Operate agents**
|
|
237
|
+
|
|
238
|
+
- **tasks** — an agent-first Task Manager driven by `keryx flow`, with frozen
|
|
239
|
+
acceptance criteria and status gates.
|
|
240
|
+
- **security** — deterministic secrets / PII / prompt-injection / egress
|
|
241
|
+
scanning, redaction, and a policy gate at agent write seams, with a committed
|
|
242
|
+
evaluation corpus.
|
|
243
|
+
- **mcp** — an opt-in [Model Context Protocol](https://modelcontextprotocol.io)
|
|
244
|
+
server exposing read-only module services to agents.
|
|
245
|
+
|
|
246
|
+
**Run agents inside boundaries**
|
|
247
|
+
|
|
248
|
+
- **harness** — the first-party agent runtime described above: provider-neutral
|
|
249
|
+
loop, durable sessions, policy engine, child agents, evidence-gated completion,
|
|
250
|
+
deterministic replay.
|
|
251
|
+
- **sandbox** — kernel-enforced containment under the policy engine
|
|
252
|
+
(`keryx harness exec`), with filesystem boundaries, network posture and, on
|
|
253
|
+
macOS, a domain allowlist with credential masking.
|
|
254
|
+
- **remote entry** — `keryx serve`, a loopback-bound authenticated HTTP door into
|
|
255
|
+
the same harness, so a bot or a browser workspace can drive a run.
|
|
256
|
+
|
|
257
|
+
`keryx modules` toggles modules by manifest key; `keryx status` shows what is
|
|
258
|
+
enabled. Nine modules are on after `init`; `mcp` is opt-in.
|
|
259
|
+
|
|
260
|
+
## Quick start
|
|
261
|
+
|
|
262
|
+
**Requirements:** `git` and `bun` (>= 1.1.0).
|
|
168
263
|
|
|
169
264
|
```bash
|
|
170
|
-
|
|
171
|
-
keryx shell --no-tui
|
|
172
|
-
keryx shell --chat
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
### First project setup
|
|
265
|
+
npm install -g @mrciphersmith/keryx
|
|
176
266
|
|
|
177
|
-
```bash
|
|
178
267
|
cd path/to/your-project
|
|
179
268
|
keryx init
|
|
180
|
-
|
|
181
269
|
keryx gdgraph build # code dependency graph
|
|
182
270
|
keryx test analyze # testing context report
|
|
183
271
|
keryx health run --changed # normalized health report
|
|
184
|
-
|
|
185
272
|
keryx dash # human admin dashboard
|
|
186
273
|
```
|
|
187
274
|
|
|
188
|
-
`keryx init` creates
|
|
275
|
+
`keryx init` creates the `.metaproject/` workspace and connects your existing
|
|
189
276
|
`AGENTS.md` / `CLAUDE.md` entrypoints to it, so agents are routed to the right
|
|
190
|
-
module automatically.
|
|
191
|
-
[onboarding guide](docs/docs/onboarding.md) for the full first-run walkthrough
|
|
192
|
-
and alternative install paths (managed curl installer, or project-local).
|
|
193
|
-
|
|
194
|
-
## Core Ideas
|
|
195
|
-
|
|
196
|
-
A few pieces of jargon, defined once:
|
|
197
|
-
|
|
198
|
-
- **gdgraph** — a *code graph*: language-aware dependency and import graph of your
|
|
199
|
-
repo (TypeScript/JavaScript, Java via Maven/Gradle, and Python), with
|
|
200
|
-
cycle/orphan queries, concept and symbol lookup, call-aware impact analysis,
|
|
201
|
-
shortest paths, and a PageRank-ranked repo map.
|
|
202
|
-
- **gdctx** — *compact context output*: runs commands, searches, and file reads
|
|
203
|
-
and stores condensed results so agents don't flood their context with raw logs.
|
|
204
|
-
- **gdwiki** — an *architecture wiki*: a Markdown knowledge base of domain
|
|
205
|
-
models, decisions, and flows, with grounded `wiki ask` retrieval, hierarchical
|
|
206
|
-
indexes, and backlinks between wiki pages and code.
|
|
207
|
-
- **gdskills** — *agent skills*: bundled and project-generated skills that route
|
|
208
|
-
agents to the right workflow, plus verification and export to different runtimes.
|
|
209
|
-
|
|
210
|
-
## Modules
|
|
211
|
-
|
|
212
|
-
`keryx` itself is the toolkit core (`init`, `status`, `update`, `dashboard`,
|
|
213
|
-
`rules`, `standard`, `agents`) and manages the `.metaproject/` structure. It
|
|
214
|
-
ships these modules:
|
|
215
|
-
|
|
216
|
-
- **gdgraph** — code dependency graph with language-aware import resolution (TypeScript/JavaScript, Java Maven/Gradle, Python); concept search, file/symbol paths, affected-set blast radius, PageRank repo map, and an optional tree-sitter symbol/call graph.
|
|
217
|
-
- **gdctx** — compact command / search / read output plus opt-in routing guards for supported agent runtimes.
|
|
218
|
-
- **gdwiki** — Markdown project wiki with hierarchical indexes, backlinks, link checks, collection, and grounded retrieval.
|
|
219
|
-
- **gdskills** — bundled and generated agent skills with routing, verification, learning, and export.
|
|
220
|
-
- **health** — normalized code-health reports from TypeScript, tests, audit, complexity, coverage, and lint (optional SonarQube).
|
|
221
|
-
- **testing** — testing context, related-test selection, changed-scope runs, and an opt-in coverage-map Test Impact Analysis.
|
|
222
|
-
- **memory** — long-term Markdown project memory with indexing, lexical search, dedup and bitemporal validity. The embedding seam exists but ships with no runtime — see the note above.
|
|
223
|
-
- **tasks** — an agent-first Task Manager driven by `keryx flow` for issue/task lifecycle tracking.
|
|
224
|
-
- **security** — deterministic secrets / PII / prompt-injection / egress scanning, redaction, and a policy gate at agent write seams.
|
|
225
|
-
- **mcp** — opt-in [Model Context Protocol](https://modelcontextprotocol.io) server exposing read-only module services to agents. A real module, but **off by default** — the nine above are on after `init`, this one is not.
|
|
226
|
-
|
|
227
|
-
`keryx modules` toggles modules by manifest key. Two caveats worth knowing:
|
|
228
|
-
`security` is enabled by default but is **not** in that command's module list, so
|
|
229
|
-
it cannot be toggled there; and toggling any module currently drops an enabled
|
|
230
|
-
`mcp` from the manifest.
|
|
231
|
-
|
|
232
|
-
**`review` and `serve` are commands, not modules.** They have no manifest entry
|
|
233
|
-
and are not toggleable — `keryx review` writes managed review packages under
|
|
234
|
-
`.metaproject/reviews/`, and `keryx serve` is the loopback HTTP entry described
|
|
235
|
-
below. Earlier versions of this README listed them alongside the modules; that
|
|
236
|
-
conflated three different things.
|
|
237
|
-
|
|
238
|
-
Two cross-cutting commands improve agent startup and routing:
|
|
239
|
-
|
|
240
|
-
- `keryx orient` emits or installs a compact graph + wiki orientation block at
|
|
241
|
-
turn start for Claude, Codex, and Cursor.
|
|
242
|
-
- `keryx agents bootstrap` installs the Metaproject discovery rule in supported
|
|
243
|
-
global agent entrypoints.
|
|
244
|
-
|
|
245
|
-
## How Agents Use It
|
|
277
|
+
module automatically.
|
|
246
278
|
|
|
247
|
-
|
|
248
|
-
|
|
279
|
+
> **The package is scoped, and the scope matters.** The unscoped name `keryx` on
|
|
280
|
+
> npm belongs to [an unrelated project](https://github.com/actionhero/keryx).
|
|
281
|
+
> Install `@mrciphersmith/keryx`; the executable it installs is called `keryx`.
|
|
249
282
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
```
|
|
283
|
+
Alternative install paths — the managed installer (`~/.keryx` with a wrapper in
|
|
284
|
+
`~/.local/bin`), project-local installs, and running from source — are in the
|
|
285
|
+
[onboarding guide](docs/docs/onboarding.md).
|
|
254
286
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
only for the modules you've enabled.
|
|
287
|
+
Bare `keryx` prints the CLI surface; `keryx shell` starts the agent harness
|
|
288
|
+
described [above](#the-agent-harness).
|
|
258
289
|
|
|
259
|
-
|
|
290
|
+
## Agent integrations
|
|
260
291
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
292
|
+
| Runtime | Integration |
|
|
293
|
+
|---------|-------------|
|
|
294
|
+
| Claude Code | `CLAUDE.md` routing, orientation hook, security hooks, MCP server |
|
|
295
|
+
| Codex | `AGENTS.md` routing and orientation hook |
|
|
296
|
+
| Cursor | Rules/orientation, security hooks, MCP server |
|
|
297
|
+
| Any other agent | Repository-local Markdown/JSON artifacts under `.metaproject/` |
|
|
264
298
|
|
|
265
|
-
|
|
266
|
-
|
|
299
|
+
After `init`, agents follow the root `AGENTS.md`/`CLAUDE.md` pointer to
|
|
300
|
+
`.metaproject/index.md`, which routes them to the right capability. Two commands
|
|
301
|
+
sharpen that routing:
|
|
267
302
|
|
|
268
303
|
```bash
|
|
269
|
-
keryx
|
|
270
|
-
keryx
|
|
304
|
+
keryx orient install-hook --runtime codex # graph + wiki map at turn start
|
|
305
|
+
keryx agents bootstrap install --runtime claude
|
|
306
|
+
keryx mcp install --runtime cursor # opt-in read-only MCP server
|
|
271
307
|
```
|
|
272
308
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
309
|
+
## Requirements and compatibility
|
|
310
|
+
|
|
311
|
+
| Requirement | Status |
|
|
312
|
+
|-------------|--------|
|
|
313
|
+
| Bun | >= 1.1.0 |
|
|
314
|
+
| Git | Required |
|
|
315
|
+
| ripgrep | Required only for `keryx ctx rg` and the agent's `search_code` tool |
|
|
316
|
+
| Model provider credential | Required only for the optional AI commands below |
|
|
317
|
+
| macOS | Full support, including the complete policy sandbox |
|
|
318
|
+
| Linux | Full core support; filesystem containment and network on/off (needs `bubblewrap`) |
|
|
319
|
+
| Windows | Core CLI is not verified in CI; the OS sandbox is macOS/Linux only |
|
|
320
|
+
| CI | Ubuntu and macOS runners on every push |
|
|
321
|
+
|
|
322
|
+
## Optional AI features
|
|
323
|
+
|
|
324
|
+
The graph, wiki, memory, testing, health, task, review and security workflows are
|
|
325
|
+
deterministic and run with no model provider at all. A small set of commands adds
|
|
326
|
+
model-generated suggestions or narration on top, and those require a configured
|
|
327
|
+
credential:
|
|
328
|
+
|
|
329
|
+
- `keryx test suggest <file>` — a test plan matching your project's frameworks
|
|
330
|
+
- `keryx flow plan <id>` — task breakdown for a flow
|
|
331
|
+
- `keryx memory reflect --narrate` — a narrative summary of project memory
|
|
332
|
+
- `keryx health explain <target> --narrate` — a readable explanation of a health result
|
|
333
|
+
- `keryx wiki enrich` — model-written wiki pages (skips pages without a credential)
|
|
334
|
+
|
|
335
|
+
Semantic embeddings and ML security classifiers are not bundled in the current
|
|
336
|
+
release. Memory search uses lexical retrieval, and security scanning uses
|
|
337
|
+
deterministic rules plus entropy analysis — both fully functional on that floor.
|
|
338
|
+
The seams exist for the model-backed variants when they ship.
|
|
277
339
|
|
|
278
|
-
|
|
340
|
+
Tree-sitter grammars for the symbol/call graph are downloadable and optional; the
|
|
341
|
+
graph falls back to its deterministic resolver when a grammar is absent.
|
|
279
342
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
343
|
+
## Current limitations
|
|
344
|
+
|
|
345
|
+
| Limitation | Impact | Alternative |
|
|
346
|
+
|------------|--------|-------------|
|
|
347
|
+
| No remote approval transport | A remote turn whose policy decision is `ask` ends in a recorded denial | Run approval-requiring turns locally |
|
|
348
|
+
| 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 |
|
|
349
|
+
| No bundled embedding runtime | No semantic ranking in memory search | Lexical memory search remains fully available |
|
|
350
|
+
| ripgrep is external | `keryx ctx rg` needs `rg` on `PATH` | Install ripgrep, or let the agent read files directly |
|
|
351
|
+
| Model commands need a credential | The five commands above exit non-zero without one | Everything else runs deterministically offline |
|
|
352
|
+
|
|
353
|
+
Full detail, including known defects and platform caveats:
|
|
354
|
+
[limitations](docs/docs/limitations.md).
|
|
355
|
+
|
|
356
|
+
## Remote entry (opt-in, off by default)
|
|
357
|
+
|
|
358
|
+
`keryx serve` is a second door into the same agent harness `keryx shell` uses — a
|
|
359
|
+
loopback-bound HTTP listener, so a Telegram bot or a browser workspace can drive
|
|
360
|
+
a run without a second agent runtime or a second owner of session state.
|
|
283
361
|
|
|
284
362
|
```bash
|
|
285
363
|
keryx serve config init # write the listener config
|
|
@@ -288,27 +366,18 @@ keryx serve # bind 127.0.0.1 and listen
|
|
|
288
366
|
keryx serve status --json # configuration state
|
|
289
367
|
```
|
|
290
368
|
|
|
291
|
-
It is
|
|
292
|
-
`--acknowledge-non-loopback`, and authenticates *before* routing
|
|
293
|
-
unauthenticated caller cannot tell a known path from an unknown one.
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
Two boundaries worth knowing before you point anything at it:
|
|
369
|
+
It is off unless you configure it, binds loopback unless you pass
|
|
370
|
+
`--acknowledge-non-loopback`, and authenticates *before* routing, so an
|
|
371
|
+
unauthenticated caller cannot tell a known path from an unknown one. The remote
|
|
372
|
+
policy profile may never be weaker than the local one — it is compared on every
|
|
373
|
+
turn and a weaker profile is refused. See
|
|
374
|
+
[drive keryx remotely](docs/docs/guides/drive-keryx-remotely.md) for routes and
|
|
375
|
+
setup.
|
|
299
376
|
|
|
300
|
-
|
|
301
|
-
compared on every turn, and a weaker profile is refused rather than accepted.
|
|
302
|
-
- **Approvals are not implemented yet.** A turn whose policy decision is `ask`
|
|
303
|
-
terminates in a *recorded denial* — it is never auto-approved.
|
|
377
|
+
## CI integration
|
|
304
378
|
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
## CI Integration
|
|
309
|
-
|
|
310
|
-
`keryx` is designed so CI can publish normalized, committable artifacts that
|
|
311
|
-
humans and agents read later:
|
|
379
|
+
CI can publish normalized, committable artifacts that humans and agents read
|
|
380
|
+
later:
|
|
312
381
|
|
|
313
382
|
```bash
|
|
314
383
|
keryx gdgraph build
|
|
@@ -317,28 +386,27 @@ keryx health run --changed
|
|
|
317
386
|
keryx dashboard build
|
|
318
387
|
```
|
|
319
388
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
389
|
+
`keryx health gate --strict-warn` fails a job on the normalized health gate
|
|
390
|
+
instead of parsing raw linter/test logs, and `keryx security eval --corpus all`
|
|
391
|
+
fails on any detector breaching its committed false-negative threshold. See
|
|
392
|
+
[run keryx in CI](docs/docs/guides/run-in-ci.md).
|
|
323
393
|
|
|
324
394
|
## Documentation
|
|
325
395
|
|
|
326
|
-
Full
|
|
327
|
-
[docs/docs/](docs/docs/):
|
|
396
|
+
Full documentation site: **<https://mrciphersmith.github.io/keryx/>**
|
|
328
397
|
|
|
329
398
|
- **[Onboarding](docs/docs/onboarding.md)** — install paths, first-run walkthrough, the build loop.
|
|
330
399
|
- **[Architecture](docs/docs/architecture.md)** — the four-layer pattern, invariants, cross-module data flows.
|
|
331
400
|
- **[Module reference](docs/docs/modules.md)** — one section per module: purpose, CLI surface, mechanics, data paths.
|
|
332
|
-
- **[CLI reference](docs/docs/cli-reference.md)** — every command, subcommand, and
|
|
401
|
+
- **[CLI reference](docs/docs/cli-reference.md)** — every command, subcommand, flag and exit code.
|
|
333
402
|
- **[Workspace & lifecycle](docs/docs/workspace-and-lifecycle.md)** — the `.metaproject/` contract and `init`/`update` lifecycle.
|
|
334
|
-
|
|
335
|
-
- **[Changelog](CHANGELOG.md)** — what has landed since `v0.1.0
|
|
336
|
-
standing list of known gaps.
|
|
403
|
+
- **[Limitations](docs/docs/limitations.md)** — known gaps, platform caveats, and what to do instead.
|
|
404
|
+
- **[Changelog](CHANGELOG.md)** — what has landed since `v0.1.0`.
|
|
337
405
|
|
|
338
406
|
Run `keryx <command> --help` (or `keryx` with no arguments) for the live command
|
|
339
407
|
surface.
|
|
340
408
|
|
|
341
|
-
## Local
|
|
409
|
+
## Local development
|
|
342
410
|
|
|
343
411
|
```bash
|
|
344
412
|
bun ./src/cli.ts init
|
|
@@ -346,6 +414,8 @@ bun ./src/cli.ts status
|
|
|
346
414
|
bun run check # typecheck + tests
|
|
347
415
|
```
|
|
348
416
|
|
|
417
|
+
Contributions are welcome — see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
418
|
+
|
|
349
419
|
## License
|
|
350
420
|
|
|
351
421
|
MIT. See [LICENSE](LICENSE).
|
package/dist/cli.js
CHANGED
|
@@ -48183,8 +48183,8 @@ Usage:
|
|
|
48183
48183
|
// package.json
|
|
48184
48184
|
var package_default = {
|
|
48185
48185
|
name: "@mrciphersmith/keryx",
|
|
48186
|
-
version: "0.2.
|
|
48187
|
-
description: "
|
|
48186
|
+
version: "0.2.12",
|
|
48187
|
+
description: "Version-controlled project context for AI coding agents: code graph, architecture wiki, project memory, relevant tests, quality signals, and task flows.",
|
|
48188
48188
|
private: false,
|
|
48189
48189
|
publishConfig: {
|
|
48190
48190
|
access: "public"
|
|
@@ -48197,15 +48197,21 @@ var package_default = {
|
|
|
48197
48197
|
},
|
|
48198
48198
|
keywords: [
|
|
48199
48199
|
"ai-agents",
|
|
48200
|
-
"
|
|
48200
|
+
"coding-agents",
|
|
48201
|
+
"agent-harness",
|
|
48202
|
+
"agent-context",
|
|
48203
|
+
"repository-context",
|
|
48201
48204
|
"code-graph",
|
|
48202
48205
|
"project-memory",
|
|
48206
|
+
"test-impact-analysis",
|
|
48203
48207
|
"developer-tools",
|
|
48204
|
-
"
|
|
48205
|
-
"
|
|
48208
|
+
"model-context-protocol",
|
|
48209
|
+
"mcp",
|
|
48210
|
+
"claude-code",
|
|
48211
|
+
"cursor",
|
|
48212
|
+
"codex",
|
|
48206
48213
|
"cli",
|
|
48207
|
-
"
|
|
48208
|
-
"multi-agent"
|
|
48214
|
+
"bun"
|
|
48209
48215
|
],
|
|
48210
48216
|
bin: {
|
|
48211
48217
|
keryx: "./dist/cli.js"
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mrciphersmith/keryx",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.2.12",
|
|
4
|
+
"description": "Version-controlled project context for AI coding agents: code graph, architecture wiki, project memory, relevant tests, quality signals, and task flows.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"publishConfig": {
|
|
7
7
|
"access": "public"
|
|
@@ -14,15 +14,21 @@
|
|
|
14
14
|
},
|
|
15
15
|
"keywords": [
|
|
16
16
|
"ai-agents",
|
|
17
|
-
"
|
|
17
|
+
"coding-agents",
|
|
18
|
+
"agent-harness",
|
|
19
|
+
"agent-context",
|
|
20
|
+
"repository-context",
|
|
18
21
|
"code-graph",
|
|
19
22
|
"project-memory",
|
|
23
|
+
"test-impact-analysis",
|
|
20
24
|
"developer-tools",
|
|
21
|
-
"
|
|
22
|
-
"
|
|
25
|
+
"model-context-protocol",
|
|
26
|
+
"mcp",
|
|
27
|
+
"claude-code",
|
|
28
|
+
"cursor",
|
|
29
|
+
"codex",
|
|
23
30
|
"cli",
|
|
24
|
-
"
|
|
25
|
-
"multi-agent"
|
|
31
|
+
"bun"
|
|
26
32
|
],
|
|
27
33
|
"bin": {
|
|
28
34
|
"keryx": "./dist/cli.js"
|