Skip to content

Public triumvirate: bootable out of the box (drop syncntn, default webui creds, accept source.npm) - #75

Merged
antra-tess merged 5 commits into
mainfrom
public-triumvirate-hygiene
Aug 6, 2026
Merged

Public triumvirate: bootable out of the box (drop syncntn, default webui creds, accept source.npm)#75
antra-tess merged 5 commits into
mainfrom
public-triumvirate-hygiene

Conversation

@Anarchid

@Anarchid Anarchid commented Aug 3, 2026

Copy link
Copy Markdown
Collaborator

The public triumvirate currently cannot boot from a fresh clone, for several independent reasons. This PR fixes all of them.

1. validateRecipe rejects cook's source.npm form (recipe unloadable)

Since ee66b99 the miner's gitlab server declares "source": { "npm": "@zereight/mcp-gitlab@2.1.25" } — cook's registry-bake grammar. The validator only knew the git form and demanded source.url, so recipes/knowledge-miner.json failed to load at all:

error: mcpServers.gitlab.source.url must be a non-empty string

Fixed: source now accepts exactly one of url (git) / npm (registry spec), still validate-and-ignore at runtime. New test/recipe-mcp-source.test.ts covers both forms plus the neither/both/empty rejections.

2. syncntn and scribe blocks dropped from knowledge-miner.json

syncntn: the Notion adapter it points at (../syncntn/...) is org-internal — no public source exists, so the default block can only produce a startup failure (missing-env error at best; with NOTION_* set, a spawn ENOENT on the dangling path). It also made the recipe un-cookable (COPY syncntn with no sibling checkout).

scribe: same class — a bare ${GEMINI_API_KEY} fails recipe load for anyone without a Gemini key, and ../scribe-mcp doesn't exist on a fresh clone; neither the key nor the sibling install was mentioned anywhere in the setup guides, so even a flawless guide-following install got a crashed miner.

Both are now add-a-block opt-ins: SETUP.md and TRIUMVIRATE-SETUP.md document the block to add and, for scribe (which unlike syncntn is publicly available — dariakroshka/scribe-mcp), the full enable path: sibling clone, bun install, GEMINI_API_KEY. The miner's system prompt is unchanged — its syncntn--* / scribe--* sections describe tools the agent simply won't have until wired in.

The default miner surface is now zulip + gitlab + ddg — exactly the sources the setup guide actually walks you through.

3. webui gets working default credentials

triumvirate.json had "webui": true, which binds 0.0.0.0 and trips assertSafeBind — the host refuses to start without basicAuth (conductor exits 1 in cooked containers). Now:

"webui": { "basicAuth": { "username": "${WEBUI_USERNAME:-admin}", "password": "${WEBUI_PASSWORD:-admin}" } }

Defaults to admin:admin for the local/demo case, overridable from .env; .env.example and the setup guide both carry a change-these-for-anything-remote warning, and TRIUMVIRATE-SETUP.md now actually mentions the web UI exists (port 7340).

Verification

  • bun test: 598 pass / 0 fail (5 new)
  • All four triumvirate recipes load through loadRecipe in an env with no GEMINI_API_KEY / NOTION_* set (miner resolves to zulip, gitlab, ddg; webui resolves to admin:admin with env unset)
  • Changelog entries under ## Unreleased per CONTRIBUTING

🤖 Generated with Claude Code

Anarchid and others added 5 commits August 3, 2026 17:25
validateRecipe required source.url, but connectome-cook's source grammar
also has the registry form { npm: "pkg@version" } — which the shipped
knowledge-miner recipe uses for its gitlab server since ee66b99. Result:
the public miner recipe failed to load with "mcpServers.gitlab.source.url
must be a non-empty string". Accept exactly one of url / npm; the field
stays validate-and-ignore at runtime.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Two defaults in the public recipes guaranteed a broken first launch:

- knowledge-miner.json shipped a syncntn block pointing at an org-internal
  Notion adapter nobody outside has (and with NOTION_* vars set, the
  dangling ../syncntn path dies at spawn instead of failing the env check).
  Drop the block; Notion is now documented as an add-a-block opt-in in
  both setup guides, with the prompt tool-name contract unchanged.

- triumvirate.json enabled webui bare, which binds 0.0.0.0 and makes the
  host refuse to start without basicAuth (conductor exits 1 in cooked
  containers). Default to ${WEBUI_USERNAME:-admin}/${WEBUI_PASSWORD:-admin}
  and document the override in .env.example and the setup guide.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…aults

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Same crash-by-default class as syncntn: bare ${GEMINI_API_KEY} fails
recipe load for anyone without a Gemini key, and the ../scribe-mcp
sibling checkout does not exist on a fresh clone — while neither the
key nor the install appeared anywhere in the setup guides, so a
guide-following install always got a crashed miner. Unlike syncntn the
server is publicly available, so both guides now document the enable
path (sibling clone + block JSON + GEMINI_API_KEY); the miner prompt
s §5 scribe instructions are unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@antra-tess
antra-tess merged commit bc502c1 into main Aug 6, 2026
0 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants