ennodia 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CONTRIBUTING.md +60 -36
  2. package/README.md +74 -58
  3. package/bench/README.md +7 -5
  4. package/bench/bug-recall/run.ts +12 -4
  5. package/bin/ennodia +23 -2
  6. package/docs/assets/agents/mcp.svg +1 -1
  7. package/docs/assets/orchestration-pipeline.svg +4 -3
  8. package/docs/comparisons/agent-frameworks.md +15 -10
  9. package/docs/comparisons/autogen.md +20 -15
  10. package/docs/comparisons/chathub.md +15 -14
  11. package/docs/comparisons/index.md +30 -22
  12. package/docs/comparisons/langgraph.md +19 -12
  13. package/docs/comparisons/mixture-of-agents.md +20 -17
  14. package/docs/comparisons/model-merging.md +7 -5
  15. package/docs/comparisons/openrouter.md +30 -22
  16. package/docs/concepts/compositional-audits.md +16 -13
  17. package/docs/concepts/data-governance.md +31 -15
  18. package/docs/concepts/how-ennodia-works.md +48 -22
  19. package/docs/concepts/interfaces-and-core.md +19 -6
  20. package/docs/concepts/second-opinions.md +20 -20
  21. package/docs/getting-started.md +55 -27
  22. package/docs/guides/agent-skills.md +16 -13
  23. package/docs/guides/budgets-and-limits.md +30 -20
  24. package/docs/guides/running-better-audits.md +50 -44
  25. package/docs/index.md +60 -37
  26. package/docs/install.md +41 -32
  27. package/docs/reference/benchmarks.md +6 -4
  28. package/docs/reference/controlled-english.md +130 -0
  29. package/docs/reference/ennodia-io.md +28 -22
  30. package/docs/reference/mcp-tools.md +244 -87
  31. package/docs/reference/supported-harnesses.md +9 -9
  32. package/package.json +7 -5
  33. package/src/advisor.ts +685 -0
  34. package/src/budget.ts +25 -6
  35. package/src/cli.ts +1 -1
  36. package/src/compare.ts +248 -52
  37. package/src/compositional.ts +18 -0
  38. package/src/core.ts +547 -16
  39. package/src/harnesses.ts +33 -2
  40. package/src/index.ts +38 -0
  41. package/src/plan-advice.ts +601 -0
  42. package/src/runs.ts +74 -9
  43. package/src/server.ts +312 -46
  44. package/src/skills.ts +131 -11
  45. package/src/tasks.ts +192 -22
  46. package/src/version.ts +1 -1
@@ -1,30 +1,32 @@
1
1
  ---
2
2
  title: How Ennodia Works
3
- description: A visible orchestration pipeline for routing, budget checks, task watching, recovery, Compare, and final synthesis.
3
+ description: A visible orchestration pipeline for optional plan advice, routing, budget checks, task watching, recovery, Judge, and Result Advisor passes.
4
4
  ---
5
5
 
6
- When an MCP client starts a high-level run, Ennodia turns one request into a
7
- visible orchestration. The normal entrypoint is `ennodia_run`; lower-level task
8
- and Compare tools stay available for debugging and manual control.
6
+ When a Model Context Protocol (MCP) client starts a high-level run, Ennodia
7
+ turns one request into a visible orchestration. The normal entrypoint is
8
+ `ennodia_run`. Lower-level task and Compare tools stay available for debugging
9
+ and manual control.
9
10
 
10
11
  ## Pipeline at a Glance
11
12
 
12
13
  | Stage | What happens | Main tools |
13
14
  | --- | --- | --- |
14
- | Discover | Ennodia finds installed agent CLIs and reports whether each harness is runnable. | `ennodia_list_harnesses` |
15
+ | Discover | Ennodia finds installed agent command-line interface (CLI) programs and reports the runnable state of each harness. | `ennodia_list_harnesses` |
15
16
  | Plan | The router uses a caller-provided category when supplied, otherwise a keyword fallback, then chooses candidate harnesses. | `ennodia_plan`, `ennodia_run` |
