skill: agents reach the mind through the huginn CLI, not the eureka-state MCP
Ruling eureka-body:ruling:cli-over-mcp-agent-surface. Exact command forms in campaign-state.md; MCP kept as the fallback for shell-less clients. persona_get and persona_put have no CLI verb: recorded as a known gap. tools/mind.py and tools/recall.py (MCP-bound scripts) are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
7ad1c9f4b0
commit
5a03635431
6 changed files with 44 additions and 32 deletions
|
|
@ -43,11 +43,11 @@ This block is the one definition of rehydration; the other files point here.
|
|||
## Rehydrate
|
||||
|
||||
```
|
||||
Campaign state lives in the instance's mind, through the eureka-state tools
|
||||
(whoami, admit, view, query). Recipes are in references/campaign-state.md.
|
||||
0. If those tools are not in your tool surface, stop and report that. Never
|
||||
Campaign state lives in the instance's mind, through the huginn CLI
|
||||
(huginn whoami, admit, view, query; `huginn --help`). Recipes are in references/campaign-state.md.
|
||||
0. If `huginn` does not run in your shell, stop and report that. Never
|
||||
work from prose or memory instead.
|
||||
1. Call whoami. On Unavailable, retry once; if it still does not answer, stop
|
||||
1. Run `huginn whoami`. On Unavailable, retry once; if it still does not answer, stop
|
||||
and report the error. Self will continue you once the mind answers.
|
||||
2. Run the campaigns recipe. If there is no campaign, or <c> is not among
|
||||
them, stop and report which.
|
||||
|
|
@ -68,7 +68,7 @@ call again, otherwise revise the batch.
|
|||
Self's own checklist; Self admits as `SelfFaculty`.
|
||||
|
||||
```
|
||||
Open: check the eureka-state tools are present, then whoami (the mind's
|
||||
Open: check `huginn` runs, then `huginn whoami` (the mind's
|
||||
instance document, <instance>:instance:self, already exists). Write the target
|
||||
document and commit it on the working branch. Then admit the campaign
|
||||
(slug, title, every repo a cut may touch, working_branch, target_doc = a
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ A campaign keeps its state in two places, and nothing lives in both.
|
|||
|
||||
- **The mind.** Questions, rulings, cut specs, reports, verdicts, findings,
|
||||
follow-ups and resolutions are typed documents in the instance's mind, held by
|
||||
Huginn and reached through the `eureka-state` MCP tools. Status is derived
|
||||
Huginn and reached through the `huginn` CLI. Status is derived
|
||||
from them on every read; nobody writes it.
|
||||
- **The prose.** A target document and a map document, committed in the repo
|
||||
the campaign changes. They keep only what no kind carries: body facts (probes
|
||||
|
|
@ -15,17 +15,20 @@ The shapes below are the leaf's (`epiphany-pipeline`, pinned by Huginn) and the
|
|||
organ's (`huginn-mind`). Where this page and the tools' own schemas disagree,
|
||||
the tools are right and this page is stale.
|
||||
|
||||
## The tools
|
||||
## The CLI
|
||||
|
||||
The instance and the daemon are the server's configuration
|
||||
(`EUREKA_INSTANCE`, `HUGINN_ENDPOINT`), never an argument.
|
||||
The instance and the daemon are the environment (`EUREKA_INSTANCE`,
|
||||
`HUGINN_ENDPOINT`), never an argument. The table names each tool's input and
|
||||
answer; the CLI form is in the first column. `huginn --help` and
|
||||
`huginn schema [kind]` are the source. A client without a shell may use the
|
||||
`eureka-state` MCP, whose tools these are, until a native `huginn` is installed.
|
||||
|
||||
| Tool | Input | Answer |
|
||||
| CLI | Input | Answer |
|
||||
|---|---|---|
|
||||
| `whoami` | `{}` | `{ instance, endpoint, reachable, status }`. `status` is `{ instance, schema_epoch, documents, receipts, index }`, and `index` is `Current`, `Reconciling`, `Behind`, `Failing` or `Refused`. When unreachable, `error` says why. |
|
||||
| `admit` | `{ faculty, agent, session, documents }` | `Committed { receipt_id, committed_at, writes }`, `AlreadyAdmitted { receipt_id }`, `Conflict { identities }` or `Refused(<refusal>)`. One to 64 documents, admitted whole or not at all. |
|
||||
| `view` | `{ id: { kind, id } }` | `{ id, document, admission, status }`, or `null`. |
|
||||
| `query` | `{ selection, semantic? }` | `{ matched, as_of, next, items, edges }`. `items` is `Headers([...])` or `Documents([...])`. |
|
||||
| `huginn whoami` | none | `{ instance, endpoint, reachable, status }`. `status` is `{ instance, schema_epoch, documents, receipts, index }`, and `index` is `Current`, `Reconciling`, `Behind`, `Failing` or `Refused`. When unreachable, `error` says why. |
|
||||
| `huginn admit --faculty F --agent A --session S <file or ->` | a JSON array of 1 to 64 `{kind, value}` documents (file or stdin) | `Committed { receipt_id, committed_at, writes }`, `AlreadyAdmitted { receipt_id }`, `Conflict { identities }` or `Refused(<refusal>)`. One to 64 documents, admitted whole or not at all. |
|
||||
| `huginn view <root:kind:local> [--raw]` | the document id | `{ id, document, admission, status }`, or `null`. |
|
||||
| `huginn query '<selection json>' [--near TEXT --top-k N] [--documents]` (or `@file`, or `-`) | the selection alone; `--near` is `semantic` | `{ matched, as_of, next, items, edges }`. `items` is `Headers([...])` or `Documents([...])`. |
|
||||
|
||||
- `faculty` is one of `SelfFaculty`, `Imagination`, `Hands`, `Soul`,
|
||||
`Life`, `Eyes`, `Operator`. It is attribution, not authority.
|
||||
|
|
@ -51,9 +54,8 @@ The instance and the daemon are the server's configuration
|
|||
|
||||
This is the one rule for every faculty.
|
||||
|
||||
1. **The tools are missing** from the session's tool surface: stop and tell the
|
||||
operator (a subagent tells Self). A server registered after the session
|
||||
started appears only in a new session. Never fall back to prose.
|
||||
1. **`huginn` does not run** in the session's shell: stop and tell the
|
||||
operator (a subagent tells Self). Never fall back to prose.
|
||||
2. **`Unavailable`:** retry the same call once. A cold semantic embed after an
|
||||
idle spell took over 15 s live, which is the client's whole timeout.
|
||||
Retrying `admit` is safe, because an exact replay answers `AlreadyAdmitted`.
|
||||
|
|
@ -192,7 +194,7 @@ or `view` one id, to read the prose fields.
|
|||
## Recipes
|
||||
|
||||
These are the campaign's progress view. `<c>` is the campaign slug. Each recipe is
|
||||
the `query` tool's whole input. Agents run them from the Rehydrate block in
|
||||
the `selection` value of `huginn query`; the CLI takes the object inside the `selection` key, and `--near`/`--top-k` replace `semantic`. Named verbs (`huginn campaigns`, `rulings`, `open`, `findings`, `unreported`, `unjudged`, `cut`, `precedent`) run the common recipes. Agents run them from the Rehydrate block in
|
||||
`briefs.md`, which is the one definition of rehydration.
|
||||
|
||||
**Campaigns:**
|
||||
|
|
@ -358,3 +360,10 @@ invariants, not-in-scope list and canonical implementations are the typed
|
|||
- **Prefer normalizers that parse the format.** Ones that split on text leave
|
||||
false diffs, as the census normalizer did when it split on `, ` and glued the
|
||||
first maker to its kind column.
|
||||
|
||||
## Known CLI gap
|
||||
|
||||
The `eureka-state` MCP also offers `persona_get` and `persona_put`. The `huginn`
|
||||
CLI has no persona verb (`huginn --help` lists none). Persona state stays on the
|
||||
MCP until Huginn grows one; this is a Huginn follow-up, not something to fake
|
||||
with `admit`.
|
||||
|
|
|
|||
Loading…
Reference in a new issue