@hilbras/omninode 2.0.0-alpha.17 → 2.0.0-alpha.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  [![npm downloads](https://img.shields.io/npm/dm/@hilbras/omninode)](https://www.npmjs.com/package/@hilbras/omninode)
6
6
  [![Node.js support](https://img.shields.io/node/v/@hilbras/omninode)](https://www.npmjs.com/package/@hilbras/omninode)
7
7
  [![License: MIT](https://img.shields.io/github/license/Hilbras/OmniNode)](LICENSE)
8
- [![Roadmap phase](https://img.shields.io/badge/phase-0_%2F_11-Foundation-8A2BE2)](docs/DEVELOPMENT_PLAN.md)
8
+ [![v2 progress](https://img.shields.io/badge/v2-19%20%2F%2024%20phases-8A2BE2)](docs/ROADMAP_V2.md)
9
9
 
10
10
  **OmniNode** is a provider-agnostic multi-AI orchestration platform. It coordinates
11
11
  CLI-based AI agents, AI providers, persistent memory, roles, reports and planning
@@ -18,404 +18,170 @@ existing intelligence; it does not try to become another model.
18
18
 
19
19
  ## Status
20
20
 
21
- **v2.0.0-alpha.17 — v2 Phase 17: Testing Expansion**
22
- (the reliability & interoperability line: architecture → execution →
23
- protocol → adapters → pipelines → providers → OmniHilbras → memory → reports) (the v2
24
- roadmap is [docs/ROADMAP_V2.md](docs/ROADMAP_V2.md); the v1 plan is complete:
25
- the
26
- full loop from §28 runs in one command —
27
- `User → project context → memory → research agents → reports → aggregation →
28
- planner → plan → execution → result` — with audit logging, error recovery and
29
- production hardening (see [docs/DEVELOPMENT_PLAN.md](docs/DEVELOPMENT_PLAN.md)
30
- for the plan and [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for the design).
31
-
32
- ### What's new in v2 (so far)
33
-
34
- - **Phase 17 — Testing Expansion**: an explicit, auditable **failure
35
- matrix** covering every scenario the roadmap lists — provider
36
- 429/500/401, model unavailable, network loss, malformed gateway
37
- responses, agent crash/timeout/missing executable, malformed JSONL,
38
- huge output, corrupted persistence, duplicate execution, partial
39
- pipeline failure, Remembera/OmniHilbras unavailable — plus duplicate
40
- configuration names now rejected instead of silently shadowing, and
41
- protocol diagnostics surfaced on task results. Details:
42
- [TESTING.md](docs/TESTING.md).
43
- - **Phase 16 — Configuration v2**: explicit precedence (CLI → env →
44
- project file → user file → profile overlay → defaults), named
45
- **profiles** (`development`/`production`/`testing`), `OMNINODE_*`
46
- environment overrides, and actionable validation diagnostics
47
- ("Provider 'deepseek': API key reference is missing"). `config
48
- validate` now reports which sources and defaults produced the
49
- effective configuration. Details: [CONFIGURATION.md](docs/CONFIGURATION.md).
50
- - **Phase 15 — CLI v2**: documented **exit codes** (0 success, 2 invalid
51
- input, 3 config, 4 provider, 5 agent, 6 timeout, 7 cancelled, 8 not
52
- found, 9 not implemented), a `config` group (`show` / `path` /
53
- `validate`, never printing secret values), `pipeline create`, a real
54
- `provider remove`, `agent run`, the `model` alias for `models`, and
55
- `--json` output across the list and inspect commands. Guide:
56
- [CLI.md](docs/CLI.md).
57
- - **Phase 14 — Audit & Observability**: every audit event now carries
58
- correlation ids (`taskId`, `pipelineId`, `executionId`, `agentId`,
59
- `providerId`), new event types cover agent start/complete and provider
60
- errors, logs can be emitted as machine-readable JSON
61
- (`logging.format: json`), and `omninode task|pipeline|agent|provider
62
- inspect <id>` answers "what happened?" after a failed run — with
63
- `--json` for tooling.
64
- - **Phase 13 — Security Hardening**: configuration containing literal
65
- credentials is **rejected before parsing** (with a redacted, actionable
66
- error); reports over 256 KiB are rejected rather than persisted; static
67
- guards keep shell execution out of the codebase; and `omninode security
68
- audit` reviews a project's posture (environment exposure, external working
69
- directories, credential references) and states the agent trust model
70
- plainly — agents run with your OS user's permissions, and OmniNode is not
71
- a sandbox.
72
- - **Phase 12 — Persistence Layer v2**: writes are now **fsynced and atomic**
73
- (temp → fsync → rename → directory fsync), corrupt store files are
74
- **quarantined instead of lost**, documents carry a **schema version** with
75
- v1 data migrated in place (`omninode migrate [--check]`), and files from a
76
- newer OmniNode are refused rather than misread. Details:
77
- [PERSISTENCE.md](docs/PERSISTENCE.md).
78
- - **Phase 11 — Planner v2**: the planner now receives the full §15 input —
79
- task, project context, agent reports, **aggregated findings (consensus and
80
- conflicts included)**, memory and **constraints** (settable per pipeline
81
- step). Plans carry an explicit goal, every generated plan is **schema
82
- validated**, invalid output produces a **structured error** or falls back to
83
- heuristic planning, and a guard test proves the planner module depends on no
84
- specific provider.
85
- - **Phase 10 — Aggregation Improvements**: when agents disagree,
86
- OmniNode now says so instead of flattening the answer — **conflict
87
- detection** preserves every position (severity spread, divergent
88
- recommended fixes), multi-agent **agreements** are recorded as
89
- consensus, confidence is preserved per source, and the combined
90
- report carries provenance-rich metadata. Still fully deterministic.
91
- - **Phase 9 — Report System v2**: reports are validated machine-readable
92
- objects — `validateReport()` runs on everything entering the system and
93
- malformed reports are rejected with diagnostics instead of poisoning
94
- aggregation. Findings gain description/confidence/source/recommendation,
95
- evidence is typed (`file`, `line`, `url`, `command`, `observation`,
96
- `artifact`), and reports carry artifacts and run provenance.
97
- Details: [REPORTS.md](docs/REPORTS.md).
98
- - **Phase 8 — Remembera / Memory v2**: the memory contract is formalized
99
- (`retrieve` / `store` / `search` / `metadata` with v1 `query` / `write`
100
- aliases kept working), memory gains structured **categories** (decisions,
101
- problems, conventions, tasks…), retrieval is **task-oriented and budgeted**
102
- (never "load all memory"), and `memory.required: true` makes backend
103
- failures fatal instead of tolerated. Details: [MEMORY.md](docs/MEMORY.md).
104
- - **Phase 7 — OmniHilbras Integration v2**: the dedicated adapter now
105
- captures gateway-level metadata (version, tier, region) and attaches it
106
- to discovered models, honors provider-level `timeout_ms`, and supports
107
- streaming completions (`stream()` over SSE) — while a guard test proves
108
- the core references OmniHilbras *only* through the provider layer, and a
109
- full pipeline runs with no OmniHilbras configured at all.
110
- - **Phase 6 — Provider Infrastructure v2**: standardized provider contract
111
- (`providerId`, secret-free `authentication`, declared `capabilities`,
112
- `connect()` / `getModel()` discovery), richer model metadata (context
113
- window, input/output modalities, tool/vision/structured-output/streaming
114
- support), and **unified error normalization** — every provider failure now
115
- carries a stable `kind` (auth, rate limit, invalid request, model not
116
- found, timeout, network, server, unknown) plus `retryable` and
117
- `retryAfterMs`. Details: [PROVIDERS.md](docs/PROVIDERS.md).
118
- - **Phase 5 — Pipeline Lifecycle**: first-class pipeline cancellation
119
- (`omninode pipeline cancel <run-id>`: stop scheduling → cancel running
120
- tasks → terminate agent processes → persist a `cancelled` run), `pipeline
121
- validate` for pre-run checks (deps, cycles, agents, model references),
122
- explicit run/step **attempts** in the run record, the
123
- `IPipelineExecutor` contract, and recovery awareness — runs left `running`
124
- without a `finishedAt` are flagged as interrupted in `pipeline runs`.
125
- - **Phase 4 — Agent Adapter Hardening**: process-tree cleanup (agents run in
126
- their own process group; timeout, cancel and Ctrl-C reap the whole tree, so
127
- no orphaned children), explicit environment policies
128
- (`inherit` / `allowlist` / `denylist` / `explicit`), working-directory
129
- validation against project boundaries, per-stream output limits that kill
130
- runaway agents, binary-safe output decoding, human-readable exit/signal
131
- reporting, and a native `IAgentAdapter` registry so new integration styles
132
- plug in without touching core.
133
- - **Phase 3 — Agent Protocol v2**: versioned protocol
134
- (`omninode-agent-protocol/2`), fully correlated envelopes, the complete
135
- message-type set, HELLO handshake, QUESTION/RESPONSE round-trips, and
136
- malformed input that can never crash OmniNode. Spec:
137
- [PROTOCOL.md](docs/PROTOCOL.md).
138
- - **Phase 2 — Execution Reliability**: a task killed after dispatch is
139
- `unknown`, **not** `failed` — retries never duplicate side effects blindly;
140
- bounded retries with backoff, execution identity and history.
141
- - **Phase 1 — Architecture & API Stabilization**: one shared `JsonFileStore`
142
- behind every local store, corrected dependency direction, and a guarded
143
- public API ([API_STABILITY.md](docs/API_STABILITY.md), [API.md](docs/API.md),
144
- [DEPRECATIONS.md](docs/DEPRECATIONS.md)).
145
-
146
- ### What's in v1.0
21
+ **v1.0.0 is feature complete. v2.0.0 — the reliability and interoperability
22
+ release — is in progress**, shipping as tagged prereleases (`v2.0.0-alpha.N`).
23
+
24
+ ### v1.0.0 delivered
147
25
 
148
26
  | Capability | Where |
149
27
  | --- | --- |
150
- | Provider abstraction, custom providers, model discovery | `src/providers/`, `src/registry/` |
151
- | OmniHilbras integration (optional) | `src/providers/omnihilbras/` |
152
- | CLI agents (stdin/arg/protocol), agent registry | `src/agents/` |
153
- | Roles, projects, tasks (lifecycle + retry) | `src/roles/`, `src/tasks/` |
154
- | Pipelines (DAG, parallel, retries, conditions) | `src/pipelines/` |
155
- | Multi-AI research + report aggregation | `src/reports/` |
156
- | Planner layer (model + heuristic) | `src/planner/` |
157
- | Remembera / local memory | `src/memory/` |
158
- | CLI, configuration, security foundations, docs | `src/cli/`, `src/config/`, `docs/` |
159
-
160
- What exists today:
161
-
162
- - Core type contracts: provider, model, agent, role, task, report, pipeline,
163
- protocol, memory (`src/types/`)
164
- - **Provider system** (`src/providers/`, `src/registry/`):
165
- - OpenAI-compatible adapter — works with OpenAI, OpenRouter, local runtimes
166
- (Ollama, LM Studio, vLLM) and custom gateways exposing `/models` and `/chat/completions`
167
- - Model discovery with normalization into the model registry (`provider:model` keys)
168
- - Health checks: connectivity, authentication and server-error classification
169
- - Authentication from environment variables only — keys never touch config files
170
- - Chat completions (`IChatProvider`) — the foundation for the planner phases
171
- - Provider factory mapping config to adapters; `omnihilbras` gets a
172
- dedicated adapter implementing the plan's connect flow —
173
- Connect → Authenticate → Fetch Models → Validate Models → Register
174
- - **Agent system** (`src/agents/`):
175
- - Process adapter: spawns CLI agents as child processes with lifecycle
176
- management — environment, working directory, exit codes, stderr logs,
177
- per-task timeouts (SIGTERM → SIGKILL) and cancellation
178
- - Three input modes: `stdin` (composed task text on stdin), `arg` (prompt as
179
- last argument) and `protocol` (the §21 JSON-lines task protocol —
180
- `TASK`/`ROLE`/`CONTEXT`/`INSTRUCTION` envelopes in, `REPORT`/`COMPLETION`/
181
- `ERROR` messages out, parsed into structured reports)
182
- - Agent factory and registry (`createAgent`, `AgentRegistry`)
183
- - **Roles & tasks** (`src/roles/`, `src/tasks/`):
184
- - `RoleRegistry` with assignment validation — a task can only reference roles
185
- and agents that actually exist
186
- - Task lifecycle (created → queued → running → completed/failed/cancelled)
187
- with transition enforcement
188
- - `TaskEngine` runs tasks through their assigned agent, records structured
189
- results (summary, reports, errors, timestamps)
190
- - `TaskStore` interface with a local-first JSON implementation in
191
- `.omninode/tasks.json` (atomic writes; swap in any backend)
192
- - **Pipeline engine** (`src/pipelines/`):
193
- - Pipelines defined in `omninode.yaml` under `project.pipelines`, validated
194
- before every run (duplicate ids, unknown dependencies, cycles, missing
195
- agents)
196
- - Sequential execution by definition order; explicit `depends_on` unlocks
197
- parallel branches, and research steps fan out to several agents in
198
- parallel (§15)
199
- - Step kinds: `research` (multi-agent fan-out), `collect`, `analyze`,
200
- `plan` (calls a model as `provider:model-id` via the chat layer),
201
- `execute`/`custom` (hand-off to an execution agent)
202
- - Failure handling: retries per step, `on-success`/`on-failure`/`always`
203
- conditions, combined context threaded downstream; every task runs through
204
- the TaskEngine and every run is persisted to `.omninode/pipelines.json`
205
- - **Multi-AI report system** (`src/reports/`):
206
- - Report collection from finished tasks — structured protocol reports pass
207
- through; plain text output is normalized via deterministic extraction
208
- (findings/recommendations/evidence sections, severity guessing)
209
- - Persistence in `.omninode/reports.json` with full source attribution
210
- - Aggregation (§17): duplicate/similar findings merged via deterministic
211
- token-set similarity, sources preserved, highest severity kept
212
- - Combined reports generated automatically at the end of every pipeline run
213
- - **Memory** (`src/memory/`): the §20 loop — before a task runs, relevant
214
- memory is gathered and injected into the agent's context; after it finishes,
215
- the outcome is recorded back. High/critical findings are promoted to
216
- project-level "known problems". Opt in via a `memory:` config section:
217
- - `provider: local` (default) — JSON file at `.omninode/memory.json` with
218
- deterministic keyword/tag relevance scoring, zero dependencies
219
- - `provider: remembera` — the preferred Hilbras memory integration over
220
- HTTP (base URL + `api_key_env_var`); strictly optional, like every
221
- Hilbras component
222
- - Memory failures are best-effort: logged, never fatal to a task
223
- - **Planner layer** (`src/planner/`):
224
- - Typed plan schema (`Plan` with ordered steps, targets, acceptance
225
- criteria, risks, and finding traceability via `sourceFindings`)
226
- - Planner context builder: objective + role + combined findings with
227
- sources + relevant memory + research context
228
- - `ModelPlanner` — asks a chat model (`provider:model-id`) for JSON matching
229
- the plan contract; unparseable output degrades gracefully to the heuristic
230
- fallback
231
- - `HeuristicPlanner` — deterministic, offline plan from recommendations and
232
- significant findings (also the fallback)
233
- - Plans persist to `.omninode/plans.json`; pipeline runs record `planId`
234
- - Configure with `planner: { kind: model | heuristic, model, instruction }`
235
- — never hardcoded to any provider
236
- - **End-to-end workflow** (§28, §27 Phase 9):
237
- - One-command execution via the top-level `run` alias (`omninode run <pipeline> "<objective>"`)
238
- - `omninode status` — full project state overview: providers, agents,
239
- roles, pipelines, task/run/report/plan counts, memory provider + entries
240
- - Pipeline runs persist their objective and a final `resultSummary` (§28 "Result")
241
- - Error recovery: `task retry [--run]` (reset a failed/cancelled task) and
242
- `pipeline retry <run-id>` (re-run a recorded failed run as a new run)
243
- - Full integration test (`tests/e2e.test.ts`) drives the entire §28 workflow
244
- through the real CLI against a local gateway
245
- - Typed error hierarchy (`src/errors/`)
246
- - Leveled logger with pluggable sink (`src/logger/`)
247
- - Configuration system: `omninode.yaml` with `${ENV_VAR}` expansion and strict
248
- validation (`src/config/`)
249
- - CLI: `init`, `provider add/list/test`, `models`, `agent list`, `role list`,
250
- and honest stubs for the phase-dependent commands (`src/cli/`)
251
- - Test infrastructure (Vitest) and CI (GitHub Actions)
252
-
253
- ## Requirements
254
-
255
- - Node.js >= 20
256
-
257
- ## Quick start (from source)
28
+ | Provider abstraction, custom providers, model discovery | [`src/providers/`](src/providers) |
29
+ | OmniHilbras integration (optional) | `src/providers/omnihilbras` |
30
+ | CLI agents (stdin / arg / protocol modes), agent registry | [`src/agents/`](src/agents) |
31
+ | Roles, tasks with lifecycle and retry | `src/roles`, [`src/tasks/`](src/tasks) |
32
+ | Pipelines: DAG scheduling, fan-out research, conditions, retries | [`src/pipelines/`](src/pipelines) |
33
+ | Multi-AI reports with aggregation and conflict detection | [`src/reports/`](src/reports) |
34
+ | Planner (model-backed with heuristic fallback) | [`src/planner/`](src/planner) |
35
+ | Memory (local + Remembera) wired into the task loop | [`src/memory/`](src/memory) |
36
+ | End-to-end workflow in one command | `omninode run <pipeline> "<objective>"` |
37
+ | Audit log, security model, examples, Docker runtime | [`src/audit/`](src/audit), [docs/SECURITY.md](docs/SECURITY.md) |
38
+
39
+ ### v2.0.0 progress (19 of 24 phases)
40
+
41
+ | # | Phase | Outcome |
42
+ | --- | --- | --- |
43
+ | 1 | Architecture & API stabilization | shared persistence base, guarded public API, deprecation policy |
44
+ | 2 | Execution reliability | `unknown` ≠ `failed`, attempts, execution identity, timeouts |
45
+ | 3 | Agent Protocol v2 | versioned, correlated envelopes, malformed input never crashes |
46
+ | 4 | Agent adapter hardening | process-tree cleanup, env policies, output limits, cwd confinement |
47
+ | 5 | Pipeline lifecycle | cancellation, partial/unknown propagation, interrupted-run detection |
48
+ | 6 | Provider infrastructure | model metadata, `connect`/`getModel`, normalized error kinds |
49
+ | 7 | OmniHilbras v2 | gateway metadata, streaming, enforced separation |
50
+ | 8 | Memory v2 | formal contract, categories, budgeted retrieval, `required` policy |
51
+ | 9 | Report system v2 | validated reports, typed evidence, provenance |
52
+ | 10 | Aggregation | agreements, conflicts (both positions preserved), confidence |
53
+ | 11 | Planner v2 | full input, plan validation, structured errors, provider-agnostic |
54
+ | 12 | Persistence | atomic writes, corruption quarantine, schema v2 + migration |
55
+ | 13 | Security hardening | inline-secret refusal, static guards, `security audit` |
56
+ | 14 | Audit & observability | correlated events, JSON logs, `inspect` diagnostics |
57
+ | 15 | CLI v2 | exit codes, `config` group, `pipeline create`, `--json` |
58
+ | 16 | Configuration v2 | precedence, profiles, `OMNINODE_*`, diagnostics |
59
+ | 17 | Testing expansion | explicit failure matrix + regression tests |
60
+ | 18 | Documentation overhaul | complete document set, rewritten README |
61
+ | 19 | Package quality | public exports, runtime validation, npm contents (next) |
62
+ | 20–24 | Performance · developer experience · CI/CD · migration tooling · final hardening | planned |
63
+
64
+ The roadmap is [docs/ROADMAP_V2.md](docs/ROADMAP_V2.md); the completed v1 plan is
65
+ [docs/DEVELOPMENT_PLAN.md](docs/DEVELOPMENT_PLAN.md).
258
66
 
259
- ```bash
260
- npm install
261
- npm run build
262
- node dist/cli/index.js --help
67
+ ## Documentation
263
68
 
264
- # Or run from source:
265
- npm run omninode -- --help
266
- ```
69
+ | Document | What it covers |
70
+ | --- | --- |
71
+ | [Configuration](docs/CONFIGURATION.md) | source precedence, profiles, secrets, diagnostics |
72
+ | [CLI](docs/CLI.md) | command groups, output modes, exit codes, recipes |
73
+ | [Agents](docs/AGENTS.md) | registering agents, input modes, process handling, native adapters |
74
+ | [Pipelines](docs/PIPELINES.md) | pipeline definitions, step kinds, scheduling, results |
75
+ | [Agent Protocol v2](docs/PROTOCOL.md) | the interoperability spec external agents implement |
76
+ | [Providers](docs/PROVIDERS.md) | the provider contract, metadata, error normalization |
77
+ | [Memory](docs/MEMORY.md) | the memory contract, categories, retrieval, migration |
78
+ | [Reports](docs/REPORTS.md) | report schema, validation, aggregation, conflicts |
79
+ | [Persistence](docs/PERSISTENCE.md) | storage interfaces, durability, corruption, migration |
80
+ | [Security](docs/SECURITY.md) | secrets, process execution, trust model, sandbox boundary |
81
+ | [Testing](docs/TESTING.md) | the failure matrix and regression-test discipline |
82
+ | [Troubleshooting](docs/TROUBLESHOOTING.md) | symptom → cause → fix |
83
+ | [Migration](docs/MIGRATION.md) | v1 → v2 (compat, storage, config, protocol) |
84
+ | [Contributing](docs/CONTRIBUTING.md) | setup, workflow, release process |
85
+ | [Architecture](docs/ARCHITECTURE.md) | module map, workflow, execution states, audit |
86
+ | [API](docs/API.md) · [API stability](docs/API_STABILITY.md) · [Deprecations](docs/DEPRECATIONS.md) | the public surface and its guarantees |
87
+ | [CHANGELOG](CHANGELOG.md) · [v1 plan](docs/DEVELOPMENT_PLAN.md) · [v2 roadmap](docs/ROADMAP_V2.md) | history and plans |
267
88
 
268
- Start a project:
89
+ ## Roadmap
269
90
 
270
- ```bash
271
- omninode init # writes omninode.yaml in the current directory
91
+ The v1 plan (phases 0–11) is complete and shipped as **v1.0.0** — see
92
+ [docs/DEVELOPMENT_PLAN.md](docs/DEVELOPMENT_PLAN.md). The v2 roadmap
93
+ (24 phases) is in progress — see [docs/ROADMAP_V2.md](docs/ROADMAP_V2.md):
272
94
 
273
- # Register a provider and verify it end to end
274
- omninode provider add --name my-gateway --type openai-compatible \
275
- --base-url https://example.com/v1 --api-key-env-var MY_API_KEY
276
- omninode provider test my-gateway
95
+ | Version | Milestone |
96
+ | --- | --- |
97
+ | v0.1.0 – v0.10.0 | Foundation → end-to-end workflow |
98
+ | **v1.0.0** | Production Release (v1 plan complete) |
99
+ | **v2.0.0-alpha.N** | Reliability & interoperability line (phases 1–18 shipped) |
100
+ | v2.0.0 | Phases 19–24: package quality, performance, DX, CI/CD, migration tooling, final hardening |
277
101
 
278
- # Discover models into the registry
279
- omninode models
280
- omninode models my-gateway --capability chat
102
+ Install prereleases with:
281
103
 
282
- omninode agent list
283
- omninode role list
104
+ ```bash
105
+ npm install -g @hilbras/omninode@next
284
106
  ```
285
107
 
286
- Register and verify a CLI agent (anything executable works — `opencode`,
287
- `kimi`, a custom script):
108
+ Core architectural rule: OmniNode must run successfully with **zero Hilbras
109
+ dependencies**. OmniHilbras and Remembera make it more powerful, but neither is
110
+ required for the core engine.
111
+
112
+ ## Install
288
113
 
289
114
  ```bash
290
- omninode agent add --name opencode --command opencode --input-mode arg
291
- omninode agent test opencode # sends a trivial task over the real adapter
115
+ npm install -g @hilbras/omninode # stable (v1.0.0)
116
+ npm install -g @hilbras/omninode@next # v2 prereleases
292
117
  ```
293
118
 
294
- Create, run and track tasks (the `Project → Task → Role → Agent` chain):
119
+ Or as a library: `npm install @hilbras/omninode`. Node.js 20+.
120
+
121
+ Prefer a container? `docker build -t omninode .` then
122
+ `docker run --rm -v "$PWD:/work" -w /work omninode run my-pipeline "audit the repo"`.
123
+
124
+ ## Quick start
295
125
 
296
126
  ```bash
297
- omninode task create "audit the auth module" --role security-reviewer --agent opencode
298
- omninode task run task-xxxxxx
299
- omninode task status task-xxxxxx
300
- omninode task list
127
+ omninode init # writes omninode.yaml
128
+ omninode provider add --name my-gateway \
129
+ --base-url https://api.example.com/v1 --api-key-env-var MY_API_KEY
130
+ omninode agent add --name researcher --command some-agent --input-mode stdin
301
131
  ```
302
132
 
303
- Orchestrate several AI systems with a pipeline (§14):
133
+ Describe the work as a pipeline — in `omninode.yaml`:
304
134
 
305
135
  ```yaml
306
136
  project:
137
+ memory:
138
+ provider: local # or: remembera
139
+ planner:
140
+ kind: model
141
+ model: my-gateway:chatgpt
307
142
  pipelines:
308
143
  - id: repo-audit
309
144
  steps:
310
- - id: research
145
+ - id: research # independent analyses, run in parallel
311
146
  kind: research
312
- agents: [kimi, gemini, qwen]
313
- - id: plan
147
+ agents: [researcher, second-opinion]
148
+ - id: plan # findings + memory → typed implementation plan
314
149
  kind: plan
315
- model: my-gateway:chatgpt
316
- - id: execute
150
+ - id: execute # hand the plan to an execution agent
317
151
  kind: execute
318
- agent: opencode
152
+ agent: researcher
319
153
  ```
320
154
 
321
- ```bash
322
- omninode pipeline run repo-audit "Audit the authentication module"
323
- omninode report combined # the aggregated intelligence of that run
324
- omninode report show combined-xxx # grouped findings with per-source attribution
325
- omninode plan show plan-xxx # the implementation plan the planner produced
326
- ```
327
-
328
- The planner layer (§18) turns combined intelligence into an ordered,
329
- actionable implementation plan. Configure it once:
330
-
331
- ```yaml
332
- project:
333
- planner:
334
- kind: model # or heuristic for offline planning
335
- model: my-gateway:chatgpt
336
- ```
155
+ …then run the whole loop in one command:
337
156
 
338
157
  ```bash
339
- omninode init
340
- omninode status
341
- omninode run repo-audit "Audit the authentication module" # the whole workflow
342
- omninode pipeline retry run-xxxx # recover a failed run
343
- omninode task retry task-yyyy --run # recover a failed task
158
+ omninode run repo-audit "Audit the authentication module"
344
159
  ```
345
160
 
346
- Persistent memory (§19–§20) — opt in with `memory: { provider: local }` or
347
- `provider: remembera` in `omninode.yaml`:
348
-
349
- ```bash
350
- omninode memory status # provider + entry counts
351
- omninode memory query "authentication jwt" # what the agents will see
352
- omninode memory write "Decision: use rotating JWT secrets" --scope project --tags architecture
353
161
  ```
354
-
355
- See [omninode.yaml.example](omninode.yaml.example) for a full configuration.
356
-
357
- ### Configuration
358
-
359
- OmniNode reads `omninode.yaml` (or `.yml` / `.json`) from the working directory.
360
- Two rules matter:
361
-
362
- 1. **Credentials never live in the file.** Reference environment variables with
363
- `api_key_env_var: MY_API_KEY`; `${VAR}` / `${VAR:-fallback}` references anywhere
364
- in the file are expanded at load time and unset variables abort loading.
365
- 2. **Unknown keys are rejected.** Typos fail loudly instead of being ignored.
366
-
367
- ## Development
368
-
369
- ```bash
370
- npm run build # bundle with tsup (library + CLI)
371
- npm test # run tests once
372
- npm run test:watch # watch mode
373
- npm run lint # eslint
374
- npm run typecheck # tsc --noEmit
375
- npm run format # prettier
162
+ [research] completed
163
+ [plan] completed
164
+ [execute] completed
165
+ reports: 2 structured report(s)
166
+ combined report: combined-m4f2
167
+ plan: plan-a91
168
+ result: Fixed JWT verification and added regression tests.
169
+ Pipeline completed. Run id: run-a91
376
170
  ```
377
171
 
378
- ## Roadmap
379
-
380
- Phases 0–11 are laid out in [docs/DEVELOPMENT_PLAN.md](docs/DEVELOPMENT_PLAN.md):
381
-
382
- | Version | Milestone |
383
- | --- | --- |
384
- | v0.1.0 | Foundation |
385
- | v0.2.0 | Provider System |
386
- | v0.3.0 | OmniHilbras Integration (optional, like every provider) |
387
- | v0.4.0 | Agent System |
388
- | v0.5.0 | Roles & Tasks |
389
- | v0.6.0 | Pipeline Engine |
390
- | v0.7.0 | Multi-AI Reports |
391
- | v0.8.0 | Remembera / Memory |
392
- | v0.9.0 | Planner |
393
- | v0.10.0 | End-to-End Workflow (current) |
394
- | **v1.0.0** | **Production Release — Phases 10 + 11 (current, final)** |
395
-
396
- Core architectural rule: OmniNode must run successfully with **zero Hilbras
397
- dependencies**. OmniHilbras and Remembera make it more powerful, but neither is
398
- required for the core engine.
399
-
400
- ## Documentation
401
-
402
- - [Development plan](docs/DEVELOPMENT_PLAN.md) — the full 12-phase roadmap
403
- - [Architecture](docs/ARCHITECTURE.md) — module map, workflow, local state
404
- - [Security model](docs/SECURITY.md) — secrets, process execution, env isolation, audit log
405
- - [API stability policy](docs/API_STABILITY.md) and [public API inventory](docs/API.md)
406
- - [Configuration](docs/CONFIGURATION.md) · [Testing & failure matrix](docs/TESTING.md) · [CLI guide](docs/CLI.md) · [Agent Protocol v2 spec](docs/PROTOCOL.md) · [Providers](docs/PROVIDERS.md) · [Memory](docs/MEMORY.md) · [Reports](docs/REPORTS.md) · [Persistence](docs/PERSISTENCE.md) · [Deprecations](docs/DEPRECATIONS.md) · [Changelog](CHANGELOG.md) · [v2 roadmap](docs/ROADMAP_V2.md)
407
- - [Example project](examples/demo/) — a runnable end-to-end demo (`./demo.sh`)
408
-
409
- Prefer a container? `docker build -t omninode .` then
410
- `docker run --rm -v "$PWD:/work" -w /work omninode run my-pipeline "audit the repo"`.
411
-
412
- ## Install
172
+ Inspect what happened, in text or JSON:
413
173
 
414
174
  ```bash
415
- npm install -g @hilbras/omninode
175
+ omninode pipeline inspect run-a91
176
+ omninode report combined
177
+ omninode plan show plan-a91
178
+ omninode task inspect task-… --json | jq .
179
+ omninode audit -n 50
416
180
  ```
417
181
 
418
- Or use it as a library: `npm install @hilbras/omninode`.
182
+ Prefer to start from something runnable? [`examples/demo/`](examples/demo/)
183
+ contains a complete project and `./demo.sh` that exercises the full loop with
184
+ agents that need no external tools.
419
185
 
420
186
  ## Connecting OmniHilbras
421
187
 
package/dist/cli/index.js CHANGED
@@ -23,7 +23,7 @@ import { realpathSync } from "fs";
23
23
  import { Command } from "commander";
24
24
 
25
25
  // src/version.ts
26
- var OMNINODE_VERSION = "2.0.0-alpha.17";
26
+ var OMNINODE_VERSION = "2.0.0-alpha.18";
27
27
 
28
28
  // src/cli/exit-codes.ts
29
29
  var EXIT = {