17
+ | Advise (optional) | A Plan Advisor proposes a bounded set of harness, model, and skill assignments as inert data. Ennodia validates it but does not launch it. | `ennodia_start_plan_advice`, `ennodia_get_plan_advice` |
16
18
  | Budget | Ennodia estimates preflight input tokens and checks optional local limits on that estimate. | `ennodia_estimate_budget`, `ennodia_run` |
17
19
  | Execute | Thin adapters start the selected local agent CLI commands. Each child has a default 5-minute timeout and a 1-hour maximum accepted by the public tools. | `ennodia_start`, `ennodia_run` |
18
20
  | Watch | Child task status, stdout, stderr, timing, and failures stay inspectable. | `ennodia_get_task`, `ennodia_get_run` |
19
- | Recover | Timeouts, cancellations, and failed children are reported instead of hidden. | `ennodia_cancel_task`, `ennodia_cancel_run` |
20
- | Compare | A model judges and synthesizes successful outputs when comparison is requested. Compare adds two serial model passes after child agents finish. | `ennodia_start_compare`, `ennodia_get_compare` |
21
+ | Recover | Ennodia reports timeouts, cancellations, and failed children without hiding them. | `ennodia_cancel_task`, `ennodia_cancel_run` |
22
+ | Compare | The Judge maps successful outputs. The Result Advisor uses those findings to recommend an answer. Compare adds two serial model passes after child agents finish. | `ennodia_start_compare`, `ennodia_get_compare` |
21
23
  | Return | The MCP client receives one final answer plus an inspectable run record and durable terminal receipt. | `ennodia_get_run`, `ennodia_history` |
22
24
 
23
25
  ## Discover
24
26
 
25
27
  Ennodia maintains a registry of execution backends. Each adapter is intentionally
26
- thin: it reports whether the tool is available, identifies the installed
27
- version, and starts the tool through its supported command-line surface.
28
+ thin. It reports tool availability, identifies the installed version, and starts
29
+ the tool through its supported command-line surface.
28
30
 
29
31
  See [Supported Harnesses](/docs/reference/supported-harnesses/) for current
30
32
  adapter IDs and setup notes.
@@ -33,23 +35,44 @@ adapter IDs and setup notes.
33
35
 
34
36
  The router combines the currently available harnesses with either a
35
37
  caller-provided category (`code`, `research`, `browser`, `image`, or `general`)
36
- or a small keyword fallback. Agent callers should pass `category` when they
37
- already know what kind of work they are asking for; the fallback is a convenience
38
+ or a small keyword fallback. Pass `category` when you know the work type. The
39
+ fallback is a convenience
38
40
  path, not a claim of deep intent understanding.
39
41
 
42
+ ## Plan Advisor
43
+
44
+ Plan Advisor is an optional suggestion path, not a more powerful router. It sees
45
+ a frozen, bounded inventory and proposes explicit worker slices with harness,
46
+ model, and skill assignments. Its response is untrusted plan data: it cannot set
47
+ working directories, environment variables, commands, permissions, timeouts,
48
+ or budgets. The Plan Advisor task itself runs in a separate empty temporary working
49
+ directory rather than inheriting the target project directory.
50
+
51
+ Ennodia parses the complete response as strict JSON and validates every
52
+ assignment. A valid result is still inert. The Plan Advisor never starts worker
53
+ tasks, retries them, or changes the plan after validation. The caller must make
54
+ a separate `ennodia_start_advised_plan` call with the exact plan digest. Each
55
+ advice result can authorize one launch.
56
+
57
+ Immediately before the first launch, Ennodia checks the digest, current
58
+ inventory, skills, caller model allowlists, and budget again. Any mismatch fails
59
+ closed with zero worker launches. Provider model availability remains
60
+ unverified until its harness runs.
61
+
40
62
  ![A request is classified, routed to available harnesses, watched, recovered when needed, compared, and returned with a trace.](../assets/orchestration-pipeline.svg)
41
63
 
42
64
  ## Budget
43
65
 
44
66
  Before a high-level run starts child tasks, Ennodia can estimate the input-token
45
67
  budget. The estimate includes selected child task count, prompt input, planned
46
- Compare input, and the effective candidate bound used in the judge prompt.
68
+ Compare input, and the effective candidate bound used in the Judge prompt.
47
69
 
48
70
  Budget checks are intentionally honest. Ennodia can enforce local preflight
49
71
  limits such as `maxChildTasks` and `maxEstimatedInputTokens` on that estimate.
50
72
  Child-task estimates exclude harness system prompts, file reads, tool loops, and
51
73
  provider-side context, so real usage can be higher. Ennodia only reports
52
- subscription quota as known when a supported local CLI/API surface exposes it.
74
+ subscription quota as known when a supported local CLI or application
75
+ programming interface (API) surface exposes it.
53
76
 
54
77
  See [Budgets and Limits](/docs/guides/budgets-and-limits/) for request shapes.
55
78
 
@@ -70,21 +93,24 @@ the child process exits and captured output has drained.
70
93
 
71
94
  ## Recover
72
95
 
73
- Failure handling is part of the execution plan. Nodes can time out, fail, be
74
- cancelled, or return partial output without hiding what happened.
96
+ Failure handling is part of the execution plan. Nodes can time out, fail, enter
97
+ the `cancelled` state, or return partial output without hiding the result.
75
98
 
76
99
  ## Compare
77
100
 
78
- When several agents produce answers, Ennodia does not concatenate them. A judge
101
+ When multiple agents produce answers, Ennodia does not concatenate them. A Judge
79
102
  can produce a structured comparison: agreements, contradictions, unique
80
- insights, blind spots, and risks. A synthesizer then uses that comparison and
81
- the original outputs to create the final result.
103
+ insights, blind spots, and risks. The Result Advisor then uses that comparison
104
+ and the original outputs to create the recommended result.
82
105
 
83
- Compare is model-led synthesis, not formal voting or consensus.
106
+ Compare uses model judgment. It does not use formal voting or consensus.
84
107
 
85
- Compare is also serial: a judge task runs first, then a synthesizer task runs
86
- after the judge completes. For a parallel run with N child agents, budget and
87
- latency should be understood as N child runs plus those two Compare passes.
108
+ Compare is also serial: the Judge task runs first, then the Result Advisor task
109
+ runs after it completes. If the Judge fails or returns unusable structured
110
+ analysis, the Result Advisor can continue directly from the candidate outputs.
111
+ The result records `basis: "candidates-only"` so the degraded path stays
112
+ visible. For a parallel run with N child agents, count N child runs plus the two
113
+ Compare passes when estimating budget and latency.
88
114
 
89
115
  ## Return
90
116
 
@@ -1,10 +1,12 @@
1
1
  ---
2
2
  title: Interfaces and Core
3
- description: How Ennodia's MCP interface and shared core behavior relate to each other.
3
+ description: How Ennodia's Model Context Protocol (MCP) interface and shared core behavior relate to each other.
4
4
  ---
5
5
 
6
6
  ## Current Shape
7
7
 
8
+ Ennodia has a Model Context Protocol (MCP) interface and a shared Core.
9
+
8
10
  | Name | Status | What it means |
9
11
  | --- | --- | --- |
10
12
  | <span class="agent-logo agent-logo--mcp" aria-hidden="true"></span>Ennodia MCP | Available | The shipped MCP tool interface for agents. Use this today. |
@@ -14,10 +16,12 @@ description: How Ennodia's MCP interface and shared core behavior relate to each
14
16
 
15
17
  Ennodia MCP is the supported public surface in the current release. It exposes
16
18
  tools such as `ennodia_list_harnesses`, `ennodia_estimate_budget`,
17
- `ennodia_run`, `ennodia_get_run`, and `ennodia_start_compare`. Each tool is a
18
- schema plus one Core call — nothing more.
19
+ `ennodia_run`, `ennodia_start_plan_advice`, `ennodia_get_run`, and
20
+ `ennodia_start_compare`. Each tool is a schema plus one Core call — nothing
21
+ more.
19
22
 
20
- Use MCP when a primary agent should ask installed local agent CLIs for help.
23
+ Use MCP when a primary agent needs help from installed local agent
24
+ command-line interface (CLI) programs.
21
25
 
22
26
  ## Ennodia Core
23
27
 
@@ -26,14 +30,23 @@ Core is responsible for:
26
30
  - discovering supported local harnesses
