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
@@ -3,26 +3,28 @@ title: Ennodia vs ChatHub
3
3
  description: How Ennodia differs from ChatHub and other side-by-side chatbot comparison tools.
4
4
  ---
5
5
 
6
- [ChatHub](https://doc.chathub.gg/introduction) is a human-facing app for using
7
- multiple AI chatbots side by side. Its core experience is chatbot comparison
8
- through a web app or browser extension.
6
+ [ChatHub](https://doc.chathub.gg/introduction) is an app for people who use
7
+ multiple artificial intelligence (AI) chatbots side by side. It provides
8
+ web, browser extension, desktop, and mobile access.
9
9
 
10
- Ennodia is not a chat UI. It is meant to be called by an AI agent while that
11
- agent is already working.
10
+ Ennodia is not a chat user interface (UI). An AI agent calls Ennodia during a
11
+ task.
12
12
 
13
13
  ## Choose ChatHub When
14
14
 
15
15
  - A human wants to compare chatbot answers visually.
16
- - The main workflow is interactive chat, not local MCP tool orchestration.
16
+ - The main workflow is interactive chat, not local Model Context Protocol (MCP)
17
+ tool orchestration.
17
18
  - You want a polished multi-chat interface across hosted chatbots.
18
19
 
19
20
  ## Choose Ennodia When
20
21
 
21
- - A primary agent needs help during a task and can call MCP tools.
22
- - You want local agent CLIs to run as child tasks.
23
- - You want task state, stdout, stderr, failures, and Compare state captured.
24
- - You want the final answer synthesized for the user instead of asking the user
25
- to manually grade a side-by-side wall of responses.
22
+ - A primary agent needs help and can call MCP tools.
23
+ - You want local agent command-line interfaces (CLIs) to run as child tasks.
24
+ - You want task state, standard output, standard error, failures, and Compare
25
+ state captured.
26
+ - You want a Judge to map the differences. You want a Result Advisor to
27
+ recommend an answer. The user does not need to grade all responses.
26
28
 
27
29
  ## Key Difference
28
30
 
@@ -31,6 +33,5 @@ work to other local agents and inspect what happened.
31
33
 
32
34
  ## Common Mistake
33
35
 
34
- Do not pitch Ennodia as "ChatHub for agents" unless you immediately explain the
35
- missing piece: Ennodia has task orchestration and traces, not a human chat
36
- comparison interface.
36
+ Do not call Ennodia "ChatHub for agents." Explain that Ennodia provides task
37
+ orchestration and traces. It does not provide a human chat comparison interface.
@@ -3,25 +3,30 @@ title: Comparisons
3
3
  description: How Ennodia compares to model routers, chat comparison tools, agent frameworks, ensembles, model merging, and adjacent multi-agent ideas.
4
4
  ---
5
5
 
6
- Ennodia is a local capability layer for installed agent CLIs. Through MCP, it
7
- lets a primary agent ask those local agents for help, then inspect child task
8
- status, raw outputs, failures, budget assumptions, and model-led Compare
9
- results. Through experimental IO, apps can discover local provider options and
10
- send a small OpenAI-compatible chat-completions subset to those same agents.
6
+ Ennodia is a local capability layer for installed agent command-line interfaces
7
+ (CLIs). Through Model Context Protocol (MCP), a primary agent can request help
8
+ from those local agents.
11
9
 
12
- This section exists because several adjacent tools sound similar from far away.
13
- They are usually optimized for different jobs.
10
+ The primary agent can inspect child task status, raw outputs, failures, budget
11
+ assumptions, and model-led Compare results.
12
+
13
+ Through experimental Ennodia IO, apps can discover local provider options. Apps
14
+ can send a small OpenAI-compatible chat-completions application programming
15
+ interface (API) subset to the same agents.
16
+
17
+ Some adjacent tools have similar descriptions. They usually have different
18
+ purposes.
14
19
 
15
20
  ## Choose the Right Page
16
21
 
17
- | If you are asking... | Read |
22
+ | Question | Page |
18
23
  | --- | --- |
19
24
  | Is Ennodia a hosted multi-model API? | <span class="agent-logo agent-logo--openrouter" aria-hidden="true"></span>[Ennodia vs OpenRouter](./openrouter/) |
20
- | Is Ennodia a side-by-side chatbot UI? | [Ennodia vs ChatHub](./chathub/) |
25
+ | Is Ennodia a side-by-side chatbot user interface (UI)? | [Ennodia vs ChatHub](./chathub/) |
21
26
  | Is Ennodia a graph runtime for agents? | <span class="agent-logo agent-logo--langgraph" aria-hidden="true"></span>[Ennodia vs LangGraph](./langgraph/) |
22
27
  | Is Ennodia like AutoGen? | [Ennodia vs AutoGen](./autogen/) |
23
28
  | Is Ennodia a general-purpose agent framework? | [Ennodia vs Agent Frameworks](./agent-frameworks/) |
24
- | Is Ennodia an ensemble or Mixture-of-Agents system? | [Ennodia vs MoA and Ensembles](./mixture-of-agents/) |
29
+ | Is Ennodia an ensemble or Mixture-of-Agents system? | [Ennodia vs Mixture-of-Agents and Ensembles](./mixture-of-agents/) |
25
30
  | Is Ennodia model merging? | [Ennodia vs Model Merging](./model-merging/) |
26
31
  | What is the broader pattern? | [Second Opinions as Infrastructure](/docs/concepts/second-opinions/) |
27
32
 
@@ -30,13 +35,16 @@ They are usually optimized for different jobs.
30
35
  Ennodia is:
31
36
 
32
37
  - a local MCP server
33
- - an experimental local IO surface for app-facing provider options
34
- - a way for a primary agent to ask other installed local agents for help
38
+ - an experimental local IO surface for provider options in apps
39
+ - a way for a primary agent to request help from other installed local agents
35
40
  - a runner for real local agent CLIs, not only raw model APIs
36
- - a visible trace of child task IDs, status, stdout, stderr, failures, final
37
- answers, and terminal run history
41
+ - a visible trace of child task identifiers (IDs), status, standard output,
42
+ standard error, failures, final answers, and terminal run history
38
43
  - a preflight budget estimate and local limit check before expensive runs
39
- - a model-led Compare workflow over successful outputs
44
+ - an optional Plan Advisor that proposes a validated, inert work plan and never
45
+ executes it
46
+ - a model-led Compare workflow where the Judge maps successful outputs and the
47
+ Result Advisor recommends an answer
40
48
  - a native Agent Skills bridge for harnesses that support `SKILL.md` folders
41
49
 
42
50
  ## What Ennodia Is Not
@@ -52,8 +60,8 @@ Ennodia is not:
52
60
  - a replacement for a primary agent
53
61
  - proof that multi-agent review improves every task
54
62
 
55
- Durable model and skill preference memory is roadmap work. Terminal run history
56
- is persisted locally by default; in-progress run and task state remains
63
+ Durable model and skill preference memory is roadmap work. By default, Ennodia
64
+ stores terminal run history locally. In-progress run and task state remains
57
65
  process-local.
58
66
 
59
67
  ## Other Related Work
@@ -63,9 +71,9 @@ Some related ideas do not need a full page yet:
63
71
  | Category | Examples | How Ennodia differs |
64
72
  | --- | --- | --- |
65
73
  | Model councils | [karpathy/llm-council](https://github.com/karpathy/llm-council) | Ennodia adapts council-like review to local agent CLIs, MCP task state, failures, and traces. |
66
- | Evaluator-optimizer loops | Generator/evaluator workflows | Ennodia can support review loops, but its core unit is delegation to installed local agents. |
67
- | Consensus and voting | Majority, quorum, or weighted-vote schemes | Ennodia Compare judges and synthesizes; it does not implement formal voting rules. |
68
- | Inference optimization proxies | [optillm](https://github.com/algorithmicsuperintelligence/optillm) | Ennodia runs installed local agents and exposes a small local IO subset; it is not a hosted inference optimization proxy. |
74
+ | Evaluator-optimizer loops | Generator/evaluator workflows | Ennodia can support review loops, but its principal operation delegates work to installed local agents. |
75
+ | Consensus and voting | Majority, quorum, or weighted-vote schemes | Ennodia Compare uses a Judge and Result Advisor. It does not implement formal voting rules. |
76
+ | Inference optimization proxies | [optillm](https://github.com/algorithmicsuperintelligence/optillm) | Ennodia runs installed local agents and exposes a small local IO subset. It is not a hosted inference optimization proxy. |
69
77
 
70
- Use another tool when that tool's job is the job you need. Use Ennodia when the
71
- primary agent is already working and needs visible help from other local agents.
78
+ Use another tool if its purpose matches your task. Use Ennodia when a primary
79
+ agent needs visible help from other local agents.
@@ -4,33 +4,40 @@ description: How Ennodia differs from LangGraph's programmable graph runtime for
4
4
  ---
5
5
 
6
6
  [LangGraph](https://docs.langchain.com/oss/python/langgraph/overview) is a
7
- low-level orchestration framework and runtime for building, managing, and
8
- deploying long-running, stateful agents.
7
+ low-level orchestration framework and runtime. Developers use it to build,
8
+ manage, and deploy long-running, stateful agents.
9
9
 
10
- Ennodia is intentionally narrower. It does not ask you to define a custom graph,
10
+ Ennodia is intentionally narrower. It does not require a custom graph,
11
11
  state machine, durable agent state, or application runtime.
12
12
 
13
13
  ## Choose LangGraph When
14
14
 
15
- - You are building an agentic application.
15
+ - You create an agentic application.
16
16
  - You need custom graph nodes, edges, state, persistence, or deployment control.
17
17
  - You want to model a workflow as programmable application infrastructure.
18
18
  - You own the application code and want a framework embedded in that code.
19
19
 
20
20
  ## Choose Ennodia When
21
21
 
22
- - You already have a primary agent working in an MCP client.
23
- - You want that agent to ask other installed local agent CLIs for help.
24
- - You want visible child runs, failures, ETA, and final synthesis.
25
- - You want a small MCP surface instead of a full application framework.
22
+ - You have a primary agent in a Model Context Protocol (MCP) client.
23
+ - You want that agent to request help from other installed local agent
24
+ command-line interfaces (CLIs).
25
+ - You want visible child runs, failures, estimated completion time, Judge
26
+ findings, and a Result Advisor answer.
27
+ - You want optional team advice. The advice remains inert until an explicit,
28
+ validated start request.
29
+ - You want a small MCP surface without a full application framework.
26
30
 
27
31
  ## Key Difference
28
32
 
29
- LangGraph is for building agent systems. Ennodia is for delegating work from one
30
- agent to other local agents during a task.
33
+ LangGraph helps developers create agent systems. Ennodia lets one agent delegate
34
+ work to other local agents during a task.
35
+
36
+ Plan Advisor does not change this boundary: it can propose explicit worker
37
+ assignments, but it cannot define arbitrary graph behavior or execute the plan.
31
38
 
32
39
  ## Common Mistake
33
40
 
34
41
  Do not treat Ennodia as a lighter LangGraph runtime. Ennodia does not replace a
35
- programmable graph framework; it gives an existing agent a simple way to request
36
- outside review or assistance.
42
+ programmable graph framework. It gives an active agent a simple way to request
43
+ an independent review or other assistance.
@@ -1,37 +1,40 @@
1
1
  ---
2
- title: Ennodia vs MoA and Ensembles
3
- description: How Ennodia differs from Mixture-of-Agents papers, LLM ensembles, majority voting, and benchmark-oriented aggregation.
2
+ title: Ennodia vs Mixture-of-Agents and Ensembles
3
+ description: How Ennodia differs from Mixture-of-Agents papers, large language model ensembles, majority voting, and benchmark-oriented aggregation.
4
4
  ---
5
5
 
6
- [Mixture-of-Agents](https://arxiv.org/abs/2406.04692) explores layered LLM
7
- aggregation, where models use outputs from previous layers to improve the final
8
- answer. Other ensemble work studies majority rules, voting, or task-specific
9
- aggregation over multiple model outputs.
6
+ [Mixture-of-Agents](https://arxiv.org/abs/2406.04692) explores layered large
7
+ language model aggregation. Models use outputs from previous layers to
8
+ improve the final answer. Other ensemble work studies majority rules, voting,
9
+ or task-specific aggregation over multiple model outputs.
10
10
 
11
- Ennodia is adjacent, but it is not primarily a benchmark ensemble or formal
12
- voting engine.
11
+ Ennodia uses some related ideas, but it is not primarily a benchmark ensemble
12
+ or formal voting engine.
13
13
 
14
- ## Choose MoA or an Ensemble When
14
+ ## Choose Mixture-of-Agents or an Ensemble When
15
15
 
16
- - You are designing an inference strategy.
16
+ - You define an inference strategy.
17
17
  - You want a repeatable aggregation method over model outputs.
18
18
  - You need benchmarked quality gains for a specific task family.
19
19
  - You want majority vote, quorum, weighting, or another formal decision rule.
20
20
 
21
21
  ## Choose Ennodia When
22
22
 
23
- - You want to run real local agent CLIs, not just raw model calls.
23
+ - You want to run real local agent command-line interfaces (CLIs), not only raw
24
+ model calls.
24
25
  - You care about subprocess status, logs, failures, timeouts, and cancellation.
25
- - You want an agent to inspect candidate work and synthesize a result.
26
+ - You want a Judge to inspect candidate work and a Result Advisor to recommend
27
+ a result.
26
28
  - You need practical local delegation more than a research-grade ensemble.
27
29
 
28
30
  ## Key Difference
29
31
 
30
- MoA and ensemble methods focus on output aggregation. Ennodia focuses on visible
31
- local agent orchestration, then uses model-led Compare when several answers are
32
- available.
32
+ Mixture-of-Agents and ensemble methods focus on output aggregation. Ennodia
33
+ focuses on visible local agent orchestration. It then uses model-led Compare
34
+ when multiple answers are available.
33
35
 
34
36
  ## Common Mistake
35
37
 
36
- Do not describe Ennodia Compare as consensus. Compare judges and synthesizes
37
- outputs. It does not implement voting, quorum, or weighting rules.
38
+ Do not describe Ennodia Compare as consensus. The Judge maps the candidate
39
+ outputs, and the Result Advisor recommends an answer. It does not implement
40
+ voting, quorum, or weighting rules.
@@ -6,22 +6,24 @@ description: How Ennodia differs from model merging tools such as mergekit and o
6
6
  Model merging combines model weights or checkpoints into a new model artifact.
7
7
  [mergekit](https://github.com/arcee-ai/mergekit) is a toolkit for merging
8
8
  pretrained language models, and the [MergeKit paper](https://aclanthology.org/2024.emnlp-industry.36/)
9
- describes it as tooling for model-checkpoint merging strategies.
9
+ describes it as tools for model-checkpoint merging strategies.
10
10
 
11
- Ennodia does not touch model weights.
11
+ Ennodia does not change model weights.
12
12
 
13
13
  ## Choose Model Merging When
14
14
 
15
15
  - You control compatible model weights.
16
16
  - You want one merged model artifact.
17
17
  - You want changes to happen before inference.
18
- - You are evaluating merge recipes, checkpoints, or open-weight model behavior.
18
+ - You evaluate merge recipes, checkpoints, or open-weight model behavior.
19
19
 
20
20
  ## Choose Ennodia When
21
21
 
22
22
  - You want separate agents to run at task time.
23
- - You want to keep provider subscriptions and installed CLIs separate.
24
- - You want traces, child task IDs, failure states, and Compare output.
23
+ - You want to keep provider subscriptions and installed command-line interfaces
24
+ (CLIs) separate.
25
+ - You want traces, child task identifiers (IDs), failure states, and Compare
26
+ output.
25
27
  - You do not want to produce or host a new model artifact.
26
28
 
27
29
  ## Key Difference
@@ -1,34 +1,44 @@
1
1
  ---
2
2
  title: Ennodia vs OpenRouter
3
- description: How Ennodia differs from OpenRouter and other hosted multi-model API routers.
3
+ description: How Ennodia differs from OpenRouter and other hosted multi-model application programming interface (API) routers.
4
4
  ---
5
5
 
6
- [OpenRouter](https://openrouter.ai/docs/quickstart) provides a unified hosted
7
- API for accessing many AI models through one endpoint. Its routing docs cover
8
- provider selection, model fallback, pricing, and other hosted API concerns.
6
+ [OpenRouter](https://openrouter.ai/docs/quickstart) provides one hosted
7
+ application programming interface (API). It gives access to many artificial
8
+ intelligence (AI) models through one endpoint.
9
9
 
10
- Ennodia is not that. Current Ennodia releases do not sell hosted model access or
11
- abstract provider billing.
10
+ Its routing documentation covers provider selection, model fallback, pricing,
11
+ and other hosted API concerns.
12
12
 
13
- Ennodia IO exposes a small local HTTP interface for app-facing calls. It is
14
- still different from OpenRouter: Ennodia delegates to installed local agents
15
- rather than sell hosted model access or proxy provider billing.
13
+ Ennodia is not a hosted multi-model API. Current Ennodia releases do not sell
14
+ hosted model access or abstract provider billing.
15
+
16
+ Ennodia IO exposes a small local Hypertext Transfer Protocol (HTTP) interface
17
+ for app calls. It is still different from OpenRouter. Ennodia delegates to
18
+ installed local agents.
19
+
20
+ Ennodia does not sell hosted model access or proxy provider billing.
16
21
 
17
22
  ## Choose OpenRouter When
18
23
 
19
24
  - You want one hosted API for many models.
20
25
  - You want provider routing, fallback, and pricing controls behind one endpoint.
21
- - Your application code needs direct model responses, not local agent CLI runs.
22
- - You want to centralize hosted model access outside a local desktop agent setup.
26
+ - Your application code needs direct model responses, not local agent
27
+ command-line interface (CLI) runs.
28
+ - You want centralized hosted model access outside a local desktop agent installation.
23
29
 
24
30
  ## Choose Ennodia When
25
31
 
26
- - Your primary agent is already working in an MCP client.
27
- - You want that agent to ask installed local agent CLIs for help.
28
- - You want child task IDs, output previews, failures, ETA, and run history.
29
- - You want budget estimates and local limits before launching child tasks.
30
- - You want a model to compare agent answers instead of manually reading every
31
- response yourself.
32
+ - Your primary agent has a task in a Model Context Protocol (MCP) client.
33
+ - You want that agent to request help from installed local agent command-line
34
+ interfaces (CLIs).
35
+ - You want child task identifiers (IDs), output previews, failures, estimated
36
+ completion time, and run history.
37
+ - You want budget estimates and local limits before child tasks start.
38
+ - You want a Judge to map agent answers and a Result Advisor to recommend an
39
+ answer. You do not want to read each response.
40
+ - You want an optional Plan Advisor to suggest a bounded local team without
41
+ automatic execution. Plan Advisor cannot start the proposal.
32
42
  - You want a local HTTP bridge over those same agent runs.
33
43
 
34
44
  ## Key Difference
@@ -36,12 +46,10 @@ rather than sell hosted model access or proxy provider billing.
36
46
  OpenRouter routes hosted model API calls. Ennodia coordinates local agent
37
47
  subprocesses and can expose that local orchestration through MCP or IO.
38
48
 
39
- That means OpenRouter is closer to infrastructure for application developers,
40
- while Ennodia is closer to a local collaboration tool for agents already inside
41
- your coding or research workflow.
49
+ OpenRouter provides infrastructure for application developers. Ennodia is a
50
+ local collaboration tool for agents in a code or research workflow.
42
51
 
43
52
  ## Common Mistake
44
53
 
45
54
  Do not describe Ennodia as a cheaper OpenRouter or an OpenRouter replacement.
46
- It solves a different problem: visible delegation to local agents you already
47
- have installed.
55
+ It solves a different problem: visible delegation to installed local agents.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  title: Compositional Audits
3
- description: Split large reviews into focused slices, route them to local agents, and synthesize the results without losing traceability.
3
+ description: Split large reviews into focused slices, route them to local agents, and combine the results without losing traceability.
4
4
  ---
5
5
 
6
6
  Large reviews work better when each agent gets a small, explicit slice. Ennodia
@@ -10,7 +10,7 @@ consistent rubric.
10
10
 
11
11
  ## When To Use It
12
12
 
13
- Use a compositional audit when the request mixes several risk types, such as:
13
+ Use a compositional audit when the request mixes multiple risk types, such as:
14
14
 
15
15
  - product positioning and implementation architecture
16
16
  - website copy and protocol compatibility
@@ -18,17 +18,17 @@ Use a compositional audit when the request mixes several risk types, such as:
18
18
  - release readiness and future roadmap
19
19
 
20
20
  One broad prompt can make every reviewer repeat the same surface-level answer.
21
- Slices make each response easier to verify and easier to synthesize.
21
+ Slices make each response easier to verify and combine.
22
22
 
23
23
  ## Good Slice Shape
24
24
 
25
25
  A useful slice includes:
26
26
 
27
27
  - one narrow question
28
- - the files or sources the reviewer should inspect
28
+ - the files or sources for the reviewer to inspect
29
29
  - the harness or model to use, when that matters
30
30
  - the maximum answer length
31
- - the output shape expected by the synthesis pass
31
+ - the output shape expected by the Result Advisor pass
32
32
 
33
33
  Example slice prompt:
34
34
 
@@ -71,7 +71,7 @@ Estimate the slice fan-out before starting child agents:
71
71
  {
72
72
  "tool": "ennodia_estimate_compositional_budget",
73
73
  "arguments": {
74
- "prompt": "Synthesize these audit shards into the smallest safe next action.",
74
+ "prompt": "Combine these audit shards into the smallest safe next action.",
75
75
  "slices": [
76
76
  {
77
77
  "id": "docs-truth",
@@ -100,7 +100,7 @@ Then start the focused tasks:
100
100
  {
101
101
  "tool": "ennodia_start_compositional",
102
102
  "arguments": {
103
- "prompt": "Synthesize these audit shards into the smallest safe next action.",
103
+ "prompt": "Combine these audit shards into the smallest safe next action.",
104
104
  "slices": [
105
105
  {
106
106
  "id": "docs-truth",
@@ -130,7 +130,7 @@ Each slice starts one task. Poll the returned task IDs with
130
130
  {
131
131
  "tool": "ennodia_get_compositional_status",
132
132
  "arguments": {
133
- "prompt": "Synthesize these compositional audit shards into the smallest safe next action. Preserve disagreements and ignore non-signal shards.",
133
+ "prompt": "Combine these compositional audit shards into the smallest safe next action. Preserve disagreements and ignore non-signal shards.",
134
134
  "taskIds": ["task-id-1", "task-id-2", "task-id-3"]
135
135
  }
136
136
  }
@@ -143,7 +143,7 @@ When `compareReady` is true, pass the returned `readyTaskIds` to
143
143
  {
144
144
  "tool": "ennodia_start_compare",
145
145
  "arguments": {
146
- "prompt": "Synthesize these compositional audit shards into the smallest safe next action. Preserve disagreements and ignore non-signal shards.",
146
+ "prompt": "Combine these compositional audit shards into the smallest safe next action. Preserve disagreements and ignore non-signal shards.",
147
147
  "taskIds": ["task-id-1", "task-id-2", "task-id-3"],
148
148
  "maxOutputChars": 12000
149
149
  }
@@ -155,13 +155,16 @@ When `compareReady` is true, pass the returned `readyTaskIds` to
155
155
  - Do not send the entire plan to every shard if the goal is faster, deeper review.
156
156
  - Do not mix unrelated evidence in one slice.
157
157
  - Do not treat failed, empty, or access-limited shard output as a normal review.
158
- - Do not claim that a synthesis is consensus when the shards disagree.
158
+ - Do not claim consensus when the slices disagree.
159
159
 
160
160
  ## Current Boundary
161
161
 
162
162
  `ennodia_estimate_compositional_budget` resolves and budgets slices without
163
163
  starting child agents. `ennodia_start_compositional` starts and budgets the shard
164
164
  tasks. `ennodia_get_compositional_status` groups shard task states and identifies
165
- Compare-ready outputs. Synthesis stays explicit through `ennodia_start_compare`
166
- so long-running shard status, failed shards, and the final Compare step remain
167
- visible to the primary agent.
165
+ Compare-ready outputs. The final recommendation stays explicit through
166
+ `ennodia_start_compare`. This keeps task status, failed slices, and the final
167
+ Compare step visible to the primary agent.
168
+
169
+ During Compare, the Judge maps agreements and conflicts. The Result Advisor then
170
+ recommends an answer.
@@ -10,20 +10,36 @@ configuration, subscriptions, and policies.
10
10
 
11
11
  ## What Ennodia Stores
12
12
 
13
- Live process state is held in memory while the server runs: run status, task
14
- IDs, command summaries, stdout/stderr captures, failures, timing, budget
15
- estimates, Compare analysis, and final answers.
13
+ Live process state is held in memory while the server runs. It includes run
14
+ status, task IDs, command summaries, stdout/stderr captures, failures, timing,
15
+ and budget estimates. It also includes Plan Advisor proposals and validation
16
+ state, Compare analysis, and final answers.
17
+
18
+ When `isolateCwd` is enabled, Ennodia copies the requested working directory
19
+ to an ephemeral operating-system temporary directory so concurrent workers do
20
+ not overwrite one another. The copy excludes `.git` and `node_modules`, but it
21
+ can include other ignored files and local secrets present in the working
22
+ directory. Ennodia deletes this scratch copy after the task becomes terminal
23
+ and retries cleanup during task pruning and graceful shutdown. The task's
24
+ reported `cwd` remains an execution trace, not a persistent artifact path.
25
+
26
+ After excluding `.git` and `node_modules` by name, isolation rejects any
27
+ symbolic link in the remaining tree before spawning the task. This fail-closed
28
+ rule prevents an isolated worker from following an absolute or parent-relative
29
+ link back outside its scratch directory.
30
+ An abrupt process or machine termination can still leave operating-system
31
+ temporary files behind.
16
32
 
17
33
  Terminal run history is stored under `~/.ennodia/history/runs.jsonl` by default.
18
- Each snapshot contains the terminal run view (final answer capped at 80,000
19
- characters), task views with output capped at 20,000 characters per stream and
20
- the 50 most recent events, and Compare analysis/synthesis when Compare ran. It
21
- does not persist environment variables, provider credentials, or raw process
22
- environments.
34
+ Each snapshot contains the terminal run view and bounded task views. The final
35
+ answer is capped at 80,000 characters. Each task stream is capped at 20,000
36
+ characters. Each snapshot keeps the 50 most recent events and Judge/Result
37
+ Advisor output when Compare ran. It does not persist Plan Advisor requests,
38
+ environment variables, provider credentials, or raw process environments.
23
39
 
24
- History writes are append-only with periodic compaction to the most recent 500
25
- runs. An interrupted write can lose at most the snapshot being written, never
26
- previously recorded history.
40
+ History writes use an append-only hot path. Periodic compaction keeps the most
41
+ recent 500 runs. An interrupted append can lose its current snapshot.
42
+ A concurrent append in the short compaction window can also be lost.
27
43
 
28
44
  Set `ENNODIA_HISTORY=0` to disable durable history. Set
29
45
  `ENNODIA_HISTORY_DIR=/path/to/dir` to move the history file.
@@ -48,7 +64,7 @@ model text and environment metadata.
48
64
 
49
65
  ## Practical Guidance
50
66
 
51
- Use Ennodia for work you are already willing to send to the selected local agent
52
- CLIs. Use `cwd` deliberately, prefer short staged case files over broad prompts,
53
- and inspect `ennodia_list_harnesses` before sensitive work so the active local
54
- tools are clear.
67
+ Use Ennodia for work that you are willing to send to the selected local agent
68
+ CLIs. Use `cwd` deliberately. Prefer short staged case files over broad prompts.
69
+ Inspect `ennodia_list_harnesses` before sensitive work so the active local tools
70
+ are clear.