claude-flow 3.58.0 → 3.59.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 (59) hide show
  1. package/.claude/proven-config.json +1 -1
  2. package/README.md +2 -0
  3. package/node_modules/@claude-flow/codex/dist/cli.js +0 -0
  4. package/node_modules/@claude-flow/plugin-agent-federation/dist/bin.js +0 -0
  5. package/package.json +2 -1
  6. package/v3/@claude-flow/cli/README.md +62 -174
  7. package/v3/@claude-flow/cli/bin/cli.js +19 -1
  8. package/v3/@claude-flow/cli/catalog-manifest.json +5 -5
  9. package/v3/@claude-flow/cli/dist/src/commands/harness.d.ts +40 -0
  10. package/v3/@claude-flow/cli/dist/src/commands/harness.js +142 -0
  11. package/v3/@claude-flow/cli/dist/src/commands/index.js +1 -0
  12. package/v3/@claude-flow/cli/dist/src/commands/init.js +116 -0
  13. package/v3/@claude-flow/cli/dist/src/commands/memory.js +6 -1
  14. package/v3/@claude-flow/cli/dist/src/commands/status.js +2 -2
  15. package/v3/@claude-flow/cli/dist/src/index.d.ts +3 -0
  16. package/v3/@claude-flow/cli/dist/src/index.js +12 -2
  17. package/v3/@claude-flow/cli/dist/src/init/grok-generator.d.ts +96 -0
  18. package/v3/@claude-flow/cli/dist/src/init/grok-generator.js +371 -0
  19. package/v3/@claude-flow/cli/dist/src/init/grok-templates.d.ts +11 -0
  20. package/v3/@claude-flow/cli/dist/src/init/grok-templates.js +28 -0
  21. package/v3/@claude-flow/cli/dist/src/init/index.d.ts +2 -0
  22. package/v3/@claude-flow/cli/dist/src/init/index.js +2 -0
  23. package/v3/@claude-flow/cli/dist/src/mcp-client.js +4 -0
  24. package/v3/@claude-flow/cli/dist/src/mcp-tools/agent-execute-core.js +59 -12
  25. package/v3/@claude-flow/cli/dist/src/mcp-tools/capability-brain.d.ts +1 -1
  26. package/v3/@claude-flow/cli/dist/src/mcp-tools/capability-brain.js +5 -3
  27. package/v3/@claude-flow/cli/dist/src/mcp-tools/embeddings-tools.js +11 -4
  28. package/v3/@claude-flow/cli/dist/src/mcp-tools/hooks-tools.js +13 -3
  29. package/v3/@claude-flow/cli/dist/src/mcp-tools/index.d.ts +1 -0
  30. package/v3/@claude-flow/cli/dist/src/mcp-tools/index.js +2 -0
  31. package/v3/@claude-flow/cli/dist/src/mcp-tools/memory-tools.js +42 -4
  32. package/v3/@claude-flow/cli/dist/src/mcp-tools/task-tools.js +7 -3
  33. package/v3/@claude-flow/cli/dist/src/mcp-tools/team-tools.d.ts +15 -0
  34. package/v3/@claude-flow/cli/dist/src/mcp-tools/team-tools.js +244 -0
  35. package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.d.ts +19 -0
  36. package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.js +163 -3
  37. package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.d.ts +4 -0
  38. package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.js +70 -37
  39. package/v3/@claude-flow/cli/dist/src/memory/rabitq-index.d.ts +19 -0
  40. package/v3/@claude-flow/cli/dist/src/memory/rabitq-index.js +117 -1
  41. package/v3/@claude-flow/cli/dist/src/missions/schemas.d.ts +113 -113
  42. package/v3/@claude-flow/cli/dist/src/mods/command-registry/schema.d.ts +193 -193
  43. package/v3/@claude-flow/cli/dist/src/parser.js +3 -2
  44. package/v3/@claude-flow/cli/dist/src/services/live-harness.d.ts +111 -0
  45. package/v3/@claude-flow/cli/dist/src/services/live-harness.js +427 -0
  46. package/v3/@claude-flow/cli/package.json +4 -3
  47. package/v3/@claude-flow/cli/templates/grok/agents/ruflo-architect.md +35 -0
  48. package/v3/@claude-flow/cli/templates/grok/agents/ruflo-coder.md +34 -0
  49. package/v3/@claude-flow/cli/templates/grok/agents/ruflo-reviewer.md +30 -0
  50. package/v3/@claude-flow/cli/templates/grok/agents/ruflo-tester.md +26 -0
  51. package/v3/@claude-flow/cli/templates/grok/config.toml +63 -0
  52. package/v3/@claude-flow/cli/templates/grok/docs/README.md +186 -0
  53. package/v3/@claude-flow/cli/templates/grok/hooks/subagent-stop-team.json +15 -0
  54. package/v3/@claude-flow/cli/templates/grok/rules/ruflo-grok.md +132 -0
  55. package/v3/@claude-flow/cli/templates/grok/scripts/grok-subagent-stop-hook.mjs +90 -0
  56. package/v3/@claude-flow/cli/templates/grok/scripts/grok-team-bus.mjs +525 -0
  57. package/v3/@claude-flow/cli/templates/grok/scripts/grok-team-store.mjs +287 -0
  58. package/v3/@claude-flow/cli/templates/grok/scripts/host-statusline.mjs +281 -0
  59. package/v3/@claude-flow/cli/templates/grok/skills/agent-teams-grok/SKILL.md +98 -0