27
31
  - planning routes with caller-provided categories or keyword fallback
28
32
  - estimating preflight budgets and enforcing local caps on that estimate
33
+ - running the optional Plan Advisor against a bounded inventory, validating its
34
+ inert proposal, and requiring a separate digest-bound call before execution
29
35
  - starting child tasks through thin adapters
30
36
  - capturing status, output, failures, and timing
31
37
  - resolving compositional slices and reporting Compare readiness
32
- - comparing successful outputs when requested
38
+ - running the Judge and Result Advisor over successful outputs when Compare is
39
+ requested
40
+
41
+ The roles do not own runtime policy. Plan Advisor proposes harness, model, and
42
+ skill assignments but never executes them. Result Advisor combines Judge
43
+ findings after Compare. If Judge analysis is unavailable, its candidates-only
44
+ basis is exposed rather than hidden.
33
45
 
34
46
  ## Ennodia IO
35
47
 
36
- Ennodia IO is a local app interface. Start the HTTP server with:
48
+ Ennodia IO is a local app interface. Start the Hypertext Transfer Protocol
49
+ (HTTP) server with:
37
50
 
38
51
  ```sh
39
52
  npx -y @cherninlab/ennodia-io
@@ -1,21 +1,21 @@
1
1
  ---
2
2
  title: Second Opinions as Infrastructure
3
- description: How to use Ennodia for independent AI panels, decomposed reviews, and red-team prompts.
3
+ description: How to use Ennodia for independent artificial intelligence (AI) panels, decomposed reviews, and red-team prompts.
4
4
  ---
5
5
 
6
- Ennodia convenes independent AI panels for judgments too important for one model
7
- and shows you exactly where they disagree.
6
+ Ennodia convenes independent artificial intelligence (AI) panels for judgments
7
+ that are too important for one model. It shows you exactly where they disagree.
8
8
 
9
9
  Code review is the first strong use case, not the category. The core pattern is
10
- delegating a question to installed local agents, keeping the trace visible, and
11
- using Compare to turn multiple answers into a disagreement map and one usable
12
- result.
10
+ delegation to installed local agents with a visible trace. Compare turns
11
+ multiple answers into a disagreement map and one usable result. The Judge maps
12
+ the evidence, and the Result Advisor recommends the answer.
13
13
 
14
14
  ## Three Patterns
15
15
 
16
16
  ### Replicate
17
17
 
18
- Ask the same question of several agents, then compare the answers.
18
+ Send the same question to multiple agents, then compare the answers.
19
19
 
20
20
  ```json
