ennodia 0.2.0 → 0.3.0-rc.2
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 +75 -119
- package/docs/evidence/building-ennodia.md +66 -0
- package/docs/evidence/docs-drift.md +73 -0
- package/docs/evidence/index.md +18 -0
- package/docs/evidence/measurement.md +40 -0
- package/docs/evidence/skill-trial.md +68 -0
- package/docs/getting-started.md +48 -25
- package/docs/guides/agent-skills.md +22 -8
- package/docs/guides/budgets-and-limits.md +1 -1
- package/docs/guides/pragmatic-mode.md +85 -0
- package/docs/guides/recipes.md +56 -0
- package/docs/guides/troubleshooting.md +48 -0
- package/docs/guides/understand-results.md +41 -0
- package/docs/index.md +27 -90
- package/docs/install.md +49 -16
- package/docs/reference/controlled-english.md +2 -3
- package/docs/reference/ennodia-io.md +27 -4
- package/docs/reference/mcp-tools.md +61 -8
- package/docs/reference/supported-harnesses.md +40 -1
- package/docs/roadmap.md +25 -0
- package/examples/docs-drift/README.md +8 -0
- package/examples/docs-drift/archive/migration.md +4 -0
- package/examples/docs-drift/check.ts +7 -0
- package/examples/docs-drift/config.ts +8 -0
- package/examples/docs-drift/demo.ts +54 -0
- package/examples/docs-drift/recorded-run.json +16 -0
- package/examples/skill-trial/README.md +8 -0
- package/examples/skill-trial/check.ts +15 -0
- package/examples/skill-trial/contract.md +7 -0
- package/examples/skill-trial/recorded-trial.json +42 -0
- package/examples/skill-trial/retry.ts +4 -0
- package/package.json +5 -2
- package/skills/pragmatic/SKILL.md +23 -0
- package/src/advisor.ts +4 -0
- package/src/budget.ts +12 -8
- package/src/cli.ts +3 -0
- package/src/compare.ts +13 -12
- package/src/compositional.ts +10 -4
- package/src/core.ts +53 -47
- package/src/diagnosis.ts +17 -3
- package/src/harnesses.ts +88 -29
- package/src/history.ts +4 -1
- package/src/index.ts +1 -0
- package/src/plan-advice.ts +5 -2
- package/src/planner.ts +24 -1
- package/src/pragmatic.ts +59 -0
- package/src/process.ts +18 -0
- package/src/runs.ts +19 -1
- package/src/server.ts +17 -13
- package/src/tasks.ts +106 -18
- package/src/version.ts +1 -1
|
@@ -3,14 +3,15 @@ title: Agent Skills
|
|
|
3
3
|
description: Install bundled Ennodia skills in native harness locations and tell child agents to use them during a run.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
A new Agent Skill can help a task, add irrelevant advice, or make no difference.
|
|
7
|
+
Try the skill in a separate Ennodia task and bring useful findings back to your main conversation.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
A skill is a folder containing `SKILL.md` in a native agent location.
|
|
10
|
+
Ennodia discovers that folder and requests the selected skill by name.
|
|
11
|
+
It does not inline the full instructions into each delegated prompt.
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
The primary agent can keep useful partial findings without adopting every recommendation.
|
|
14
|
+
The [skill trial example](/docs/evidence/skill-trial/) shows a controlled small exercise.
|
|
14
15
|
|
|
15
16
|
## List Available Skills
|
|
16
17
|
|
|
@@ -53,8 +54,10 @@ Review the planned paths. If they are correct, repeat with `dryRun: false`.
|
|
|
53
54
|
"tool": "ennodia_run",
|
|
54
55
|
"arguments": {
|
|
55
56
|
"prompt": "Audit this documentation against the linked sources and recommend exact edits.",
|
|
56
|
-
"
|
|
57
|
-
"
|
|
57
|
+
"harnessId": "codex",
|
|
58
|
+
"mode": "single",
|
|
59
|
+
"compare": false,
|
|
60
|
+
"cwd": "/absolute/path/to/project",
|
|
58
61
|
"skillIds": ["source-grounded-audit"]
|
|
59
62
|
}
|
|
60
63
|
}
|
|
@@ -63,6 +66,11 @@ Review the planned paths. If they are correct, repeat with `dryRun: false`.
|
|
|
63
66
|
Task and run views include selected skill metadata in `appliedSkills`, so the
|
|
64
67
|
primary agent can see which skills were requested.
|
|
65
68
|
|
|
69
|
+
Native agents can self-select other skills from their environment.
|
|
70
|
+
An empty requested skill list does not guarantee a skill-free control.
|
|
71
|
+
`appliedSkills` records the request, not verified execution of the skill’s instructions.
|
|
72
|
+
A permission denial can prevent the worker from loading the skill.
|
|
73
|
+
|
|
66
74
|
Bundled skills include:
|
|
67
75
|
|
|
68
76
|
| Skill | Use it for |
|
|
@@ -84,3 +92,9 @@ Bundled skills include:
|
|
|
84
92
|
|
|
85
93
|
See [Model Context Protocol (MCP) Tools](/docs/reference/mcp-tools/) for the
|
|
86
94
|
exact tool parameters.
|
|
95
|
+
|
|
96
|
+
## Main-agent delegation skill
|
|
97
|
+
|
|
98
|
+
The bundled `pragmatic` skill guides the main agent through bounded delegation and result verification.
|
|
99
|
+
Install it using `skillIds: ["pragmatic"]`. Do not pass it to workers through run `skillIds`.
|
|
100
|
+
See [Pragmatic mode](/docs/guides/pragmatic-mode/) for the experimental recipes.
|
|
@@ -95,7 +95,7 @@ supported quota surface.
|
|
|
95
95
|
|
|
96
96
|
## Practical Defaults
|
|
97
97
|
|
|
98
|
-
-
|
|
98
|
+
- Start with one agent and a narrow task. Add attempts when they address a specific uncertainty.
|
|
99
99
|
- Use `maxOutputChars` to keep Compare input bounded.
|
|
100
100
|
- Keep `maxChildTasks` set when the prompt may route to many adapters.
|
|
101
101
|
- Treat unknown subscription-limit status as a transparency signal, not proof
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Pragmatic mode
|
|
3
|
+
description: Delegate bounded investigation and patch proposals to one explicitly selected model.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Pragmatic mode is experimental in `0.3.0-rc.2`, available through `ennodia@next`.
|
|
7
|
+
It helps your main agent delegate bounded work without loading entire logs or files into the main conversation.
|
|
8
|
+
It does not guarantee lower costs or select the cheapest model automatically.
|
|
9
|
+
|
|
10
|
+
## Start a bounded task
|
|
11
|
+
|
|
12
|
+
Use this prompt in your main agent:
|
|
13
|
+
|
|
14
|
+
```text
|
|
15
|
+
Use Ennodia MCP in Pragmatic mode to investigate the failing requests in /absolute/path/to/server.log.
|
|
16
|
+
Select a supported lower-cost model from my configured harnesses.
|
|
17
|
+
Return the affected timestamps, exact errors, likely cause, and evidence locations.
|
|
18
|
+
Keep the full log outside this conversation. Verify the decisive evidence before recommending a fix.
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
The main agent can call the existing run tool:
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"tool": "ennodia_run",
|
|
26
|
+
"arguments": {
|
|
27
|
+
"harnessId": "claude-code",
|
|
28
|
+
"model": "<supported-model-from-your-configuration>",
|
|
29
|
+
"cwd": "/absolute/path/to/project",
|
|
30
|
+
"prompt": "Find the cause of failed requests in /absolute/path/to/server.log between 10:00 and 10:10. Do not modify files.",
|
|
31
|
+
"pragmatic": {
|
|
32
|
+
"recipe": "investigate",
|
|
33
|
+
"acceptanceCriteria": "Cite exact errors and timestamps. Distinguish confirmed causes from hypotheses. Report any unread ranges."
|
|
34
|
+
},
|
|
35
|
+
"timeoutMs": 120000,
|
|
36
|
+
"budget": { "maxChildTasks": 1 }
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Replace the model placeholder with a supported identifier before calling the tool.
|
|
42
|
+
The caller supplies both `harnessId` and `model`.
|
|
43
|
+
The run uses `mode: single` and `compare: false`, including when these fields are omitted or set to `auto`.
|
|
44
|
+
Explicit parallel execution or comparison is rejected before workers start.
|
|
45
|
+
|
|
46
|
+
## Get findings or a patch
|
|
47
|
+
|
|
48
|
+
| Recipe | Worker instruction | Main agent responsibility |
|
|
49
|
+
| --- | --- | --- |
|
|
50
|
+
| `investigate` | Return cited findings, small excerpts, coverage limits, and unresolved questions | Verify decisive evidence |
|
|
51
|
+
| `patch` | Return a complete unified diff proposal without applying it | Review, apply, and test the patch |
|
|
52
|
+
|
|
53
|
+
Both recipes instruct workers to avoid file changes, side effects, recursive delegation, and repeated failed approaches.
|
|
54
|
+
These are worker instructions, not an enforced permission sandbox.
|
|
55
|
+
Native harness permissions remain authoritative.
|
|
56
|
+
A worker can fail to follow instructions, so use appropriate native permissions for sensitive work.
|
|
57
|
+
|
|
58
|
+
Patch results distinguish executed checks from proposed checks.
|
|
59
|
+
Check `finalAnswerChars` and request a larger answer if the response was truncated.
|
|
60
|
+
Do not apply an incomplete diff.
|
|
61
|
+
Patch runs fail when the child answer was truncated before reaching the run. Submit a smaller assignment in that case.
|
|
62
|
+
|
|
63
|
+
For authorized file edits, use a normal run in a separate checkout with appropriate native permissions.
|
|
64
|
+
The experimental recipes do not grant edit permissions.
|
|
65
|
+
Temporary `isolateCwd` copies are deleted when tasks finish and cannot serve as persistent patch artifacts.
|
|
66
|
+
|
|
67
|
+
## Inspect the work
|
|
68
|
+
|
|
69
|
+
Use `ennodia_get_run` for status, requested `model`, `pragmatic` settings, elapsed time, events, and child task IDs.
|
|
70
|
+
Inspect child tasks for output and adapter-reported usage when available.
|
|
71
|
+
Missing usage is unknown, not zero.
|
|
72
|
+
Persisted run records are bounded and can omit output.
|
|
73
|
+
|
|
74
|
+
Use `ennodia_estimate_budget` with the same `pragmatic` settings and model to include worker instructions in the preflight estimate.
|
|
75
|
+
Estimates do not measure total task spend, internal tool reads, or subscription quota consumption.
|
|
76
|
+
|
|
77
|
+
The foundation does not retry automatically or track retries across separate runs.
|
|
78
|
+
Escalate unresolved work in a separate run after inspecting its evidence.
|
|
79
|
+
Compare total elapsed time, verified outcomes, and all reported usage across attempts before claiming savings.
|
|
80
|
+
|
|
81
|
+
## Install the main-agent skill
|
|
82
|
+
|
|
83
|
+
The bundled `pragmatic` skill guides delegation from your main conversation.
|
|
84
|
+
Install it through [Agent Skills](/docs/guides/agent-skills/) using `skillIds: ["pragmatic"]`.
|
|
85
|
+
Do not request this skill on workers through run `skillIds`.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Recipes
|
|
3
|
+
description: Three small ways to get useful help from Ennodia.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Start with one useful attempt
|
|
7
|
+
|
|
8
|
+
A focused request is easier to check and integrate.
|
|
9
|
+
Give your primary agent the relevant files, attempted fixes, and the result you need.
|
|
10
|
+
|
|
11
|
+
## A task is stuck
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
Use Ennodia MCP to get a second opinion on this bug.
|
|
15
|
+
Give one available agent the failing test and our attempted fixes.
|
|
16
|
+
Request a different explanation and a concrete check for it.
|
|
17
|
+
Keep the review read-only and return the findings here.
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
A useful result names a different hypothesis and a way to test it.
|
|
21
|
+
Repeating the same suggestion is a result to record, not a reason to restart the whole conversation.
|
|
22
|
+
|
|
23
|
+
## A skill might help
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
Use Ennodia MCP to try an installed review skill on this change in a separate task.
|
|
27
|
+
Keep the review read-only. Bring back useful findings and unsupported suggestions.
|
|
28
|
+
Show which skill and model were requested and what remains unverified.
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Check native installation with your agent before the task starts.
|
|
32
|
+
A requested skill is not proof that the worker loaded it.
|
|
33
|
+
Use the [small skill trial](/docs/evidence/skill-trial/) to practice comparing two attempts.
|
|
34
|
+
|
|
35
|
+
## Two answers disagree
|
|
36
|
+
|
|
37
|
+
```text
|
|
38
|
+
Use Ennodia MCP to compare these two answers.
|
|
39
|
+
Identify the assumption behind each disagreement and the evidence for each side.
|
|
40
|
+
Recommend the smallest check that can settle it.
|
|
41
|
+
Keep useful partial findings even if neither answer solves the whole task.
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Compare adds a Judge pass and a Result Advisor pass.
|
|
45
|
+
Use it when those additional checks are useful for your next decision.
|
|
46
|
+
Your primary agent can directly inspect one short worker answer without Compare.
|
|
47
|
+
|
|
48
|
+
## Agent implementation notes
|
|
49
|
+
|
|
50
|
+
`ennodia_run` starts a tracked run. For one explicit attempt, use `mode: "single"`, a discovered `harnessId`, and `compare: false`.
|
|
51
|
+
Use `ennodia_get_run` to inspect the result.
|
|
52
|
+
The [tool reference](/docs/reference/mcp-tools/) contains exact parameters.
|
|
53
|
+
|
|
54
|
+
For independent work on the same files, use separate checkouts or `isolateCwd: true`.
|
|
55
|
+
Ennodia refuses symbolic links in copied directories. It deletes each temporary copy when the task ends.
|
|
56
|
+
Save required changes before relying on a temporary directory as an output artifact.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Troubleshooting
|
|
3
|
+
description: Resolve failed starts without confusing configuration errors with model quality.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# When an attempt cannot finish
|
|
7
|
+
|
|
8
|
+
Start with the task’s failure reason and captured output.
|
|
9
|
+
Use `ennodia_get_task` for details and `ennodia_list_harnesses` to inspect supported commands.
|
|
10
|
+
|
|
11
|
+
## The agent is listed, but cannot run the task
|
|
12
|
+
|
|
13
|
+
Discovery establishes command availability. It does not establish login state, available models, or remaining provider quota.
|
|
14
|
+
Run a small task to check the selected configuration.
|
|
15
|
+
|
|
16
|
+
For an expired login, sign in through the affected agent’s supported command-line interface (CLI).
|
|
17
|
+
For an unavailable model, check that agent’s model list and configured provider.
|
|
18
|
+
Do not interpret either failure as evidence that the model could not solve the task.
|
|
19
|
+
|
|
20
|
+
## The worker cannot read or edit
|
|
21
|
+
|
|
22
|
+
Codex workers use a read-only sandbox by default.
|
|
23
|
+
Other agents retain their native permission rules.
|
|
24
|
+
Non-interactive agents can deny operations that require an interactive permission prompt.
|
|
25
|
+
|
|
26
|
+
Use accessible source material and the agent’s normal permission configuration.
|
|
27
|
+
Request a proposed patch when direct editing is unavailable.
|
|
28
|
+
Do not disable permission checks to make an example appear successful.
|
|
29
|
+
|
|
30
|
+
## Isolation rejects a symbolic link
|
|
31
|
+
|
|
32
|
+
`isolateCwd: true` copies a working directory and rejects symbolic links before launch.
|
|
33
|
+
Use a small self-contained fixture or an explicit separate checkout when the project contains such links.
|
|
34
|
+
Ennodia deletes its temporary copied directory after the task ends.
|
|
35
|
+
Use a persistent separate checkout for implementation work that you need to integrate.
|
|
36
|
+
|
|
37
|
+
## A task reaches its timeout
|
|
38
|
+
|
|
39
|
+
Inspect the partial output first. It can contain useful findings or only setup activity.
|
|
40
|
+
Narrow the next request or change its execution configuration when appropriate.
|
|
41
|
+
More time is useful only when the progress supports that choice.
|
|
42
|
+
Cancel unwanted tasks explicitly with `ennodia_cancel_task` or `ennodia_cancel_run`.
|
|
43
|
+
|
|
44
|
+
## A skill was requested but did not load
|
|
45
|
+
|
|
46
|
+
Check `ennodia_list_skills` for the selected agent’s native installation.
|
|
47
|
+
Then inspect the worker’s tool access and output.
|
|
48
|
+
The `appliedSkills` field records the request. It does not independently verify every action inside the worker.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Understand results
|
|
3
|
+
description: Distinguish useful findings, disagreement, missing evidence, and failed execution.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Understand the result
|
|
7
|
+
|
|
8
|
+
Process completion is one signal. A useful answer also needs evidence that fits your task.
|
|
9
|
+
|
|
10
|
+
| Result | Meaning | Next step |
|
|
11
|
+
| --- | --- | --- |
|
|
12
|
+
| Useful finding | A concrete claim, correction, or test you can examine. | Verify it and integrate the useful part. |
|
|
13
|
+
| Disagreement | Different assumptions or conclusions remain. | Check the evidence that can distinguish them. |
|
|
14
|
+
| Unhelpful answer | The attempt ran but did not move the task forward. | Record the conditions and change the approach. |
|
|
15
|
+
| Failed login or unavailable model | The requested model could not be evaluated. | Repair access or select another available configuration. |
|
|
16
|
+
| Timeout | The attempt did not finish within its limit. | Inspect progress before narrowing or repeating it. |
|
|
17
|
+
| Missing tool permission | The worker could not perform a required operation. | Review normal tool permissions or provide accessible material. |
|
|
18
|
+
|
|
19
|
+
An unsuccessful attempt does not prove that every model would fail.
|
|
20
|
+
It can remove the need to repeat that same attempt under the same conditions.
|
|
21
|
+
|
|
22
|
+
## Compare is advice
|
|
23
|
+
|
|
24
|
+
Compare uses a Judge to examine answers and a Result Advisor to recommend a next answer.
|
|
25
|
+
Agreement is not proof of correctness.
|
|
26
|
+
The primary agent still checks code, sources, tests, and important assumptions.
|
|
27
|
+
|
|
28
|
+
When Judge output is unusable, the result exposes `analysisAvailable: false`.
|
|
29
|
+
The Result Advisor can continue with `basis: "candidates-only"`.
|
|
30
|
+
That result has less analysis behind it and needs corresponding scrutiny.
|
|
31
|
+
|
|
32
|
+
## Read the attempt record
|
|
33
|
+
|
|
34
|
+
Task records include the selected agent, requested skills, status, elapsed time, and bounded output.
|
|
35
|
+
Run history preserves terminal run snapshots locally.
|
|
36
|
+
It does not yet learn which model or skill to choose next.
|
|
37
|
+
|
|
38
|
+
`remainingMs` with `etaConfidence: "timeout-budget"` reports time left before the deadline.
|
|
39
|
+
It is not a prediction of model completion time.
|
|
40
|
+
Input-token estimates also exclude work inside the agent.
|
|
41
|
+
Unknown provider usage must remain unknown.
|
package/docs/index.md
CHANGED
|
@@ -1,104 +1,41 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: What is Ennodia?
|
|
3
|
-
description:
|
|
3
|
+
description: Try other agents, models, and skills while staying in your familiar conversation.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
Your primary artificial intelligence (AI) agent can request help from installed
|
|
8
|
-
agent command-line interfaces (CLIs).
|
|
6
|
+
# Keep your agent. Get another way forward.
|
|
9
7
|
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
Ennodia lets your primary artificial intelligence (AI) agent try another agent, model, or skill on a focused task.
|
|
9
|
+
The findings return to your existing conversation.
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
You can explore another explanation for a bug, test a skill, or examine conflicting advice.
|
|
12
|
+
Your primary agent keeps responsibility for checking and integrating the result.
|
|
13
|
+
Even an unsuccessful attempt can show which approach was tested under the recorded conditions.
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
diagnosis, or a comparison. A run usually takes minutes.
|
|
15
|
+
## Start here
|
|
18
16
|
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
- [Get your first result](/docs/getting-started/).
|
|
18
|
+
- [Choose a recipe](/docs/guides/recipes/).
|
|
19
|
+
- [Understand the result](/docs/guides/understand-results/).
|
|
20
|
+
- [Read a development case](/docs/evidence/building-ennodia/).
|
|
21
21
|
|
|
22
|
-
##
|
|
22
|
+
## Your existing tools
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
Ennodia runs as a local Model Context Protocol (MCP) server.
|
|
25
|
+
It connects to supported installed agents through their public command-line interfaces (CLIs).
|
|
26
|
+
Your configured providers supply the models. Existing subscriptions, usage limits, and permissions still apply.
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
Ennodia discovers native Agent Skills and can request a skill for a separate task.
|
|
29
|
+
A native agent can also choose unrequested skills from its environment.
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
Claude Code, Antigravity, and OpenCode. Ennodia makes their installed CLIs a
|
|
32
|
-
review panel for the primary agent.
|
|
31
|
+
## Learn more
|
|
33
32
|
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
- [Agent skills](/docs/guides/agent-skills/)
|
|
34
|
+
- [Troubleshooting](/docs/guides/troubleshooting/)
|
|
35
|
+
- [Data movement and history](/docs/concepts/data-governance/)
|
|
36
|
+
- [Examples and evidence](/docs/evidence/)
|
|
37
|
+
- [Roadmap](/docs/roadmap/)
|
|
38
|
+
- [Technical reference](/docs/reference/mcp-tools/)
|
|
36
39
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
separate explicit call must launch the validated plan.
|
|
40
|
-
- Model-led Compare uses a Judge for the disagreement map and a Result Advisor
|
|
41
|
-
for the recommended answer.
|
|
42
|
-
- One shared core discovers harnesses, plans routes, checks local preflight
|
|
43
|
-
limits, tracks tasks, and keeps the trace visible.
|
|
44
|
-
- The separate Ennodia IO package is an experimental appendix for apps.
|
|
45
|
-
|
|
46
|
-
## Why People Use It
|
|
47
|
-
|
|
48
|
-
Ennodia:
|
|
49
|
-
|
|
50
|
-
- discovers supported local harnesses automatically
|
|
51
|
-
- uses your installed CLIs, subscriptions, and model choices
|
|
52
|
-
- estimates preflight input-token budgets and enforces local caps on that
|
|
53
|
-
estimate
|
|
54
|
-
- keeps child task identifiers (IDs), status, estimated completion time,
|
|
55
|
-
output, failures, Compare state, and run
|
|
56
|
-
history visible
|
|
57
|
-
- can retain terminal receipts across server restarts
|
|
58
|
-
- lets a Judge inspect parallel answers and a Result Advisor combine the
|
|
59
|
-
findings
|
|
60
|
-
- uses native Agent Skills through harness-visible `SKILL.md` folders
|
|
61
|
-
|
|
62
|
-
Durable model and skill preference memory is roadmap work. By default, Ennodia
|
|
63
|
-
stores terminal run history under `~/.ennodia/history/`. Live in-progress state
|
|
64
|
-
remains process-local.
|
|
65
|
-
|
|
66
|
-
## Choose Your Path
|
|
67
|
-
|
|
68
|
-
| Task | Page |
|
|
69
|
-
| --- | --- |
|
|
70
|
-
| Request Ennodia installation from an agent | [Installation for Agents](./install/) |
|
|
71
|
-
| Install it manually or work from a checkout | [Quickstart](./getting-started/) |
|
|
72
|
-
| Estimate or limit a costly run | [Budgets and Limits](./guides/budgets-and-limits/) |
|
|
73
|
-
| Install or use `source-grounded-audit` and other skills | [Agent Skills](./guides/agent-skills/) |
|
|
74
|
-
| Understand the run lifecycle | [How Ennodia Works](./concepts/how-ennodia-works/) |
|
|
75
|
-
| Request a bounded team proposal before work | [How Ennodia Works](./concepts/how-ennodia-works/#plan-advisor) |
|
|
76
|
-
| Use panels for second opinions | [Second Opinions as Infrastructure](./concepts/second-opinions/) |
|
|
77
|
-
| Understand local storage and data movement | [Data Governance](./concepts/data-governance/) |
|
|
78
|
-
| Understand Core, <span class="agent-logo agent-logo--mcp" aria-hidden="true"></span>MCP, and experimental IO | [Interfaces and Core](./concepts/interfaces-and-core/) |
|
|
79
|
-
| Split a large review into smaller shards | [Compositional Audits](./concepts/compositional-audits/) |
|
|
80
|
-
| Call the exact <span class="agent-logo agent-logo--mcp" aria-hidden="true"></span>MCP tools | [MCP Tools](./reference/mcp-tools/) |
|
|
81
|
-
| Call Ennodia from a local web app | [Ennodia IO](./reference/ennodia-io/) |
|
|
82
|
-
| Check harness identifiers and installation notes | [Supported Harnesses](./reference/supported-harnesses/) |
|
|
83
|
-
| Use the ASD-STE100 rules and approved Ennodia terms | [Controlled English](./reference/controlled-english/) |
|
|
84
|
-
| Inspect benchmark receipts | [Benchmarks](./reference/benchmarks/) |
|
|
85
|
-
| Decide if Ennodia fits your workflow | [Comparisons](./comparisons/) |
|
|
86
|
-
| Get better output from model-led Compare | [Better Audits](./guides/running-better-audits/) |
|
|
87
|
-
|
|
88
|
-
## First Useful Run
|
|
89
|
-
|
|
90
|
-
1. Install Ennodia in your MCP client.
|
|
91
|
-
2. Call `ennodia_list_harnesses`.
|
|
92
|
-
3. Call `ennodia_estimate_budget` for the task.
|
|
93
|
-
4. Start `ennodia_run`.
|
|
94
|
-
5. Poll `ennodia_get_run` until it reaches `succeeded`, `failed`, or
|
|
95
|
-
`cancelled`.
|
|
96
|
-
|
|
97
|
-
The user does not normally need to grade each child answer. The trace remains
|
|
98
|
-
available for inspection.
|
|
99
|
-
|
|
100
|
-
For a team proposal, call `ennodia_start_plan_advice`. Then poll
|
|
101
|
-
`ennodia_get_plan_advice`. A ready result is only validated data.
|
|
102
|
-
|
|
103
|
-
Call `ennodia_start_advised_plan` with the returned plan digest once to start the
|
|
104
|
-
work.
|
|
40
|
+
General speed or token savings have not been established.
|
|
41
|
+
The examples distinguish useful contributions, incomplete attempts, and technical failures.
|
package/docs/install.md
CHANGED
|
@@ -3,8 +3,9 @@ title: Installation for Agents
|
|
|
3
3
|
description: A copy-paste installation page for agents that install Ennodia in Codex, Claude Code, OpenCode, Antigravity, and other Model Context Protocol (MCP) clients.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
This page
|
|
7
|
-
|
|
6
|
+
This page gives setup instructions to the user's agent.
|
|
7
|
+
Install Ennodia as a local Model Context Protocol (MCP) server.
|
|
8
|
+
Then connect it to the user's preferred compatible client.
|
|
8
9
|
|
|
9
10
|
## Copy-Paste Prompt
|
|
10
11
|
|
|
@@ -12,6 +13,24 @@ Context Protocol (MCP) server. Then enable it in the user's MCP client.
|
|
|
12
13
|
try-ennodia.cherninlab.com
|
|
13
14
|
```
|
|
14
15
|
|
|
16
|
+
The user can send this address in a new or existing agent conversation.
|
|
17
|
+
The agent handles the setup steps below.
|
|
18
|
+
|
|
19
|
+
## Check the Environment
|
|
20
|
+
|
|
21
|
+
1. Identify the user's client and the machine where Ennodia will run.
|
|
22
|
+
2. Check that the client can launch a local standard input/output (stdio) MCP server.
|
|
23
|
+
3. Check for Bun `1.3.14` or newer in that environment.
|
|
24
|
+
4. Check for a supported agent command-line interface (CLI) with working provider access.
|
|
25
|
+
|
|
26
|
+
Use the client's supported configuration method and the tools' official installation instructions.
|
|
27
|
+
Preserve existing server entries and unrelated settings.
|
|
28
|
+
Use the client's normal permissions.
|
|
29
|
+
|
|
30
|
+
If the current client cannot launch a local MCP server, explain the missing capability.
|
|
31
|
+
Use a compatible local client for Ennodia.
|
|
32
|
+
See [Supported Harnesses](/docs/reference/supported-harnesses/) for the worker agents Ennodia can call.
|
|
33
|
+
|
|
15
34
|
## Install Command
|
|
16
35
|
|
|
17
36
|
Use the npm package for normal MCP client installation:
|
|
@@ -51,24 +70,38 @@ For a local Ennodia checkout, use:
|
|
|
51
70
|
}
|
|
52
71
|
```
|
|
53
72
|
|
|
54
|
-
|
|
73
|
+
The configuration above shows the server command and arguments.
|
|
74
|
+
Adapt its format to the client's documented configuration method.
|
|
75
|
+
Reload the tools or restart the client only when its setup instructions require this step.
|
|
76
|
+
Tell the user which step is needed before trying to call Ennodia.
|
|
77
|
+
|
|
78
|
+
## Get One Useful Result
|
|
79
|
+
|
|
80
|
+
After the client exposes Ennodia's tools, start with one small task:
|
|
81
|
+
|
|
82
|
+
1. Call `ennodia_list_harnesses` with `refresh: true`.
|
|
83
|
+
2. Choose one available worker for a focused, read-only check from the user's current task.
|
|
84
|
+
3. Call `ennodia_run` with `prompt`, `harnessId`, `mode: "single"`, `compare: false`, and the relevant `cwd`.
|
|
85
|
+
4. Poll `ennodia_get_run` with the returned `id` as `runId`.
|
|
86
|
+
5. Stop when the status is `succeeded`, `failed`, or `cancelled`.
|
|
87
|
+
6. Report the useful finding or the specific failure in the user's conversation.
|
|
55
88
|
|
|
56
|
-
|
|
89
|
+
For example, request a read-only check of one function or one documentation claim against its source.
|
|
90
|
+
Include the relevant files or task details in the worker prompt.
|
|
91
|
+
Request evidence the main agent can inspect.
|
|
57
92
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
4. `ennodia_run`
|
|
62
|
-
5. `ennodia_get_run`
|
|
93
|
+
Discovery checks installed commands, not active authentication, model access, or provider quota.
|
|
94
|
+
A successful small run verifies the selected worker's configuration.
|
|
95
|
+
If provider access is missing, identify the affected worker and its normal login or configuration step.
|
|
63
96
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
[
|
|
97
|
+
The first run does not require separate planning, budget estimation, or Compare calls.
|
|
98
|
+
These tools remain available for larger tasks.
|
|
99
|
+
See [MCP Tools](/docs/reference/mcp-tools/) for exact parameters and identifiers (IDs).
|
|
67
100
|
|
|
68
101
|
## Installed Components
|
|
69
102
|
|
|
70
103
|
Ennodia is a local MCP server. It lets the user's main agent request help from
|
|
71
|
-
other installed agent
|
|
104
|
+
other installed agent CLI programs during the same task.
|
|
72
105
|
|
|
73
106
|
The number of agents is not the primary benefit. Ennodia uses current local
|
|
74
107
|
installs, subscriptions, and model choices. It discovers supported CLI programs and
|
|
@@ -96,18 +129,18 @@ Use Ennodia when the user permits more model work to get a better answer than
|
|
|
96
129
|
one agent usually gives.
|
|
97
130
|
|
|
98
131
|
```text
|
|
99
|
-
Use Ennodia to request a review from multiple available agents.
|
|
132
|
+
Use Ennodia MCP to request a review from multiple available agents.
|
|
100
133
|
Compare the answers for this bug fix.
|
|
101
134
|
Name the disagreements and return the highest-risk issue first.
|
|
102
135
|
```
|
|
103
136
|
|
|
104
137
|
```text
|
|
105
|
-
Use Ennodia to plan this migration with Claude Code, OpenCode, and Antigravity.
|
|
138
|
+
Use Ennodia MCP to plan this migration with Claude Code, OpenCode, and Antigravity.
|
|
106
139
|
Compare the plans and tell me which assumptions each model made.
|
|
107
140
|
```
|
|
108
141
|
|
|
109
142
|
```text
|
|
110
|
-
Use Ennodia twice.
|
|
143
|
+
Use Ennodia MCP twice.
|
|
111
144
|
Use source-grounded-audit for the first run, but not for the second run.
|
|
112
145
|
Compare the results before you recommend the final documentation edit.
|
|
113
146
|
```
|
|
@@ -25,8 +25,8 @@ Keep this data exact, even when its text does not use controlled English.
|
|
|
25
25
|
- Define a necessary abbreviation at its first use on each independent page.
|
|
26
26
|
- Preserve exact product names, commands, paths, model IDs, and API fields.
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
Marketing headlines can change with the product positioning.
|
|
29
|
+
Keep supporting copy concrete and consistent with current product behavior.
|
|
30
30
|
|
|
31
31
|
Automated checks can find some defects, but they cannot certify compliance.
|
|
32
32
|
A human reviewer must confirm meaning, grammar, and correct technical use.
|
|
@@ -40,7 +40,6 @@ Use the listed meaning and part of speech.
|
|
|
40
40
|
| --- | --- | --- |
|
|
41
41
|
| Ennodia | technical noun | The software product in this repository. |
|
|
42
42
|
| artificial intelligence (AI) | technical noun | Software that produces or evaluates model output. |
|
|
43
|
-
| AI makes mistakes | approved tagline | The exact Ennodia landing-page headline. Keep this phrase unchanged. |
|
|
44
43
|
| Model Context Protocol (MCP) | technical noun | The protocol that exposes Ennodia tools to a compatible client. |
|
|
45
44
|
| command-line interface (CLI) | technical noun | A text interface that accepts commands. |
|
|
46
45
|
| application programming interface (API) | technical noun | A defined interface that software uses to exchange data. |
|
|
@@ -62,8 +62,25 @@ Environment variables:
|
|
|
62
62
|
IO binds to loopback by default and refuses non-loopback hosts unless an API key
|
|
63
63
|
is configured. Bearer tokens are compared with a timing-safe comparison.
|
|
64
64
|
|
|
65
|
+
IO checks the `Host` header on every route. In the default loopback posture,
|
|
66
|
+
the host must be `localhost`, `::1`, or an address in `127.0.0.0/8`. A forged
|
|
67
|
+
`Host` header, such as one from Domain Name System (DNS) rebinding, gets a
|
|
68
|
+
`403 invalid_host` error. An explicit non-loopback `--host` turns off this
|
|
69
|
+
allowlist and requires the API key.
|
|
70
|
+
|
|
71
|
+
IO checks the `Origin` header when a request carries one. Only loopback origins
|
|
72
|
+
are accepted. A browser post from a non-loopback origin gets a `403 invalid_origin`
|
|
73
|
+
error before any run starts. Clients that send no `Origin` header, such as
|
|
74
|
+
local command-line tools, keep working.
|
|
75
|
+
|
|
76
|
+
`POST /v1/chat/completions` requires a JSON media type such as
|
|
77
|
+
`application/json`. Other media types get a `415 unsupported_media_type` error.
|
|
78
|
+
This requirement stops simple-request browser posts, for example cross-site
|
|
79
|
+
forms that send `text/plain`.
|
|
80
|
+
|
|
65
81
|
IO intentionally sends no Cross-Origin Resource Sharing (CORS) headers by
|
|
66
|
-
default.
|
|
82
|
+
default. Browsers cannot read cross-origin responses or send cross-origin JSON posts
|
|
83
|
+
unless their app uses an appropriate same-origin proxy.
|
|
67
84
|
There is no `--cors-origin` flag. Add one only when an app needs that trust
|
|
68
85
|
boundary.
|
|
69
86
|
|
|
@@ -75,7 +92,7 @@ boundary.
|
|
|
75
92
|
| `GET /v1/provider-options` | Supported | Returns app-facing local provider options for settings screens. |
|
|
76
93
|
| `GET /v1/byok-options` | Supported alias | Same response as provider options. |
|
|
77
94
|
| `GET /v1/models` | Supported | Returns local virtual model IDs for compatible clients. |
|
|
78
|
-
| `POST /v1/chat/completions` | Supported subset | Non-streaming text messages only. |
|
|
95
|
+
| `POST /v1/chat/completions` | Supported subset | Non-streaming text messages only. Requires a JSON media type. |
|
|
79
96
|
|
|
80
97
|
## Provider Options
|
|
81
98
|
|
|
@@ -202,9 +219,15 @@ The response includes the normal OpenAI-style `choices[0].message.content` plus
|
|
|
202
219
|
an `ennodia` object. The object contains the run ID, status, selected harnesses,
|
|
203
220
|
task IDs, Compare ID when present, and budget estimate.
|
|
204
221
|
|
|
205
|
-
|
|
222
|
+
Handler errors use JSON with `cache-control: no-store`. The native server can
|
|
223
|
+
reject a request before the handler runs, so clients must also handle an empty
|
|
224
|
+
HTTP error response:
|
|
206
225
|
|
|
207
|
-
-
|
|
226
|
+
- disallowed `Host` header or `Origin` header -> `403 invalid_host` or `403 invalid_origin`
|
|
227
|
+
- non-JSON media type on chat completions -> `415 unsupported_media_type`
|
|
228
|
+
- request body above the configured cap -> HTTP `413`. Bun can reject it with
|
|
229
|
+
an empty body before the handler runs. Requests rejected by the handler use
|
|
230
|
+
the JSON error `request_too_large`.
|
|
208
231
|
- saturated chat completions -> `429 rate_limit_error` with `retry-after: 1`
|
|
209
232
|
- client abort after the run starts -> `499 client_closed_request`. IO cancels
|
|
210
233
|
the Ennodia run when Core exposes cancellation
|