@@ -1,5 +1,5 @@
1
1
  {
2
- "adoptedAt": 1792476754804,
2
+ "adoptedAt": 1792503823878,
3
3
  "championId": "sha256:6141a8ea990c5063b77e090ae8f37f9c539d8aa8f58dcceb30f3a82f97e57319",
4
4
  "manifest": {
5
5
  "schema": "ruflo.proven-config/v1",
package/README.md CHANGED
@@ -118,6 +118,8 @@ User → Ruflo (CLI/MCP) → Router → Swarm → Agents → Memory → LLM prov
118
118
 
119
119
  A harness is the workbench around the model: it organizes tasks, carries context between steps and helps check results. **This establishes Ruflo's lineage, not a universal first across every Claude Code tool.** [See the illustrated explainer, exact commits and earlier ecosystem context](docs/harness-origins.md).
120
120
 
121
+ **Grok Build:** `npx ruflo init --grok` writes the project host surface (`.grok/`, the team bus, and the operator guide) and nothing outside the project; add `--dry-run` to preview. Setup, the `spawn_subagent` contract, the optional status row, and what to re-check when Grok updates: [the Grok operator guide](v3/@claude-flow/cli/templates/grok/docs/README.md).
122
+
121
123
  <details>
122
124
  <summary><strong>📖 Background — where the name comes from</strong></summary>
123
125
 
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-flow",
3
- "version": "3.58.0",
3
+ "version": "3.59.0",
4
4
  "workspaces": [
5
5
  "v3/@claude-flow/codex",
6
6
  "v3/@claude-flow/mcp",
@@ -30,6 +30,7 @@
30
30
  "!v3/@claude-flow/cli/dist/**/*.map",
31
31
  "v3/@claude-flow/cli/package.json",
32
32
  "v3/@claude-flow/cli/catalog-manifest.json",
33
+ "v3/@claude-flow/cli/templates/**",
33
34
  "v3/@claude-flow/shared/dist/**/*.js",
34
35
  "v3/@claude-flow/shared/dist/**/*.d.ts",
35
36
  "!v3/@claude-flow/shared/dist/**/*.map",
@@ -1,90 +1,22 @@
1
1
  <div align="center">
2
2
 
3
- <a href="https://cognitum.one/agentic-engineering"><img src="ruflo/assets/ruflo-neon-flicker.gif" alt="Ruflo animated neon sign" width="100%"></a>
4
-
5
- **An agent meta-harness for Claude Code and Codex.**
3
+ [![Ruflo Banner](ruflo/assets/ruflo-small.jpeg)](https://cognitum.one/agentic-engineering)
6
4
 
7
5
  <!-- Try Ruflo — the 3 badges first-time visitors actually act on -->
8
6
  [![npm version (ruflo)](https://img.shields.io/npm/v/ruflo?label=npx%20ruflo&style=for-the-badge&logo=npm&color=cb3837)](https://www.npmjs.com/package/ruflo)
9
7
  [![MIT License](https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge)](https://opensource.org/licenses/MIT)
10
8
  [![Star on GitHub](https://img.shields.io/github/stars/ruvnet/claude-flow?style=for-the-badge&logo=github&color=gold)](https://github.com/ruvnet/claude-flow)
11
9
 
12
- <p align="center">
13
- <a href="docs/harness-origins.md"><img src="https://raw.githubusercontent.com/ruvnet/ruflo/e69e4b95aa08d65ea0f7715489bbf8e62a83a0d2/docs/assets/readme/badges/first-commit.svg" width="300" height="76" alt="Claude Flow lineage: first commit June 2, 2025 by rUv; inspect the evidence"></a>
14
- <a href="data/npm-downloads.latest.json"><img src="https://raw.githubusercontent.com/ruvnet/ruflo/275aff65a198af758923669acff36f03d1f41623/docs/assets/readme/badges/downloads.svg" width="300" height="76" alt="Illustrative download counter starts at 98,000,000 and adds varied amounts each second in a 30 second loop. Verified dataset: 97,022,120 download events."></a>
15
- <br>
16
- <a href="https://github.com/ruvnet/claude-flow"><img src="https://raw.githubusercontent.com/ruvnet/ruflo/d1e80400bdefe01d3b13e70395f88fffab76bb18/docs/assets/readme/badges/claude.svg" width="300" height="76" alt="Claude Code plugin"></a>
17
- <a href="https://www.npmjs.com/package/@claude-flow/codex"><img src="https://raw.githubusercontent.com/ruvnet/ruflo/d1e80400bdefe01d3b13e70395f88fffab76bb18/docs/assets/readme/badges/codex.svg" width="300" height="76" alt="Codex plugin"></a>
18
- </p>
19
-
20
- </div>
21
-
22
- <a id="start-here"></a>
23
-
24
- ## <img src="docs/assets/readme/icons/terminal.svg" width="32" height="32" alt=""> Get started with Ruflo
25
-
26
- <img src="docs/assets/readme/icons/plugins.svg" width="28" height="28" alt=""> **Start in Claude Code** with core tools, the visual console and runtime mods. Requires Claude Code **2.1.287 or later**. Run inside Claude Code:
27
-
28
- ```text
29
- /plugin marketplace add ruvnet/ruflo
30
- /plugin install ruflo-core@ruflo
31
- /plugin install ruflo-console@ruflo
32
- /plugin install ruflo-mods@ruflo
33
- /reload-plugins
34
- /ruflo
35
- ```
36
-
37
- **Core** provides foundation tools. **Console** opens the agent cockpit. **Mods** add routing and policy enforcement inside Claude Code. Mods run with your account's permissions; review their code before installing.
38
-
39
- <img src="docs/assets/readme/icons/terminal.svg" width="28" height="28" alt=""> **Using Codex or another MCP enabled tool?** Use NPX for Ruflo project setup and connect your client to the Ruflo MCP server. Run the setup wizard in your project terminal:
40
-
41
- ```bash
42
- npx ruflo@latest init wizard
43
- ```
44
-
45
- For clients that support local stdio MCP servers, configure **command** `npx` and **arguments** `["-y", "ruflo@latest", "mcp", "start"]`. The equivalent server command is:
46
-
47
- ```bash
48
- npx -y ruflo@latest mcp start
49
- ```
50
-
51
- MCP exposes Ruflo tools to your client. The console and mods above are Claude Code integrations; hook support depends on the client.
52
-
53
- <img src="docs/assets/readme/icons/terminal.svg" width="28" height="28" alt=""> **Prefer a plain terminal? Optional.** The console also runs on its own, with no Claude Code: `npx ruflo tui` (add `--plain` to print one frame for scripts). It shows Overview, Cost, Swarm, Events and Missions, plus an optional AI page. [Terminal UI guide](docs/USERGUIDE.md#terminal-ui-optional)
54
-
55
- <p align="center"><img src="docs/assets/ruflo-tui-compact.svg" width="640" alt="Looping recording of the optional ruflo terminal UI with its pictures: Overview in the Classic BBS look, the Orbital look with its moving globe, and the Swarm graph, in a sample project"></p>
56
-
57
- [Compare install paths](#quick-start) · [Open the console](#console-walkthrough) · [User guide](docs/USERGUIDE.md)
58
-
59
- <div align="center">
60
-
61
-
62
- ### Optional: ruOS Desktop
63
-
64
- <a href="https://ruos.cognitum.one"><img src="ruflo/assets/ruos-animated.svg" alt="ruOS — A desktop that runs itself" width="100%"></a>
65
-
66
- **Connect ruOS to ChatGPT or Claude via MCP:**
67
-
68
- ```text
69
- https://ruos.cognitum.one/mcp
70
- ```
71
-
72
-
73
-
74
- <!-- RuVector promo -->
75
- <a href="https://github.com/ruvnet/ruvector"><img src="docs/assets/readme/ruvector-promo-depth.svg" width="100%" alt="RuVector: Give your agents memory. Local vector search, persistent context, graph relationships and feedback learning. Explore RuVector."></a>
76
-
77
- ```bash
78
- npx ruvector
79
- ```
80
-
81
-
82
-
10
+ <!-- Ecosystem strip (collapsed visually with flat-square) -->
11
+ [![🕸️ RuVector Agentic DB](https://img.shields.io/badge/RuVector_Agentic-DB-06b6d4?style=flat-square&logoColor=white&logo=graphql)](https://github.com/ruvnet/ruvector)
12
+ [![Ecosystem downloads](https://img.shields.io/badge/ecosystem%20downloads-8.1M%2B-blue?style=flat-square&logo=npm)](https://github.com/ruvnet/ruflo/blob/main/data/clone-data.proof.json)
13
+ [![Git clones (14d)](https://img.shields.io/badge/git%20clones%2014d-106k-blueviolet?style=flat-square&logo=github)](https://github.com/ruvnet/ruflo/blob/main/data/clone-data.ledger.json)
14
+ [![Claude Code](https://img.shields.io/badge/Claude%20Code-Plugin-D97757?style=flat-square&logoColor=white&logo=anthropic)](https://github.com/ruvnet/claude-flow)
15
+ [![Codex Plugin](https://img.shields.io/badge/Codex-Plugin-412991?style=flat-square&logoColor=white&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI%2BPHBhdGggZmlsbD0id2hpdGUiIGQ9Ik0yMi4yODIgOS44MjFhNS45ODUgNS45ODUgMCAwIDAtLjUxNi00LjkxIDYuMDQ2IDYuMDQ2IDAgMCAwLTYuNTEtMi45QTYuMDY1IDYuMDY1IDAgMCAwIDQuOTgxIDQuMThhNS45ODUgNS45ODUgMCAwIDAtMy45OTggMi45IDYuMDQ2IDYuMDQ2IDAgMCAwIC43NDMgNy4wOTcgNS45OCA1Ljk4IDAgMCAwIC41MSA0LjkxMSA2LjA1MSA2LjA1MSAwIDAgMCA2LjUxNSAyLjlBNS45ODUgNS45ODUgMCAwIDAgMTMuMjYgMjRhNi4wNTYgNi4wNTYgMCAwIDAgNS43NzItNC4yMDYgNS45OSA1Ljk5IDAgMCAwIDMuOTk4LTIuOSA2LjA1NiA2LjA1NiAwIDAgMC0uNzQ3LTcuMDczek0xMy4yNiAyMi40M2E0LjQ3NiA0LjQ3NiAwIDAgMS0yLjg3Ni0xLjA0bC4xNDItLjA4IDQuNzc4LTIuNzU4YS43OTUuNzk1IDAgMCAwIC4zOTMtLjY4MXYtNi43MzdsMi4wMiAxLjE2OGEuMDcxLjA3MSAwIDAgMSAuMDM4LjA1MnY1LjU4M2E0LjUwNCA0LjUwNCAwIDAgMS00LjQ5NSA0LjQ5NHpNMy42IDE4LjMwNGE0LjQ3IDQuNDcgMCAwIDEtLjUzNS0zLjAxNGwuMTQyLjA4NSA0Ljc4MyAyLjc1OWEuNzcxLjc3MSAwIDAgMCAuNzgxIDBsNS44NDMtMy4zNjl2Mi4zMzJhLjA4LjA4IDAgMCAxLS4wMzMuMDYyTDkuNzQgMTkuOTVhNC41IDQuNSAwIDAgMS02LjE0LTEuNjQ2ek0yLjM0IDcuODk2YTQuNDg1IDQuNDg1IDAgMCAxIDIuMzY2LTEuOTczVjExLjZhLjc2Ni43NjYgMCAwIDAgLjM4OC42NzdsNS44MTUgMy4zNTQtMi4wMiAxLjE2OGEuMDc2LjA3NiAwIDAgMS0uMDcyIDBsLTQuODMtMi43ODZBNC41MDQgNC41MDQgMCAwIDEgMi4zNCA3Ljg3MnptMTYuNTk3IDMuODU1LTUuODMzLTMuMzg3IDIuMDE2LTEuMTY1YS4wNzYuMDc2IDAgMCAxIC4wNzEgMGw0LjgzIDIuNzkxYTQuNDk0IDQuNDk0IDAgMCAxLS42NzYgOC4xMDR2LTUuNjc3YS43OS43OSAwIDAgMC0uNDA3LS42Njd6bTIuMDEtMy4wMjMtLjE0MS0uMDg1LTQuNzc0LTIuNzgyYS43NzYuNzc2IDAgMCAwLS43ODUgMEw5LjQwOSA5LjIzVjYuODk3YS4wNjYuMDY2IDAgMCAxIC4wMjgtLjA2Mmw0LjgzLTIuNzg3YTQuNDk5IDQuNDk5IDAgMCAxIDYuNjggNC42NnpNOC4zMDcgMTIuODYzbC0yLjAyLTEuMTY0YS4wOC4wOCAwIDAgMS0uMDM4LS4wNTdWNi4wNzRhNC40OTkgNC40OTkgMCAwIDEgNy4zNzYtMy40NTRsLS4xNDIuMDgtNC43NzggMi43NThhLjc5NS43OTUgMCAwIDAtLjM5My42ODJ6bTEuMDk3LTIuMzY2IDIuNjAyLTEuNSAyLjYwNyAxLjV2Mi45OTlsLTIuNTk3IDEuNS0yLjYwNy0xLjVaIi8%2BPC9zdmc%2B)](https://www.npmjs.com/package/@claude-flow/codex)
83
16
 
84
17
  # Ruflo
85
18
 
86
- [English](README.md) · [简体中文](README.zh-CN.md)
87
-
19
+ **An agent meta-harness for Claude Code and Codex.**
88
20
 
89
21
  [![RuFlo Explained — build an AI team that plans, remembers, tests, and improves](docs/assets/ruflo-explained/ch14.jpg)](docs/ruflo-explained.md)
90
22
 
@@ -97,27 +29,16 @@ A 14-chapter guide: from the basic idea to a first useful task, then memory, age
97
29
 
98
30
  One `npx ruflo init` gives Claude Code a nervous system: agents self-organize into swarms, learn from every task, remember across sessions, and — with federation — securely talk to agents on other machines without leaking data. You keep writing code. Ruflo handles the coordination.
99
31
 
100
- <p align="center"><img src="docs/assets/readme/learning-cinematic-compact.svg" width="100%" alt="Ruflo trajectory learning: branching memory paths, outcome feedback, contrastive AI and local learning. No LLM required for local vector retrieval and contrastive updates; agent execution may still use an LLM."></p>
101
-
102
- <sub>Conceptual learning loop. Local vector retrieval and contrastive updates can run without an LLM; embeddings and configured learning modules are still required. See the <a href="v3/@claude-flow/cli/src/services/ruvector-training.ts">RuVector training integration</a> and <a href="v3/@claude-flow/neural/src/modes/balanced.ts">trajectory contrastive learning</a>.</sub>
103
-
104
- <details>
105
- <summary>Architecture in text</summary>
106
-
107
- User → Ruflo (CLI/MCP) → Router → Swarm → Agents → Memory → LLM providers. Memory feeds useful experience back into routing. This is a conceptual flow, not a live execution trace.
32
+ ```
33
+ Self-Learning / Self-Optimizing Agent Architecture
108
34
 
109
- </details>
35
+ User --> Ruflo (CLI/MCP) --> Router --> Swarm --> Agents --> Memory --> LLM Providers
36
+ ^ |
37
+ +---- Learning Loop <-------+
38
+ ```
110
39
 
111
40
  > **New to Ruflo?** You don't need to learn 314 MCP tools or 26 CLI commands. After `init`, just use Claude Code normally — the hooks system automatically routes tasks, learns from successful patterns, and coordinates agents in the background.
112
41
 
113
- ### An origin you can inspect
114
-
115
- [![Claude Flow to Ruflo: founding idea on June 2, 2025, orchestration source on June 10, and the continuing Ruflo lineage.](docs/assets/readme/harness-origins.svg)](docs/harness-origins.md)
116
-
117
- **Built by [Reuven Cohen (rUv)](https://github.com/ruvnet), originally as Claude Flow.** The [first commit, June 2, 2025](https://github.com/ruvnet/ruflo/commit/7c1f9402d70e7af56c01a879073cbac92564dc4e), describes a code orchestration layer for recursive agent cycles: Claude writes, edits, tests and improves. The [June 10 source snapshot](https://github.com/ruvnet/ruflo/tree/dba545f012ea92a2375a26332bbf3797495e93c9) adds orchestration, task scheduling, memory and terminal modules.
118
-
119
- A harness is the workbench around the model: it organizes tasks, carries context between steps and helps check results. **This establishes Ruflo's lineage, not a universal first across every Claude Code tool.** [See the illustrated explainer, exact commits and earlier ecosystem context](docs/harness-origins.md).
120
-
121
42
  <details>
122
43
  <summary><strong>📖 Background — where the name comes from</strong></summary>
123
44
 
@@ -127,52 +48,10 @@ A harness is the workbench around the model: it organizes tasks, carries context
127
48
 
128
49
  ---
129
50
 
130
- <p align="center"><img src="docs/assets/readme/console.svg" alt="Mission control: inspect agent work" width="100%"></p>
131
-
132
- <p align="center"><a href="https://raw.githubusercontent.com/ruvnet/ruflo/main/docs/assets/ruflo-console-theme-compact.svg"><img src="docs/assets/ruflo-console-theme-compact.svg" width="100%" alt="Ruflo Orbital theme: animated boot checks, block logo, menu icons, rotating globe, swarm routing, six color palettes and responsive Theme Studio"></a></p>
133
-
134
- [Open animated demo](https://raw.githubusercontent.com/ruvnet/ruflo/main/docs/assets/ruflo-console-theme-compact.svg) · [Theme Studio guide](plugins/ruflo-console/README.md) · [Workflow demo](docs/assets/ruflo-console-workflows.svg)
135
-
136
- <img src="docs/assets/readme/console-icon-workflows.svg" width="28" height="28" alt=""> **Your agent cockpit.** Track workflows, agents, models, tokens and cost beside Claude Code. The 38 second animation shows **Orbital and Theme Studio** through actual renderer frames, including boot checks, six palettes, customization, saved themes, JSON import and resizing. This compact 3.84 MB SVG retains all 456 frames. Native host and AI provider execution are not demonstrated.
137
-
138
- <img src="docs/assets/readme/console-icon-inspect.svg" width="28" height="28" alt=""> **Inspect any run.** Open agent logs and results, search, triage failures, replay and compare. Start with `npx ruflo init`, restart Claude Code, then `/ruflo`. [Full console tour](docs/assets/ruflo-console-walkthrough-wide.gif).
139
-
140
- <img src="docs/assets/readme/console-icon-control.svg" width="28" height="28" alt=""> **Let Claude drive. You set the limits.** Enable **Settings → Claude control** to navigate and run console actions. Choose `read`, `write`, `manage` or `full`, with `ask` or `auto` approval. The current default is **read + ask**; raising the level is your choice. Actions above your permission level are refused, and network, spending and destructive actions require confirmation even in `auto`. Review the live action log or press **Take back control** to stop Claude control. [Details](v3/docs/adr/ADR-444-claude-controls-the-console.md).
141
-
142
- <a id="console-walkthrough"></a>
143
-
144
- ### One task: create a mission with Claude
145
-
146
- <img src="docs/assets/readme/console-icon-workflows.svg" width="28" height="28" alt=""> **Watch the recorded console session below.** Claude creates a mission, opens the Learning and Security pages, and reports its actions in Overview.
147
-
148
- 1. **Set the boundary.** Install the console using the commands below, open `/ruflo`, then choose **Settings → Claude control → write + ask**.
149
- 2. **Give a concrete request.** Try: “Create a mission to add a dark mode toggle. Show me the mission and its status.”
150
- 3. **Approve creation.** Claude opens Missions and sets the goal. Confirm the pending create action in the console.
151
- 4. **Verify the result.** Check that Missions contains the goal and Overview records the action. Creating a mission does not mean the feature has been implemented.
152
- 5. **Keep control.** **Take back control** pauses Claude's console tools. A later call should be refused until you restore control.
153
-
154
- **What the recording demonstrates:** a real Claude Haiku session with `write + auto`, mission creation, page navigation, a refused swarm stop, and control being taken back. The steps above use `ask` so you approve creation yourself. The linked workflow animation uses sample data, while the theme demo replays renderer frames. Neither is evidence of completed swarm work or memory recall.
155
-
156
- [Implementation and recorded test findings](v3/docs/adr/ADR-444-claude-controls-the-console.md) · [Reproduction script](plugins/ruflo-console/scripts/e2e-control.sh)
157
-
158
- <p align="center"><img src="docs/assets/ruflo-console-claude-control.gif" alt="Claude Code with the ruflo console beside it: Claude sets a mission goal, creates the mission and opens the Learning, Security and Overview pages through the console tools; the Claude control dashboard logs each action; swarm-stop is refused because it needs the full level; the person clicks Take back control and the next request is refused"></p>
159
-
160
-
161
- **Install the mods from the ruflo marketplace** (Claude Code 2.1.287 or later; mods run with your account's permissions and are not sandboxed, so read the code first):
162
-
163
- ```text
164
- /plugin marketplace add ruvnet/ruflo
165
- /plugin install ruflo-console@ruflo
166
- /plugin install ruflo-mods@ruflo
167
- /reload-plugins
168
- ```
169
-
170
- `ruflo-console` is the cockpit above, `ruflo-mods` routes prompts and enforces policy in-process, `ruflo-swarm` shows the swarm in a pane, and `ruflo-ruos` adds the ruOS status segment. Open `/plugin` to confirm they appear in the active mods line. Inside the console, `/ruflo market` is the Plugin Catalog: every ruflo plugin, mod and skill with what it ships, and buttons to install, enable, disable and update (each asks first).
51
+ ![Ruflo Plugins](./ruflo-plugins.gif)
171
52
 
172
53
  ## Quick Start
173
54
 
174
- <p align="center"><img src="docs/assets/readme/quick-start.svg" alt="Start building with Ruflo" width="100%"></p>
175
-
176
55
  There are **two different install paths** with very different surface areas. Pick based on what you need (#1744):
177
56
 
178
57
  | | **Claude Code Plugin** | **CLI install (`npx ruflo init`)** |
@@ -240,7 +119,6 @@ This adds slash commands and agent definitions. `ruflo-core` (installed above) d
240
119
  | [**ruflo-browser**](plugins/ruflo-browser/README.md) | Automate browser testing with Playwright |
241
120
  | [**ruflo-jujutsu**](plugins/ruflo-jujutsu/README.md) | Analyze git diffs, score risk, suggest reviewers |
242
121
  | [**ruflo-docs**](plugins/ruflo-docs/README.md) | Generate and maintain documentation automatically |
243
- | [**agentic-qe-fleet**](https://github.com/proffesor-for-testing/agentic-qe/tree/v3.15.10/plugins/agentic-qe-fleet) | External, maintained by [Agentic QE](https://github.com/proffesor-for-testing/agentic-qe): 11 QE agents, test generation, coverage, chaos and TDD skills, the `agentic-qe` MCP server, and a guard for AQE learning data (`/plugin install agentic-qe-fleet@ruflo`). Install it from one marketplace only, `agentic-qe` or `ruflo`: enabled from both, its mod and commands load twice |
244
122
 
245
123
  #### Security & Compliance
246
124
 
@@ -284,7 +162,7 @@ This adds slash commands and agent definitions. `ruflo-core` (installed above) d
284
162
 
285
163
  </details>
286
164
 
287
- ### <img src="docs/assets/readme/icons/terminal.svg" width="28" height="28" alt=""> CLI Install
165
+ ### CLI Install
288
166
 
289
167
  **macOS / Linux / WSL / Git-Bash:**
290
168
 
@@ -308,50 +186,68 @@ npm install -g ruflo@latest
308
186
 
309
187
  > 💡 **Windows users:** the `curl ... | bash` form needs a POSIX shell (Git-Bash, WSL, MSYS). The `npx ruflo@latest init wizard` line works natively in PowerShell and cmd. If you hit an `'bash' is not recognized` error, use the `npx` line instead — both end up running the same init flow.
310
188
 
311
- ### <img src="docs/assets/readme/icons/network.svg" width="28" height="28" alt=""> MCP Server
189
+ ### MCP Server
312
190
 
313
191
  ```bash
314
192
  # Add Ruflo as an MCP server in Claude Code
315
193
  claude mcp add claude-flow -- npx ruflo@latest mcp start
316
194
  ```
317
195
 
318
- ---
196
+ #### HTTP transport security
319
197
 
320
- ## What You Get
198
+ `ruflo mcp start -t http` exposes every registered tool over HTTP (`/rpc`, `/mcp`, `/ws`). The default `stdio` transport is not affected.
321
199
 
322
- <p align="center"><img src="docs/assets/readme/capabilities.svg" alt="Your agent toolkit" width="100%"></p>
200
+ | Setting | Effect |
201
+ |---|---|
202
+ | `RUFLO_MCP_HTTP_TOKEN=<token>` | Require `Authorization: Bearer <token>` on every request. Failure is a bare `401`. The token is compared in constant time and is never logged. Prefer this over `--auth-token`, which is visible in `ps`. |
203
+ | `--auth-token-file <path>` | Read the token from a file (one line). Takes precedence over the env var. |
204
+ | `--auth-token <token>` | Same, on the command line (visible in argv; highest precedence). |
205
+ | `RUFLO_MCP_ALLOW_UNAUTHENTICATED_HTTP=1` | Allow an unauthenticated bind to a non-loopback `--host`. Only for a trusted network boundary or an authenticating reverse proxy. |
323
206
 
324
- <table>
325
- <tr><td width="50%"><a href="plugins/ruflo-swarm/README.md"><img src="docs/assets/readme/card-swarm.svg" width="100%" alt="Agent teams"></a></td><td width="50%"><a href="plugins/ruflo-rag-memory/README.md"><img src="docs/assets/readme/card-memory.svg" width="100%" alt="Persistent memory"></a></td></tr>
326
- <tr><td width="50%"><a href="plugins/ruflo-intelligence/README.md"><img src="docs/assets/readme/card-learning.svg" width="100%" alt="Learning loops"></a></td><td width="50%"><a href="plugins/ruflo-security-audit/README.md"><img src="docs/assets/readme/card-security.svg" width="100%" alt="Security controls"></a></td></tr>
327
- <tr><td width="50%"><a href="https://ruvnet.github.io/ruflo"><img src="docs/assets/readme/card-plugins.svg" width="100%" alt="Plugin marketplace"></a></td><td width="50%"><a href="plugins/ruflo-ruvllm/README.md"><img src="docs/assets/readme/card-routing.svg" width="100%" alt="Models and routing"></a></td></tr>
328
- </table>
207
+ A token must be 16-512 printable ASCII characters (no spaces). `GET /health` stays public and returns only `{"status":"ok"}` when a token is set. Tokens are supported for `-t http` only; `-t websocket` rejects one.
329
208
 
330
- | Capability | Description |
331
- |------------|-------------|
332
- | <img src="docs/assets/readme/icons/agents.svg" width="28" height="28" alt=""> **100+ Agents** | Specialized agents for coding, testing, security, docs, architecture |
333
- | <img src="docs/assets/readme/icons/network.svg" width="28" height="28" alt=""> **Comms Layer** | Zero-trust federation — agents across machines/orgs discover, authenticate, and exchange work securely |
334
- | <img src="docs/assets/readme/icons/swarm.svg" width="28" height="28" alt=""> **Swarm Coordination** | Hierarchical, mesh, and adaptive topologies with consensus |
335
- | <img src="docs/assets/readme/icons/learning.svg" width="28" height="28" alt=""> **Self-Learning** | SONA neural patterns, ReasoningBank, trajectory learning |
336
- | <img src="docs/assets/readme/icons/memory.svg" width="28" height="28" alt=""> **Vector Memory** | HNSW-indexed AgentDB — measured ~1.9x faster at N=20k, ~3.2x–4.7x at N=5k vs brute force (recall@10 ~0.99); ANN wins above the crossover, ties/loses at small N. See [audit](docs/reviews/intelligence-system-audit-2026-05-29.md) + [`scripts/benchmark-intelligence.mjs`](scripts/benchmark-intelligence.mjs) |
337
- | <img src="docs/assets/readme/icons/workers.svg" width="28" height="28" alt=""> **Background Workers** | 12 auto-triggered workers (audit, optimize, testgaps, etc.) |
338
- | <img src="docs/assets/readme/icons/plugins.svg" width="28" height="28" alt=""> **Plugin Marketplace** | 33 native Claude Code plugins + 21 npm plugins |
339
- | <img src="docs/assets/readme/icons/routing.svg" width="28" height="28" alt=""> **Multi-Provider** | Claude, GPT, Gemini, Cohere, Ollama with smart routing |
340
- | <img src="docs/assets/readme/icons/security.svg" width="28" height="28" alt=""> **Security** | AIDefence, input validation, CVE remediation, path traversal prevention |
341
- | <img src="docs/assets/readme/icons/federation.svg" width="28" height="28" alt=""> **Agent Federation** | Cross-installation agent collaboration with zero-trust security |
342
- | <img src="docs/assets/readme/icons/audit.svg" width="28" height="28" alt=""> **[MetaHarness](docs/metaharness-user-guide.md)** | Audit your AI agent setup before you ship. Grade readiness (1-100), scan tool configs for security issues, snapshot the whole project to catch regressions over time, and find templates that match your repo. `ruflo eject` turns a ruflo project into a standalone agent toolkit with its own name. [Full guide](docs/metaharness-user-guide.md). |
209
+ | `--host` | no token | token set |
210
+ |---|---|---|
211
+ | `localhost`, `127.0.0.1`, `::1` | starts, **unauthenticated** | starts, token required |
212
+ | anything else (`0.0.0.0`, `::`, a LAN IP, `127.0.0.2`, `[::1]`, `LOCALHOST`) | **refuses to start** unless `RUFLO_MCP_ALLOW_UNAUTHENTICATED_HTTP=1` | starts, token required |
343
213
 
344
- ### <img src="docs/assets/readme/icons/learning.svg" width="28" height="28" alt=""> Learning from experience
214
+ Without a token, a loopback server is still unauthenticated: any process on the machine, and any web page that can reach it via DNS rebinding, can call tools. Set `RUFLO_MCP_HTTP_TOKEN` whenever the HTTP transport is used.
345
215
 
346
- <p align="center"><img src="docs/assets/readme/learning-flow.svg" width="100%" alt="Recall, execute, evaluate, store, adapt and reuse: an illustrative agent learning cycle."></p>
216
+ **Upgrading:** binding off loopback (for example `--host 0.0.0.0` in Docker) now needs a token or the opt-out above; otherwise the server exits with an error.
347
217
 
348
- Useful trajectories and task feedback can inform future work. Results depend on the configured memory, learning components and quality of feedback. [Learning plugin](plugins/ruflo-intelligence/README.md).
218
+ ---
349
219
 
350
- ### Agent Federation — Slack for Agents
220
+ ## What You Get
351
221
 
352
- <p align="center"><img src="docs/assets/readme/federation.svg" alt="Connected intelligence across machines" width="100%"></p>
222
+ | Capability | Description |
223
+ |------------|-------------|
224
+ | 🤖 **100+ Agents** | Specialized agents for coding, testing, security, docs, architecture |
225
+ | 📡 **Comms Layer** | Zero-trust federation — agents across machines/orgs discover, authenticate, and exchange work securely |
226
+ | 🐝 **Swarm Coordination** | Hierarchical, mesh, and adaptive topologies with consensus |
227
+ | 🧠 **Self-Learning** | SONA neural patterns, ReasoningBank, trajectory learning |
228
+ | 💾 **Vector Memory** | HNSW-indexed AgentDB — measured ~1.9x faster at N=20k, ~3.2x–4.7x at N=5k vs brute force (recall@10 ~0.99); ANN wins above the crossover, ties/loses at small N. See [audit](docs/reviews/intelligence-system-audit-2026-05-29.md) + [`scripts/benchmark-intelligence.mjs`](scripts/benchmark-intelligence.mjs) |
229
+ | ⚡ **Background Workers** | 12 auto-triggered workers (audit, optimize, testgaps, etc.) |
230
+ | 🧩 **Plugin Marketplace** | 33 native Claude Code plugins + 21 npm plugins |
231
+ | 🔌 **Multi-Provider** | Claude, GPT, Gemini, Cohere, Ollama with smart routing |
232
+ | 🛡️ **Security** | AIDefence, input validation, CVE remediation, path traversal prevention |
233
+ | 🌐 **Agent Federation** | Cross-installation agent collaboration with zero-trust security |
234
+ | 🔬 **[MetaHarness](docs/metaharness-user-guide.md)** | Audit your AI agent setup before you ship. Grade readiness (1-100), scan tool configs for security issues, snapshot the whole project to catch regressions over time, and find templates that match your repo. `ruflo eject` turns a ruflo project into a standalone agent toolkit with its own name. [Full guide](docs/metaharness-user-guide.md). |
353
235
 
354
- <p align="center"><img src="docs/assets/readme/federation-flow.svg" width="100%" alt="Outbound agent, data filtering, signing and encryption, identity verification, input checks and receiving agent."></p>
236
+ ### Agent Federation — Slack for Agents
237
+
238
+ ```
239
+ Your Agent --> [ Remove secrets ] --> [ Sign message ] --> [ Encrypted channel ]
240
+ Emails, SSNs, Proves it came No one reads it
241
+ keys stripped from you in transit
242
+ |
243
+ v
244
+ Their Agent <-- [ Block attacks ] <-- [ Check identity ] <------+
245
+ Stops prompt Rejects forgeries
246
+ injection
247
+
248
+ Audit trail on both sides.
249
+ Trust builds over time. Bad behavior = instant downgrade.
250
+ ```
355
251
 
356
252
  Slack gave teams channels. Federation gives agents the same thing — **shared workspaces across trust boundaries**, where agents on different machines, orgs, or cloud regions can discover each other, prove who they are, and collaborate on tasks.
357
253
 
@@ -453,8 +349,6 @@ User --> Claude Code / CLI
453
349
 
454
350
  ## Documentation
455
351
 
456
- <p align="center"><img src="docs/assets/readme/documentation.svg" alt="Guides, architecture and verification" width="100%"></p>
457
-
458
352
  Four docs for four audiences:
459
353
 
460
354
  | Doc | When to read it |
@@ -485,8 +379,6 @@ User Guide section index:
485
379
 
486
380
  ## Support
487
381
 
488
- <p align="center"><img src="docs/assets/readme/support.svg" alt="Build with the Ruflo community" width="100%"></p>
489
-
490
382
  | Resource | Link |
491
383
  |----------|------|
492
384
  | Documentation | [User Guide](docs/USERGUIDE.md) |
@@ -495,10 +387,6 @@ User Guide section index:
495
387
  | Community | [Agentics Foundation Discord](https://discord.com/invite/dfxmpwkG2D) |
496
388
  | Powered by | [Cognitum.one](https://cognitum.one) |
497
389
 
498
- <p align="center"><img src="docs/assets/readme/signal-divider.svg" alt="Ruflo" width="100%"></p>
499
-
500
390
  ## License
501
391
 
502
392
  MIT - [RuvNet](https://github.com/ruvnet)
503
-
504
- <a href="https://cognitum.one"><img src="docs/assets/readme/cognitum-banner-v2.svg" width="100%" alt="Cognitum One: Ambient Intelligence at the edge of the Physical World. Explore cognitum.one."></a>
@@ -161,7 +161,25 @@ const isMCPMode = !process.stdin.isTTY
161
161
  && !explicitNonStdioTransport
162
162
  && (process.argv.length === 2 || isExplicitMCP);
163
163
 
164
- if (isMCPMode) {
164
+ // `harness` observes the running system (it is the SessionStart hook), so it
165
+ // skips normal CLI startup entirely: no daemon autostart, update check, policy
166
+ // migration or config adoption, and no heavy imports. With --hook it fails
167
+ // silently (no stack on stderr) so a missing dist/ can't disturb a session.
168
+ const isHarness = cliArgs[0] === 'harness' && !cliArgs.includes('--help') && !cliArgs.includes('-h');
169
+
170
+ if (isHarness) {
171
+ const hook = cliArgs.includes('--hook');
172
+ try {
173
+ const { runHarnessCli } = await import('../dist/src/commands/harness.js');
174
+ process.exitCode = runHarnessCli(cliArgs.slice(1));
175
+ } catch (error) {
176
+ if (!hook) {
177
+ const missing = error && error.code === 'ERR_MODULE_NOT_FOUND';
178
+ console.error(`ruflo harness: ${missing ? 'the CLI is not built (dist/ is missing)' : (error && error.message) || error}`);
179
+ }
180
+ process.exitCode = hook ? 0 : 1;
181
+ }
182
+ } else if (isMCPMode) {
165
183
  // Run MCP server mode
166
184
  const { listMCPTools, callMCPTool, hasTool } = await import('../dist/src/mcp-client.js');
167
185
  const { isPolicyEnforcementEnabled, loadMcpPolicy, evaluateToolCall } =
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "generation": 7,
4
- "generatedAt": "2026-10-20T06:14:05.915Z",
5
- "gitSha": "d529a38a",
3
+ "generation": 6,
4
+ "generatedAt": "2026-09-17T21:28:47.530Z",
5
+ "gitSha": "702d1461",
6
6
  "catalog": {
7
- "agents": 176,
8
- "tools": 423,
7
+ "agents": 167,
8
+ "tools": 418,
9
9
  "skills": 34
10
10
  },
11
11
  "benchmark": null
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Live harness status.
3
+ *
4
+ * This is not `doctor` and not `status`. Those describe install health or
5
+ * call tool handlers inside this process. `harness` reports what is already
6
+ * running for this working tree: the host session, a live daemon pid, ruflo
7
+ * MCP servers whose cwd is this tree, processes holding the memory databases
8
+ * open, and teams that are still active.
9
+ *
10
+ * ruflo harness
11
+ * ruflo harness --json
12
+ * ruflo harness --hook # SessionStart payload for Codex (and Claude)
13
+ * ruflo harness --print-codex-hook # opt-in .codex/hooks.json for this install
14
+ *
15
+ * `harness` is observe-only: bin/cli.js runs it through `runHarnessCli`
16
+ * before the normal CLI starts, so no daemon autostart, update check, policy
17
+ * migration or config adoption runs, and nothing is written to disk. The CLI
18
+ * class also exempts it from those side effects (see OBSERVE_ONLY_COMMANDS).
19
+ */
20
+ import type { Command } from '../types.js';
21
+ import { type LiveHarness } from '../services/live-harness.js';
22
+ export type { LiveHarness } from '../services/live-harness.js';
23
+ export { collectLiveHarness } from '../services/live-harness.js';
24
+ /** This install's bin/cli.js, from dist/src/commands/harness.js (or src/commands). */
25
+ export declare function installedCliPath(moduleUrl?: string): string;
26
+ /**
27
+ * A .codex/hooks.json that runs this install's harness on SessionStart. The
28
+ * path is absolute, so the hook does not depend on the session's git root.
29
+ * Autostart and the update check are off, and failures stay silent.
30
+ */
31
+ export declare function codexHookConfig(cliPath?: string): string;
32
+ /**
33
+ * Entry used by bin/cli.js before the CLI class loads. Returns the exit code.
34
+ * With --hook it never fails: on any error it prints nothing and returns 0,
35
+ * so a SessionStart hook can't break a session.
36
+ */
37
+ export declare function runHarnessCli(argv: string[], write?: (text: string) => void, collect?: () => LiveHarness): number;
38
+ export declare const harnessCommand: Command;
39
+ export default harnessCommand;
40
+ //# sourceMappingURL=harness.d.ts.map
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Live harness status.
3
+ *
4
+ * This is not `doctor` and not `status`. Those describe install health or
5
+ * call tool handlers inside this process. `harness` reports what is already
6
+ * running for this working tree: the host session, a live daemon pid, ruflo
7
+ * MCP servers whose cwd is this tree, processes holding the memory databases
8
+ * open, and teams that are still active.
9
+ *
10
+ * ruflo harness
11
+ * ruflo harness --json
12
+ * ruflo harness --hook # SessionStart payload for Codex (and Claude)
13
+ * ruflo harness --print-codex-hook # opt-in .codex/hooks.json for this install
14
+ *
15
+ * `harness` is observe-only: bin/cli.js runs it through `runHarnessCli`
16
+ * before the normal CLI starts, so no daemon autostart, update check, policy
17
+ * migration or config adoption runs, and nothing is written to disk. The CLI
18
+ * class also exempts it from those side effects (see OBSERVE_ONLY_COMMANDS).
19
+ */
20
+ import { dirname, join } from 'node:path';
21
+ import { fileURLToPath } from 'node:url';
22
+ import { collectLiveHarness } from '../services/live-harness.js';
23
+ export { collectLiveHarness } from '../services/live-harness.js';
24
+ function renderText(report) {
25
+ const out = [report.line];
26
+ if (Object.keys(report.session).length) {
27
+ out.push(`session ${Object.entries(report.session).map(([k, v]) => `${k}=${v}`).join(' ')}`);
28
+ }
29
+ for (const server of report.mcp.servers)
30
+ out.push(`mcp ${server.pid} ${server.command}`);
31
+ if (report.memory.openPids?.length)
32
+ out.push(`memory held by ${report.memory.openPids.join(',')}`);
33
+ for (const team of report.teams)
34
+ out.push(`team ${team.name} ${team.status} members=${team.members}`);
35
+ if (report.staleTeams.length)
36
+ out.push(`stale teams (no activity, not shut down) ${report.staleTeams.join(',')}`);
37
+ return out.join('\n') + '\n';
38
+ }
39
+ function renderHook(report) {
40
+ return JSON.stringify({
41
+ hookSpecificOutput: { hookEventName: 'SessionStart', additionalContext: report.line },
42
+ }) + '\n';
43
+ }
44
+ function shellQuote(value) {
45
+ return `'${value.replace(/'/g, `'\\''`)}'`;
46
+ }
47
+ /** This install's bin/cli.js, from dist/src/commands/harness.js (or src/commands). */
48
+ export function installedCliPath(moduleUrl = import.meta.url) {
49
+ return join(dirname(fileURLToPath(moduleUrl)), '..', '..', '..', 'bin', 'cli.js');
50
+ }
51
+ /**
52
+ * A .codex/hooks.json that runs this install's harness on SessionStart. The
53
+ * path is absolute, so the hook does not depend on the session's git root.
54
+ * Autostart and the update check are off, and failures stay silent.
55
+ */
56
+ export function codexHookConfig(cliPath = installedCliPath()) {
57
+ const command = `RUFLO_DAEMON_AUTOSTART=0 node ${shellQuote(cliPath)} harness --hook --no-update 2>/dev/null || true`;
58
+ return JSON.stringify({
59
+ hooks: {
60
+ SessionStart: [
61
+ {
62
+ matcher: 'startup|resume|clear|compact|fork',
63
+ hooks: [{ type: 'command', command, timeout: 8 }],
64
+ },
65
+ ],
66
+ },
67
+ }, null, 2) + '\n';
68
+ }
69
+ function render(mode, collect) {
70
+ if (mode === 'codex-hook')
71
+ return { text: codexHookConfig() };
72
+ const report = collect();
73
+ if (mode === 'hook')
74
+ return { text: renderHook(report), report };
75
+ if (mode === 'json')
76
+ return { text: JSON.stringify(report, null, 2) + '\n', report };
77
+ return { text: renderText(report), report };
78
+ }
79
+ function modeOf(flags) {
80
+ if (flags.printCodexHook)
81
+ return 'codex-hook';
82
+ if (flags.hook)
83
+ return 'hook';
84
+ if (flags.json)
85
+ return 'json';
86
+ return 'text';
87
+ }
88
+ /**
89
+ * Entry used by bin/cli.js before the CLI class loads. Returns the exit code.
90
+ * With --hook it never fails: on any error it prints nothing and returns 0,
91
+ * so a SessionStart hook can't break a session.
92
+ */
93
+ export function runHarnessCli(argv, write = (text) => { process.stdout.write(text); }, collect = () => collectLiveHarness()) {
94
+ const mode = modeOf({
95
+ hook: argv.includes('--hook'),
96
+ json: argv.includes('--json'),
97
+ printCodexHook: argv.includes('--print-codex-hook'),
98
+ });
99
+ try {
100
+ write(render(mode, collect).text);
101
+ return 0;
102
+ }
103
+ catch (error) {
104
+ if (mode === 'hook')
105
+ return 0;
106
+ process.stderr.write(`ruflo harness: ${error instanceof Error ? error.message : String(error)}\n`);
107
+ return 1;
108
+ }
109
+ }
110
+ export const harnessCommand = {
111
+ name: 'harness',
112
+ description: 'Show the running harness for this tree (live pids and open state, not install config)',
113
+ options: [
114
+ { name: 'json', description: 'Print the live report as JSON', type: 'boolean', default: false },
115
+ {
116
+ name: 'hook',
117
+ description: 'Print a SessionStart additionalContext payload for Codex or Claude',
118
+ type: 'boolean',
119
+ default: false,
120
+ },
121
+ {
122
+ name: 'print-codex-hook',
123
+ description: 'Print an opt-in .codex/hooks.json that runs this install on SessionStart',
124
+ type: 'boolean',
125
+ default: false,
126
+ },
127
+ ],
128
+ examples: [
129
+ { command: 'ruflo harness', description: 'One line plus any live mcp, memory holders, and teams' },
130
+ { command: 'ruflo harness --json', description: 'Machine-readable live report' },
131
+ { command: 'ruflo harness --hook', description: 'SessionStart payload' },
132
+ { command: 'ruflo harness --print-codex-hook > .codex/hooks.json', description: 'Opt in to the Codex SessionStart hook' },
133
+ ],
134
+ action: async (ctx) => {
135
+ const mode = modeOf(ctx.flags);
136
+ const { text, report } = render(mode, () => collectLiveHarness());
137
+ process.stdout.write(text);
138
+ return { success: true, data: report };
139
+ },
140
+ };
141
+ export default harnessCommand;
142
+ //# sourceMappingURL=harness.js.map
@@ -45,6 +45,7 @@ const commandLoaders = {
45
45
  // P0 Commands
46
46
  completions: () => import('./completions.js'),
47
47
  doctor: () => import('./doctor.js'),
48
+ harness: () => import('./harness.js'),
48
49
  // Verification (ADR-095, signed witness manifest)
49
50
  verify: () => import('./verify.js'),
50
51
  // Analysis Commands