21
21
  {
@@ -37,7 +37,7 @@ issue is high.
37
37
 
38
38
  ### Decompose
39
39
 
40
- Split a broad review into focused slices, then synthesize the useful completed
40
+ Split a broad review into focused slices, then combine the useful completed
41
41
  outputs.
42
42
 
43
43
  ```json
@@ -76,7 +76,7 @@ Fan out prompts that argue against a proposal from different angles.
76
76
  }
77
77
  ```
78
78
 
79
- Use this when the primary agent already has a plausible plan and you want
79
+ Use this when the primary agent has a plausible plan and you want
80
80
  independent pressure before committing.
81
81
 
82
82
  ## Staging Pattern
@@ -84,7 +84,7 @@ independent pressure before committing.
84
84
  For larger reviews, have the primary agent stage a folder containing the case
85
85
  file: relevant paths, screenshots, dataset summaries, contracts, or decision
86
86
  criteria. Then pass `cwd` to Ennodia so child agents can inspect the same local
87
- context independently. Keep staged material deliberate; do not hand every agent
87
+ context independently. Keep staged material deliberate. Do not give every agent
88
88
  an unbounded workspace when a smaller evidence bundle will do.
89
89
 
90
90
  ## Skills Carry Expertise
@@ -92,7 +92,7 @@ an unbounded workspace when a smaller evidence bundle will do.
92
92
  Use Agent Skills as reusable rubrics. A skill can define the review standard,
93
93
  expected evidence, output shape, and escalation rules. Ennodia installs bundled
94
94
  skills as harness-visible `SKILL.md` folders, then passes skill IDs through a
95
- run instead of inlining the full instructions into every prompt.
95
+ run without inlining the full instructions into every prompt.
96
96
 
97
97
  ## Examples
98
98
 
@@ -101,19 +101,19 @@ run instead of inlining the full instructions into every prompt.
101
101
  - Contract comparison: decompose obligations, termination, liability, and data
102
102
  handling into focused slices.
103
103
  - Pre-mortems: red-team a roadmap, launch, or migration plan before work starts.
104
- - Exam or rubric QA: ask several agents to grade an answer against the same
105
- staged rubric, then compare where their grading differs.
104
+ - Exam or rubric QA: send the same staged rubric to multiple agents. Compare
105
+ where their grading differs.
106
106
 
107
107
  ## Honest Constraints
108
108
 
109
- Ennodia is deliberation-class infrastructure. A run usually takes minutes, not
110
- seconds. Compare adds two serial model passes after the child agents finish, so
111
- parallel review with Compare costs roughly N child runs plus a judge and a
112
- synthesizer.
109
+ Ennodia supports careful review. A run usually takes minutes, not seconds.
110
+ Compare adds two serial model passes after the child agents finish.
111
+ Parallel review with Compare costs roughly N child runs, a Judge, and a Result
112
+ Advisor.
113
113
 
114
- The substrate is installed agent CLIs and local tools, not domain-tuned
115
- specialist models. Ennodia supports decision-making by surfacing evidence,
116
- disagreements, and uncertainty; it does not make regulated, legal, financial,
114
+ Ennodia uses installed agent CLIs and local tools. It does not use specialist
115
+ models for one domain. Ennodia supports decisions by showing evidence,
116
+ disagreements, and uncertainty. It does not make regulated, legal, financial,
117
117
  medical, or operational decisions for the user.
118
118
 
119
119
  For storage and data movement boundaries, read
@@ -1,18 +1,20 @@
1
1
  ---
2
2
  title: Quickstart
3
- description: Set up Ennodia by hand, run the first checks, and know where to go next.
3
+ description: Install Ennodia manually, perform the first checks, and find the next documentation page.
4
4
  ---
5
5
 
6
- This page is for humans setting up Ennodia by hand. If you would rather have an
7
- agent install and configure Ennodia for you, use
8
- [Installation for Agents](/docs/install/) instead.
6
+ This page gives manual installation instructions for a Model Context Protocol
7
+ (MCP) client. To use an agent for installation and configuration, see
8
+ [Installation for Agents](/docs/install/).
9
9
 
10
10
  ## Requirements
11
11
 
12
12
  - Bun `1.3.14` or newer
13
- - An MCP client that can launch a stdio server
14
- - At least one supported AI command-line tool, if you want real agent
15
- execution; see [Supported Harnesses](/docs/reference/supported-harnesses/)
13
+ - An MCP client that can launch a standard input/output (stdio) server
14
+ - At least one supported artificial intelligence (AI) command-line tool for
15
+ real agent execution
16
+
17
+ See [Supported Harnesses](/docs/reference/supported-harnesses/).
16
18
 
17
19
  ## Install from npm
18
20
 
@@ -22,15 +24,15 @@ Install the stable release from npm:
22
24
  npx -y ennodia
23
25
  ```
24
26
 
25
- Requires Bun `1.3.14` or newer. `npx` downloads Ennodia; Bun runs it. Prefer
26
- Bun directly? Use `bunx ennodia`.
27
+ Ennodia requires Bun `1.3.14` or newer. `npx` downloads Ennodia. Bun runs it.
28
+ To use Bun directly, run `bunx ennodia`.
27
29
 
28
30
  The JSR package `@cherninlab/ennodia` exposes TypeScript modules for import.
29
31
  Use the npm package for the stdio MCP executable.
30
32
 
31
33
  ## Local Checkout
32
34
 
33
- Use a checkout when you are changing Ennodia itself:
35
+ Use a checkout to modify Ennodia:
34
36
 
35
37
  ```sh
36
38
  git clone https://github.com/cherninlab/ennodia
@@ -52,7 +54,7 @@ bun run verify
52
54
  }
