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.
- package/CONTRIBUTING.md +60 -36
- package/README.md +74 -58
- package/bench/README.md +7 -5
- package/bench/bug-recall/run.ts +12 -4
- package/bin/ennodia +23 -2
- package/docs/assets/agents/mcp.svg +1 -1
- package/docs/assets/orchestration-pipeline.svg +4 -3
- package/docs/comparisons/agent-frameworks.md +15 -10
- package/docs/comparisons/autogen.md +20 -15
- package/docs/comparisons/chathub.md +15 -14
- package/docs/comparisons/index.md +30 -22
- package/docs/comparisons/langgraph.md +19 -12
- package/docs/comparisons/mixture-of-agents.md +20 -17
- package/docs/comparisons/model-merging.md +7 -5
- package/docs/comparisons/openrouter.md +30 -22
- package/docs/concepts/compositional-audits.md +16 -13
- package/docs/concepts/data-governance.md +31 -15
- package/docs/concepts/how-ennodia-works.md +48 -22
- package/docs/concepts/interfaces-and-core.md +19 -6
- package/docs/concepts/second-opinions.md +20 -20
- package/docs/getting-started.md +55 -27
- package/docs/guides/agent-skills.md +16 -13
- package/docs/guides/budgets-and-limits.md +30 -20
- package/docs/guides/running-better-audits.md +50 -44
- package/docs/index.md +60 -37
- package/docs/install.md +41 -32
- package/docs/reference/benchmarks.md +6 -4
- package/docs/reference/controlled-english.md +130 -0
- package/docs/reference/ennodia-io.md +28 -22
- package/docs/reference/mcp-tools.md +244 -87
- package/docs/reference/supported-harnesses.md +9 -9
- package/package.json +7 -5
- package/src/advisor.ts +685 -0
- package/src/budget.ts +25 -6
- package/src/cli.ts +1 -1
- package/src/compare.ts +248 -52
- package/src/compositional.ts +18 -0
- package/src/core.ts +547 -16
- package/src/harnesses.ts +33 -2
- package/src/index.ts +38 -0
- package/src/plan-advice.ts +601 -0
- package/src/runs.ts +74 -9
- package/src/server.ts +312 -46
- package/src/skills.ts +131 -11
- package/src/tasks.ts +192 -22
- 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
|
|
7
|
-
multiple AI chatbots side by side.
|
|
8
|
-
|
|
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.
|
|
11
|
-
|
|
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
|
|
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
|
|
22
|
-
- You want local agent CLIs to run as child tasks.
|
|
23
|
-
- You want task state,
|
|
24
|
-
|
|
25
|
-
|
|
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
|
|
35
|
-
|
|
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
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
13
|
-
|
|
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
|
-
|
|
|
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
|
|
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
|
|
34
|
-
- a way for a primary agent to
|
|
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,
|
|
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
|
|
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.
|
|
56
|
-
|
|
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
|
|
67
|
-
| Consensus and voting | Majority, quorum, or weighted-vote schemes | Ennodia Compare
|
|
68
|
-
| Inference optimization proxies | [optillm](https://github.com/algorithmicsuperintelligence/optillm) | Ennodia runs installed local agents and exposes a small local IO subset
|
|
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
|
|
71
|
-
|
|
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
|
|
8
|
-
|
|
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
|
|
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
|
|
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
|
|
23
|
-
- You want that agent to
|
|
24
|
-
-
|
|
25
|
-
- You want
|
|
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
|
|
30
|
-
|
|
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
|
|
36
|
-
|
|
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
|
|
3
|
-
description: How Ennodia differs from Mixture-of-Agents papers,
|
|
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
|
|
7
|
-
aggregation
|
|
8
|
-
answer. Other ensemble work studies majority rules, voting,
|
|
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
|
|
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
|
|
14
|
+
## Choose Mixture-of-Agents or an Ensemble When
|
|
15
15
|
|
|
16
|
-
- You
|
|
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
|
|
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
|
|
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
|
-
|
|
31
|
-
local agent orchestration
|
|
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.
|
|
37
|
-
outputs. It does not implement
|
|
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
|
|
9
|
+
describes it as tools for model-checkpoint merging strategies.
|
|
10
10
|
|
|
11
|
-
Ennodia does not
|
|
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
|
|
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
|
|
24
|
-
|
|
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
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
11
|
-
|
|
10
|
+
Its routing documentation covers provider selection, model fallback, pricing,
|
|
11
|
+
and other hosted API concerns.
|
|
12
12
|
|
|
13
|
-
Ennodia
|
|
14
|
-
|
|
15
|
-
|
|
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
|
|
22
|
-
-
|
|
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
|
|
27
|
-
- You want that agent to
|
|
28
|
-
|
|
29
|
-
- You want
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
|
|
40
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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
|
|
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.
|
|
166
|
-
|
|
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
|
|
14
|
-
IDs, command summaries, stdout/stderr captures, failures, timing,
|
|
15
|
-
estimates
|
|
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
|
|
19
|
-
|
|
20
|
-
the 50 most recent events
|
|
21
|
-
does not persist
|
|
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
|
|
25
|
-
runs. An interrupted
|
|
26
|
-
|
|
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
|
|
52
|
-
CLIs. Use `cwd` deliberately
|
|
53
|
-
|
|
54
|
-
|
|
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.
|