* feat(marketplace): list Agentic QE (agentic-qe-fleet) as an external, pinned plugin
The ruflo marketplace now lists agentic-qe-fleet by a git-subdir source pinned
to agentic-qe v3.15.0 (1363bc7d), so `/plugin install agentic-qe-fleet@ruflo`
installs the plugin from its own repository: 11 QE agents, 9 skills, 9 commands,
the agentic-qe MCP server pinned to 3.15.0, and the aqe-mod guard.
Tooling that assumed every entry is a local ./plugins folder now handles an
external one:
- validate-marketplace.yml checks an external entry (git-subdir, https url,
path without .., full sha, description) instead of failing on it
- smoke-all-plugins checks out each external entry at its sha and runs its own
scripts/smoke.sh (--skip-external to omit); the workflow also runs when
marketplace.json changes
- ruflo-console 0.40.9: plugin-map line (Dev Tools), the coverage test requires
a line for every external entry, and the Plugin Catalog reads an external
plugin from its install path in installed_plugins.json (EXT badge)
- README and plugins/README rows; ADR-484 records the decision and evidence
* docs(adr-484): record what Claude Code before 2.1.69 does with the external entry, and main's existing floor
* fix(ci): fence the external-plugin smoke: github-only sources, realpath containment, scrubbed env and cwd, read-only token
Review findings 1 and 2 on #3950:
- scripts/external-plugins.mjs: sources must be https://github.com/<owner>/<repo>(.git);
the plugin folder, its manifest and smoke.sh must stay inside the checkout after realpath;
the external smoke.sh runs with only PATH, LANG, TERM and CI kept (no GITHUB_TOKEN,
ACTIONS_*, *_TOKEN, *_KEY, *SECRET*), a temporary HOME, and its checkout (in a temp
folder outside the workspace) as cwd; git fetch runs with the same env
- validate-marketplace.yml applies the same github-only allowlist and path rule
- all-plugins-smoke.yml: permissions contents: read, persist-credentials: false,
runs tests/external-plugins.test.mjs
- tests/external-plugins.test.mjs: non-github host and lookalikes refused by both
validators, symlink escapes refused, child env has no GITHUB_TOKEN and cwd is outside
the workspace
* ci(all-plugins-smoke): raise the smoke-all timeout from 10 to 15 minutes
Review finding 4 on #3950: green runs on main take 9m40-9m50s, so the job sat on the
10-minute cap and was cancelled at 10m16s on this PR.
* test(console): an external plugin's description, version, source line and docs are stripped of escapes and bidi controls
Review finding 3 on #3950: the catalog reader already passes every external manifest
string through plain() (ESC/CSI/OSC sequences, C0/C1 controls, U+202A-202E and
U+2066-2069 removed); this test holds it to that.
* ci(test-ratchet): tests/external-plugins.test.mjs runs under node --test, not the root vitest
all-plugins-smoke.yml runs it with node --test; vitest reported "No test suite found".
* feat(marketplace): move the agentic-qe-fleet pin to v3.15.1 (4f0f8412)
agentic-qe v3.15.1 changes only the aqe-mod guard (#920: hardened, still tighten-only,
same engine API and events as 3.15.0) and pins agentic-qe@3.15.1 in .mcp.json.
* docs(adr-484): install evidence re-run at the v3.15.1 pin
* feat(marketplace): move the agentic-qe-fleet pin to v3.15.2 (9db36edf)
agentic-qe v3.15.2: aqe-mod reports its real version, keeps guard totals and the last
refusal across sessions (additive totals/lastRefusal in status.json), and never reads or
writes its status file through a symlink (adds $.fs.read and $.fs.stat); guard judging
unchanged. .mcp.json pins agentic-qe@3.15.2. ADR-484 evidence re-run at this pin.
* fix(marketplace): plain-name paths for external plugins, pin-review note, one marketplace for agentic-qe-fleet
- both validators (scripts/external-plugins.mjs, validate-marketplace.yml) require the
plugin path to match ^[A-Za-z0-9._-]+(/[A-Za-z0-9._-]+)*$ with no . or .. segment:
%2e%2e, a\..\b, a//b and a trailing slash are refused; tests cover both validators
- ADR-484: every pin bump needs a review of the pinned scripts/smoke.sh
- READMEs: install agentic-qe-fleet from the agentic-qe or the ruflo marketplace, not both
* feat(marketplace): move the agentic-qe-fleet pin to v3.15.3 (d7e5ffa7)
The plugin at v3.15.3 differs from v3.15.2 only in its version and its MCP
pin (agentic-qe@3.15.3). ADR-484's evidence records the install re-run at
the new pin.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* chore(plugins): pin agentic-qe to v3.15.4 (bec02b13)
The plugin at v3.15.4 differs from v3.15.3 only in its version and its MCP
pin (agentic-qe@3.15.4). ADR-484's evidence records the install re-run at
the new pin.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* chore(plugins): pin agentic-qe to v3.15.5 (d65ede14)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* chore(console): leave the console version bump to the maintainer at merge
The console version and CHANGELOG entry collided with every console release on
main (four rebases on 2026-10-12, each only plugins/ruflo-console/CHANGELOG.md).
plugin.json, hooks/version.ts, scripts/smoke.sh and CHANGELOG.md now match
main; ADR-484 and its index row say 'next console release'.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* chore(plugins): pin agentic-qe to v3.15.6 (0fa34d24)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* chore(plugins): pin agentic-qe to v3.15.7 (7f2d091d)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* chore(plugins): pin agentic-qe to v3.15.8 (d9ce98f7)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* chore(plugins): pin agentic-qe to v3.15.9 (d1c33d2b)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* chore(plugins): pin agentic-qe to v3.15.10 (e5814a2f)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: rUv <ruv@ruv.net>
- autoOpen is gated on a ruflo project; Esc or the pane's mark persists
isClosedByPerson so a dismissed cockpit stays shut next session
- tests/actions.test.ts: each confirm-gated palette action asks, runs nothing
until yes, then exactly its fixed argv (13 actions)
- radar axis words, handoff arrows name the target agent, gantt now marker
- READMEs: /ruflo swarm and /ruflo mods, old names deprecated for one release;
ruflo-swarm panel now defaults to command
Co-Authored-By: RuFlo <ruv@ruv.net>
Kit tests (19) for every view, hotkeys, confirm-gated claims, refusal,
empty project, narrow and desktop fallbacks, the frame loop stopping when
hidden or unfocused, hostile text and the band. Pure vitest specs (18)
for readers, CLI JSON, cell graphics and $.ruflo type parity.
Co-Authored-By: RuFlo <ruv@ruv.net>
Resolves .claude-plugin/marketplace.json and scripts/ci-test-baseline.txt
after #3608/#3607 merged: both sides appended entries, so the resolution
keeps both (ruflo-mods + ruflo-ruos marketplace entries; all baseline blocks).
Co-Authored-By: RuFlo <ruv@ruv.net>
- .claude-plugin/marketplace.json: ruflo-ruos entry, must land with the
plugin dir (validate-marketplace checks the source exists)
- ADR-405: deferred mod part uses the flat contract
$.ruflo.segment({id:'ruos', text}) and $.ruos.* (try/catch, vendored types)
Co-Authored-By: RuFlo <ruv@ruv.net>
An opt-in hooks module (Claude Code function hooks, early access) with
in-process equivalents of the classic per-event hooks:
- prompt.submit: router.cjs routing + ranked-memory context, text identical
to hook-handler.cjs route; #3567 no-match semantics
- tool.check: tighten-only (stricter of chain and ruflo), pre-bash list and
the claude-code.* rules of ruflo policy; fails closed by one step
- tool.call/turn.complete/session.end: edit records in recordEdit's format
- session.measure/agent.spawn: cost-tracker budget ladder (opt-in)
- session.start: ownership handshake (RUFLO_MODS_OWNS), /ruflo-mods
Owns route/post-edit only where the classic hook-handler hands them over.
Kit tests (claude plugin test, 7/7 in the real engine), static security
smoke (9/9), marketplace entry.
Co-Authored-By: RuFlo <ruv@ruv.net>
* feat(plugin): add multi-tenant RuFlo AI Team service
* fix(plugin): isolate AI Team validation from root test discovery
* fix(plugin): document deployment option precedence
* fix(plugin): satisfy Claude directory manifest and tool scoping
* fix(plugin): isolate Claude directory review bundle
* fix(plugin): include Claude MCP endpoint declaration
* docs(plugin): complete Claude directory listing links
* docs(plugin): disclose personal data and retention
* feat(plugin): publish complete RuFlo Claude marketplace
* docs(plugins,skills): surface v3.40.0 cross-host federation + claims capabilities
The agentbbs federation plugin and the claims skill still described only
Phase-1 room coordination. Update them to the shipped 3.40.0 surface.
- plugins/ruflo-bbs-federation/plugin.json: 0.1.0 -> 0.2.0. Document the
Phase-2 cross-host tools (identity, peer_add, peers, serve, sync),
Ed25519-signed envelopes, registry-anchored pinning, drop/count of
unverified envelopes, network-agnostic HTTP-pull transport, and claim
coordination. Keywords: drop phase-1-mvp; add cross-host, signed-envelopes,
pinned-peers, registry-anchored-pinning, union-merge, claims.
- plugins/ruflo-bbs-federation/skills/cross-host-federation/SKILL.md (new):
the practical join/serve/publish/sync flow, the pull-not-push model, the
JSON-stable-payload gotcha, work-claim messages + rules, and the security
model (registry-anchored pinning, no secrets in payloads, content-is-data).
- .agents/skills/claims/SKILL.md: add a Cross-Host Work Claims section —
the claims_* runtime ledger tools plus the federated ClaimIssued/Released/
Handoff/Ack messages and ownership rules, distinct from the existing
authorization claims.
- marketplace.json: bbs-federation description updated to Phase 2.
Docs only — no code or tool-signature changes.
Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_013u4pmL9ZUAXb6usVQgNo67
* fix(plugins): add missing manifest for ruflo-deepseek-harness
The Validate Marketplace workflow requires every plugins/*/ dir to carry
.claude-plugin/plugin.json. ruflo-deepseek-harness has agents/commands/
scripts/skills but no manifest, so main's validate has been red since
2026-08-21 and every PR touching plugins inherits the failure. Pre-existing;
surfaced here because this PR is the one touching plugin manifests.
Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_013u4pmL9ZUAXb6usVQgNo67
Wraps the cogmusic MCP server (music.cognitum.one, MiniMax-Music3) as a
Ruflo plugin: 2 agents (music-composer for lyrics/prompt writing,
music-producer as the pipeline entry point), 7 skills mapped onto the 6
cogmusic MCP tools plus a one-time connect/setup skill, a /music
dispatcher command, and an ADR documenting the PAT auth model,
audio_url delivery pattern, and disclosed reliability history.
First plugin in this marketplace whose skills reference MCP tools from
a server other than ruflo-core (mcp__cogmusic__*) — documented
explicitly in ADR-0001 as a deliberate, live-verified deviation from
the CLI-wrapping convention every sibling plugin follows.
Verified: 10/10 structural smoke checks, all cross-file relative links
resolve, all six referenced MCP tool names match the real cogmusic
surface exactly.
Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01G3Fkc9qcZ2AkwGPce83yTa
ADR-382 Part A:
- plugins/ruflo-core/.mcp.json launched the MCP server via a bare
`npx -y @claude-flow/cli@latest`, which always re-resolves to the
newest registry version regardless of any local `npm install
@claude-flow/cli` a user separately pinned. Add scripts/mcp-launch.cjs,
a small launcher mirroring hook-handler.cjs's resolveCliBinForHook()
(candidate list + dist/src/index.js existence guard against a
source-only marketplace checkout), and point .mcp.json at it via the
documented ${CLAUDE_PLUGIN_ROOT} substitution. Falls back to the
original npx @latest invocation only when no local install resolves.
- .claude-plugin/marketplace.json listed 35 plugins while plugins/ has
38 directories; register the 3 missing ones (ruflo-agntcy,
ruflo-bbs-federation, ruflo-business-pods), descriptions sourced from
each plugin's own .claude-plugin/plugin.json.
Ref: ADR-382, #2971
Both plugins live in plugins/ on disk but were missing from
.claude-plugin/marketplace.json, so `/plugin marketplace add ruvnet/ruflo`
in Claude Code did not surface them.
Adds:
- ruflo-metaharness (ADR-148/149/150) — score, genome, mint, mcp-scan,
threat-model, oia-audit; optional dep, never required at runtime
- ruflo-arena (ADR-147/148) — competitive ruliology arenas, tournaments,
adaptive co-evolution of program strategies
Manifest now lists 35 plugins, matching the 35 ruflo-* directories under
plugins/. JSON validated with python3 -m json.tool.
Co-Authored-By: RuFlo <ruv@ruv.net>
The plugin directory plugins/ruflo-graph-intelligence/ exists with a
valid .claude-plugin/plugin.json, but the marketplace manifest does not
list it, so /plugin install ruflo-graph-intelligence@ruflo fails with
'Plugin not found in marketplace ruflo'.
Add the missing entry, alphabetically placed between ruflo-federation
and ruflo-iot-cognitum to match the ordering of recent additions.
* docs(adr): ADR-115 — Claude Managed Agents as a cloud backend for rvagent (explored + validated)
Records the proposal to add `runtime: "managed"` to ruflo's rvagent
interface (ruflo-wasm / @ruvector/rvagent-wasm / wasm_agent_* MCP tools),
backed by Anthropic's Claude Managed Agents API (beta), as a second backend
alongside the local WASM sandbox — mirroring the ConsensusTransport
LocalTransport|FederationTransport pattern (ADR-095 G2 / ADR-104). The
agent/environment/session/events model maps ~1:1 to wasm_agent_create/
prompt/files/terminate + the gallery.
Validated live against api.anthropic.com/v1 with the org's Anthropic key
(GCP claude-flow/anthropic-api-key): created an agent + environment + session,
sent a bash task, observed the full event log (status_running → user.message
→ tool_use(bash) → tool_result → agent.message("Done.") → status_idle,
stop_reason end_turn), cleaned up. ~7s for a trivial Haiku task.
High-value combos noted: ruflo's own MCP server as a Managed Agent tool
source (cloud-hosted ruflo, zero local infra); Managed Agent session as a
third task_assign executor (closes#1916 items 3/4); long-running/async work;
skills + define-outcomes parity. Constraints: opt-in/off-by-default, needs
ANTHROPIC_API_KEY + beta access, plugin-level @anthropic-ai/sdk dep,
cost-tracking + orphaned-session GC, beta churn, branding.
Status: proposed. Registered in AgentDB (adr-ADR-115) + adr-patterns.
Co-Authored-By: RuFlo <ruv@ruv.net>
* refactor(plugins): rename ruflo-wasm → ruflo-agent (agent-runtimes home; ADR-115 prep)
`ruflo-wasm` only covered local WASM-sandboxed agents (rvagent —
@ruvector/rvagent-wasm, the wasm_agent_*/wasm_gallery_* MCP tools). It's
becoming the home for *all* ruflo agent runtimes: the existing local-WASM
backend plus Anthropic's Claude Managed Agents as a cloud backend (ADR-115),
behind one interface — same local-vs-cloud pattern as ConsensusTransport.
- git mv plugins/ruflo-wasm → plugins/ruflo-agent
- plugin.json: name ruflo-wasm → ruflo-agent; description/keywords now span
both runtimes (rvagent/wasm + managed-agents/anthropic/cloud)
- .claude-plugin/marketplace.json entry renamed
- README / plugins/README / docs/index / cli README / ruflo README /
discover-plugins SKILL / verification/inventory.json / ADR-115 — refs updated
- wasm_agent_* / wasm_gallery_* MCP tool names are unchanged (they stay; the
plugin is just renamed). managed_agent_* tools land next per ADR-115.
(Left `ruflo-wasm-mcp` in ruvocal/workerClient.ts alone — unrelated worker MCP name.)
Co-Authored-By: RuFlo <ruv@ruv.net>
* feat(cli): managed_agent_* MCP tools — Claude Managed Agents cloud runtime (ADR-115)
Six new MCP tools wrapping Anthropic's Claude Managed Agents REST API (beta,
`anthropic-beta: managed-agents-2026-04-01`) via plain fetch — no new SDK dep:
managed_agent_create agents.create + environments.create + sessions.create ↔ wasm_agent_create (CLOUD counterpart)
managed_agent_prompt events.send(user.message) + poll events until idle ↔ wasm_agent_prompt
managed_agent_status GET /v1/sessions/{id}
managed_agent_events GET /v1/sessions/{id}/events (full transcript) ↔ wasm_agent_files
managed_agent_list GET /v1/sessions
managed_agent_terminate DELETE /v1/sessions/{id} (+ optionally the env) ↔ wasm_agent_terminate
Needs ANTHROPIC_API_KEY (or CLAUDE_API_KEY); every tool degrades gracefully
with a structured "use wasm_agent_* for a local no-key runtime" error when the
key is absent — the CLI/MCP server stays up. ADR-112-compliant descriptions
(each says when wasm_agent_* / native is the right call instead). Registered
in mcp-client.ts. Lives conceptually in the `ruflo-agent` plugin (the
`ruflo-wasm`→`ruflo-agent` rename in the prior commit).
Validated live against api.anthropic.com with the org's Anthropic key (GCP
claude-flow/anthropic-api-key) via `ruflo mcp exec -t managed_agent_*`:
create (haiku) → prompt ("echo … > /tmp/r.txt && cat") → got finished:true,
status:idle, stopReason:end_turn, assistantText:"Done.", toolUses:[bash],
13 events → terminate (sessionDeleted+environmentDeleted). No-key path returns
the graceful error. audit-cli-mcp-tools 311 registered/0 dangling;
audit-tool-descriptions 0 no-guidance; cli build clean.
Co-Authored-By: RuFlo <ruv@ruv.net>
* feat(ruflo-agent): wire the managed-agent (cloud) runtime into the plugin + CI smoke
- skills/managed-agent/SKILL.md — drives the cloud runtime: managed_agent_create
/ prompt / status / events / list / terminate, with the WASM-vs-managed
decision table, the ANTHROPIC_API_KEY prereq + graceful fallback, the
mcpServers-reachability caveat, and the cost/cleanup discipline (a cloud
session bills until terminated). Explicit allowed-tools (no wildcard).
- commands/managed-agent.md — quick "list cloud sessions / status / transcript
/ clean up" command (the cloud sibling of /wasm).
- plugin.json — kept rvagent-wasm + ruvllm-wasm keywords (still built on those);
added managed-agents/anthropic/cloud.
- smoke.sh: step 1 now also asserts name=ruflo-agent + the managed-agents
keywords; step 10 expects ADR-0001 status `Accepted` (was stale `Proposed`,
pre-existing red); new step 12 — managed-agent skill+command exist + all 6
managed_agent_* tools referenced + the skill keeps an explicit allowed-tools
list + offers the wasm_agent_create fallback. 12 passed / 0 failed.
- .github/workflows/ruflo-agent-smoke.yml — new CI job running smoke.sh on any
plugins/ruflo-agent/** change (the plugin had no CI gate before).
Validated: `claude --plugin-dir plugins/ruflo-agent` loads the plugin and lists
its skills (managed-agent, wasm-agent, wasm-gallery); plugin.json + all skill
frontmatters parse; smoke.sh 12/0.
Co-Authored-By: RuFlo <ruv@ruv.net>
* docs(adr): ADR-115 → Accepted + Implementation section (managed_agent_* landed)
Status Proposed → Accepted. Added an Implementation (2026-05-12) section:
the ruflo-wasm→ruflo-agent rename, the 6 managed_agent_* MCP tools (plain
fetch, no new SDK dep, graceful no-key degradation, ADR-112 descriptions),
the managed-agent skill+command, the smoke.sh/ruflo-agent-smoke.yml CI guard,
the live e2e validation (create→prompt→terminate against api.anthropic.com
with the GCP anthropic-api-key) and `claude --plugin-dir` validation, and the
called-out follow-ups (runtime:"managed" unification, deployed HTTP ruflo MCP
server for the cloud-hosted-ruflo combo, task_assign/federation dispatch to a
Managed Agent session, cost-tracking + orphaned-session GC, multiagent/outcomes).
Tracking issue: #1931.
Co-Authored-By: RuFlo <ruv@ruv.net>
* test(cli): no-network guard for managed_agent_* tools (ADR-115)
__tests__/managed-agent-tools.test.ts (10 cases): the 6 managed_agent_*
tools are registered; each has an object inputSchema + a ≥80-char,
ADR-112-ish, unique description that names the wasm_agent_*/native fallback;
and — crucially — every handler degrades gracefully with no ANTHROPIC_API_KEY/
CLAUDE_API_KEY: no throw, structured error mentioning the key + the
wasm_agent_create fallback, no network call (so the CLI/MCP server stays up
offline). Plus managed_agent_prompt's missing-sessionId/message validation.
Co-Authored-By: RuFlo <ruv@ruv.net>
* docs(adr): ADR-115 — add the third runtime (Claude Agent SDK) to the picture
ADR-115 adds the *cloud* runtime (Managed Agents); add a section noting the
natural *third* runtime — the Claude Agent SDK (@anthropic-ai/claude-agent-sdk,
"Claude Code as a library": query()/ClaudeSDKClient, hooks, subagents, MCP,
permission modes, sessions, loads .claude/ config + plugins; runs in-process,
full host trust). ruflo-agent → three runtimes behind one model:
WASM (rvagent) local sandbox, no host fs/net untrusted/portable/offline
SDK (future) your process, your filesystem a real Claude agent loop on the local repo — the in-process `claude -p`
Managed Anthropic cloud container long-running/async, no local infra
The SDK runtime's killer combo: `mcpServers: { ruflo: { command: "npx", args: ["ruflo","mcp","start"] } }` — a *local* stdio MCP server, so the agent gets ruflo's 314 tools with zero deployment (vs Managed Agents needing a reachable URL). Anthropic positions SDK→Managed as prototype→production. Costs: heavy dep (bundles a Claude Code binary), full host trust (no sandbox — least isolated), needs an API key. Implementing it = a follow-up, likely ADR-116 (tracked in #1931).
Co-Authored-By: RuFlo <ruv@ruv.net>
---------
Co-authored-by: Reuven <cohen@ruv-mac-mini.local>
The marketplace registry only listed 20 of 32 plugin source directories,
so users running /plugin marketplace add ruvnet/ruflo never received the
remaining 12 — including ruflo-iot-cognitum, leaving /iot unreachable.
Added: ruflo-adr, ruflo-cost-tracker, ruflo-ddd, ruflo-federation,
ruflo-iot-cognitum, ruflo-knowledge-graph, ruflo-market-data,
ruflo-migrations, ruflo-neural-trader, ruflo-observability,
ruflo-ruvector, ruflo-sparc.
Marketplace now lists all 32 plugins matching the source tree.
Co-authored-by: Reuven <cohen@ruv-mac-mini.local>
- Changed source from 'ruvnet/claude-flow' to './' (must start with './')
- Changed repository from object to string format
- Fixes schema validation errors for Claude Code marketplace
Co-Authored-By: claude-flow <noreply@ruv.io>
- Created .claude-plugin/marketplace.json for marketplace distribution
- Updated hooks/hooks.json with comprehensive hook events
- Fixed all repository references claude-code-flow → claude-flow
- Updated documentation in .claude-plugin/docs/
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>