53
55
  ```
54
56
 
55
- For a local checkout, point at the source file instead:
57
+ For a local checkout, use the source file:
56
58
 
57
59
  ```json
58
60
  {
@@ -65,11 +67,11 @@ For a local checkout, point at the source file instead:
65
67
  }
66
68
  ```
67
69
 
68
- Replace `/absolute/path/to/ennodia` with your local repo path.
70
+ Replace `/absolute/path/to/ennodia` with your local repository path.
69
71
 
70
72
  ## First Checks
71
73
 
72
- From the repo:
74
+ From the repository:
73
75
 
74
76
  ```bash
75
77
  bun install
@@ -77,37 +79,63 @@ bun run mcp:smoke
77
79
  bun run verify
78
80
  ```
79
81
 
80
- From an MCP client, call these tools in order: `ennodia_list_harnesses`,
81
- `ennodia_estimate_budget`, `ennodia_plan`, `ennodia_run`, then
82
- `ennodia_get_run`. `ennodia_run` is the main end-to-end entrypoint — it plans
83
- the route, starts the selected task or tasks, optionally compares successful
84
- outputs, and returns a run ID. Poll `ennodia_get_run` with that ID until the
85
- run reaches `succeeded`, `failed`, or `cancelled`.
82
+ From an MCP client, call `ennodia_list_harnesses`. Then call
83
+ `ennodia_estimate_budget`. To inspect the route, call `ennodia_plan`.
84
+
85
+ Start the work with `ennodia_run`. This tool plans the route and starts the
86
+ selected tasks. It can also compare successful outputs. It returns a run
87
+ identifier (ID).
88
+
89
+ Poll `ennodia_get_run` with that ID. Stop when the status is `succeeded`,
90
+ `failed`, or `cancelled`.
91
+
92
+ Expect real runs to take minutes. Compare adds a Judge pass and a Result
93
+ Advisor pass after child agents finish.
94
+
95
+ ## Optional Team Advice
96
+
97
+ For a proposed work split, call `ennodia_start_plan_advice`. The Plan Advisor
98
+ proposes explicit harness, model, and skill assignments. It cannot execute them.
99
+
100
+ Poll `ennodia_get_plan_advice`. Stop when the status is `ready`, `consumed`,
101
+ `invalid`, `failed`, or `cancelled`.
102
+
103
+ Ennodia parses the response as strict plan data. It validates the data against
104
+ the frozen harness, model, and skill inventory.
105
+
106
+ To start a ready plan once, call `ennodia_start_advised_plan`. Pass the returned
107
+ `planDigest` as `expectedPlanDigest`. Ennodia validates the current inventory
108
+ and budget again before authorizing the plan. A mismatch stops the operation
109
+ before any worker task starts. Authorization consumes the advice, so a second
110
+ launch with the same advice fails before any worker task starts.
111
+
112
+ Compare is a separate operation after worker completion. The Judge maps the
113
+ completed answers. Then the Result Advisor recommends one answer.
86
114
 
87
- Expect real runs to take minutes. Compare adds a judge pass and a synthesizer
88
- pass after child agents finish.
115
+ If Judge analysis is not available, the Result Advisor can use only the
116
+ candidate outputs. The Compare result shows this condition.
89
117
 
90
118
  ## Next Pages
91
119
 
92
120
  - [Budgets and Limits](/docs/guides/budgets-and-limits/) explains
93
121
  `ennodia_estimate_budget` and run limits.
94
- - [Using Agent Skills](/docs/guides/agent-skills/) explains `skillIds` and
122
+ - [Agent Skills](/docs/guides/agent-skills/) explains `skillIds` and
95
123
  native `SKILL.md` installation.
96
124
  - [Supported Harnesses](/docs/reference/supported-harnesses/) lists adapter IDs
97
- and setup notes.
125
+ and installation notes.
98
126
  - [MCP Tools](/docs/reference/mcp-tools/) is the full parameter reference.
99
127
 
100
128
  ## Expected Behavior
101
129
 
102
- An Ennodia run is meant to be visible. You should be able to inspect:
130
+ An Ennodia run is visible. You can inspect:
103
131
 
104
132
  - selected harnesses
105
133
  - child task IDs
106
134
  - task status
107
- - stdout and stderr previews
135
+ - standard output (stdout) and standard error (stderr) previews
108
136
  - elapsed time and per-task timeout
109
137
  - Compare state, if Compare was used
110
138
  - final answer or explicit failure reason
111
139
 
112
- If a child tool times out or fails, Ennodia should report that state instead of
113
- hiding it.
140
+ If a child tool times out or fails, Ennodia must report that state. It must not
141
+ conceal the failure.
@@ -1,14 +1,16 @@
1
1
  ---
2
- title: Using Agent Skills
3
- description: Install bundled Ennodia skills into native harness locations and ask child agents to use them during a run.
2
+ title: Agent Skills
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
- Ennodia uses native Agent Skills. A skill is a folder containing `SKILL.md`
7
- installed where each harness already knows how to find skills.
6
+ Ennodia uses native Agent Skills. A skill is a folder that contains `SKILL.md`.
7
+ Install it where each harness can find skills.
8
8
 
9
- Ennodia does not invent a private skill format and does not inline full skill
10
- instructions into every delegated prompt. It installs or discovers the native
11
- skill folder, then passes the selected `skillIds` into the run.
9
+ Ennodia does not use a private skill format. It does not put the full skill
10
+ instructions in each delegated prompt.
11
+
12
+ Ennodia installs or discovers the native skill folder. It then passes the
13
+ selected `skillIds` into the run.
12
14
 
13
15
  ## List Available Skills
14
16
 
@@ -26,8 +28,8 @@ directories, and load warnings.
26
28
 
27
29
  ## Preview Installation
28
30
 
29
- Bundled skills default to dry-run installation so the caller can inspect planned
30
- writes before anything changes:
31
+ Bundled skills use dry-run installation by default. The caller can inspect the
32
+ planned writes before any change:
31
33
 
32
34
  ```json
33
35
  {
@@ -50,7 +52,7 @@ Review the planned paths. If they are correct, repeat with `dryRun: false`.
50
52
  {
51
53
  "tool": "ennodia_run",
52
54
  "arguments": {
53
- "prompt": "Audit these docs against the linked sources and recommend exact edits.",
55
+ "prompt": "Audit this documentation against the linked sources and recommend exact edits.",
54
56
  "mode": "parallel",
55
57
  "compare": true,
56
58
  "skillIds": ["source-grounded-audit"]
@@ -65,8 +67,8 @@ Bundled skills include:
65
67
 
66
68
  | Skill | Use it for |
67
69
  | --- | --- |
68
- | `source-grounded-audit` | Checking claims against repository files, standards, or product docs. |
69
- | `compositional-audit` | Keeping one shard of a larger review focused and easy to synthesize. |
70
+ | `source-grounded-audit` | Check claims against repository files, standards, or product documentation. |
71
+ | `compositional-audit` | Limit one shard of a large review to one clear scope. |
70
72
  | `rigorous-review` | General correctness and risk review. |
71
73
  | `release-readiness` | Public release candidate checks. |
72
74
  | `benchmark-critic` | Benchmark credibility and reproducibility review. |
@@ -80,4 +82,5 @@ Bundled skills include:
80
82
  | OpenCode | `.opencode/skills` | `~/.config/opencode/skills` |
81
83
  | Antigravity | `.agent/skills` | `~/.gemini/antigravity/skills` |
82
84
 
83
- See [MCP Tools](/docs/reference/mcp-tools/) for the exact tool parameters.
85
+ See [Model Context Protocol (MCP) Tools](/docs/reference/mcp-tools/) for the
86
+ exact tool parameters.
@@ -1,23 +1,25 @@
1
1
  ---
2
2
  title: Budgets and Limits
3
- description: How Ennodia estimates preflight input-token budgets and enforces local run limits before starting child agents.
3
+ description: How Ennodia estimates preflight input-token budgets and enforces local run limits before child agents start.
4
4
  ---
5
5
 
6
6
  Ennodia can estimate the input-token budget before a costly run starts. The
7
- estimate is a planning guardrail, not a provider invoice, and child-task
8
- estimates are lower bounds because harness system prompts, file reads, tool
9
- calls, and provider-side context are not visible before the run.
7
+ estimate is a budget limit check, not a provider invoice. Child-task estimates
8
+ are lower bounds.
10
9
 
11
- Use it before parallel work, long reviews, or any run where the user cares about
12
- cost, subscription pressure, or the number of child agents started.
10
+ Harness system prompts, file reads, tool calls, and provider-side context are
11
+ not visible before the run.
12
+
13
+ Use it before parallel work or long reviews. Also use it when the user limits
14
+ cost, subscription use, or child-task count.
13
15
 
14
16
  ## What the Estimate Includes
15
17
 
16
18
  `ennodia_estimate_budget` reports:
17
19
 
18
20
  - selected harness count
19
- - selected harness IDs
20
- - whether Compare is planned
21
+ - selected harness identifiers (IDs)
22
+ - if Compare is planned
21
23
  - prompt input estimate
22
24
  - potential Compare input from bounded candidate outputs, capped by the same
23
25
  24,000-character per-candidate truncation used in the judge prompt
@@ -27,7 +29,7 @@ cost, subscription pressure, or the number of child agents started.
27
29
  The estimate does not claim to know provider billing, output tokens, tool-call
28
30
  cost, cache behavior, harness-internal context, or private subscription quota.
29
31
 
30
- ## Estimate Before Running
32
+ ## Estimate Before a Run
31
33
 
32
34
  ```json
33
35
  {
@@ -45,8 +47,12 @@ cost, cache behavior, harness-internal context, or private subscription quota.
45
47
  }
46
48
  ```
47
49
 
48
- If the estimate is too high, reduce the selected harnesses, shorten the prompt,
49
- lower `maxOutputChars`, or run a narrower first pass.
50
+ If the estimate is too high, use one or more of these changes:
51
+
52
+ - Select fewer harnesses.
53
+ - Make the prompt shorter.
54
+ - Decrease `maxOutputChars`.
55
+ - Use a narrower first pass.
50
56
 
51
57
  ## Enforce Limits on a Run
52
58
 
@@ -68,16 +74,19 @@ The same budget object can be passed to `ennodia_run`:
68
74
  }
69
75
  ```
70
76
 
71
- Ennodia checks these local limits before starting child tasks. If the estimated
72
- input tokens or selected child-task count exceeds the cap, the run fails early
73
- instead of silently launching more model work.
77
+ Ennodia checks these local limits before child tasks start. The run fails early
78
+ if estimated input tokens or the child-task count exceed a cap. Ennodia does
79
+ not start the excess model work.
74
80
 
75
81
  ## Subscription Limits
76
82
 
77
- Subscription quota checks are intentionally conservative. Ennodia only uses
78
- supported local CLI/API surfaces. If a provider does not expose account quota
79
- through a supported surface, Ennodia reports the limit as unknown instead of
80
- scraping private account pages or inventing a number.
83
+ Subscription quota checks are conservative by design. Ennodia uses only
84
+ supported local command-line interface (CLI) and application programming
85
+ interface (API) surfaces.
86
+
87
+ If a provider does not expose account quota through a supported surface,
88
+ Ennodia reports the limit as unknown. It does not inspect private account pages
89
+ or create an unsupported value.
81
90
 
82
91
  Today every built-in harness reports subscription quota as unknown because no
83
92
  supported local surface exposes a reliable account limit. An older fail-closed
@@ -86,10 +95,11 @@ supported quota surface.
86
95
 
87
96
  ## Practical Defaults
88
97
 
89
- - For a first docs or code audit, start with two or three harnesses.
98
+ - For a first documentation or code audit, start with two or three harnesses.
90
99
  - Use `maxOutputChars` to keep Compare input bounded.
91
100
  - Keep `maxChildTasks` set when the prompt may route to many adapters.
92
101
  - Treat unknown subscription-limit status as a transparency signal, not proof
93
102
  that a run is cheap or expensive.
94
103
 
95
- See the exact tool schema in [MCP Tools](/docs/reference/mcp-tools/).
104
+ See the exact tool schema in
105
+ [Model Context Protocol (MCP) Tools](/docs/reference/mcp-tools/).