Coeus v3.9.0 — Install Anywhere
Five install paths. Five surfaces. Zero "why doesn't it work on chat" questions.
The pivot
Anthropic's plugin system has documented bugs (#40600, #28554, #63624) that bite the Personal-upload path: doesn't persist across Cowork restart, dirty-disable state survives reinstall, no auto-update. v3.9 stops fighting Anthropic's bugs and routes around them.
Marketplace install — now the default path
/plugin marketplace add keithceh/Coeus-plugin/plugin install coeus@coeusPersists across restart. Auto-updates on /plugin update coeus. Public mirror at keithceh/Coeus-plugin carries the runtime; source repo stays private under BSL 1.1. release.yml force-pushes the bundle to the mirror on every tag — history-less, source-free, deterministic.
Org / Enterprise — the most durable path Anthropic offers
Admins drop one block into managed claude-config.json and every member gets Coeus on connect:
{ "extraKnownMarketplaces": { "coeus": { "source": { "source": "github", "repo": "keithceh/Coeus-plugin" } } }, "enabledPlugins": { "coeus@coeus": "required" } }Survives uninstall attempts. Bypasses every Personal-upload state bug. Zero member friction.
claude.ai web chat — finally has an answer
Web chat doesn't support plugin uploads. v3.9 ships paste bundles — one self-contained Markdown file per skill, generated by scripts/build-skill-paste.py, downloadable from Releases. Paste as first chat message, ask question next. Six bundles built every release: llm-council, the-architect, ep-council, morpheus, plugin-creator, project-lifecycle. 12-38 KB each.
Install matrix — every Claude surface covered
The boring fixes that made it ship
One YAML colon-space crashed the workflow on first push — quoted the step name, added the bug class to the v3.3.1 regression family. Heredoc with indented EOF in CI bash — de-indented, body terminates cleanly. Two-step if env.SECRET / if not env.SECRET pattern — collapsed to one step with the check in bash. Ship-it lessons that won't recur.
Five install paths. Five surfaces. Zero "why doesn't it work on chat" questions.
The pivot
Anthropic's plugin system has documented bugs (#40600, #28554, #63624) that bite the Personal-upload path: doesn't persist across Cowork restart, dirty-disable state survives reinstall, no auto-update. v3.9 stops fighting Anthropic's bugs and routes around them.
Marketplace install — now the default path
/plugin marketplace add keithceh/Coeus-plugin
/plugin install coeus@coeus
Persists across restart. Auto-updates on /plugin update coeus. Public mirror at keithceh/Coeus-plugin carries the runtime; source repo stays private under BSL 1.1. release.yml force-pushes the bundle to the mirror on every tag — history-less, source-free, deterministic.
Org / Enterprise — the most durable path Anthropic offers
Admins drop one block into managed claude-config.json and every member gets Coeus on connect:
{ "extraKnownMarketplaces": { "coeus": { "source": { "source": "github", "repo": "keithceh/Coeus-plugin" } } },
"enabledPlugins": { "coeus@coeus": "required" } }
Survives uninstall attempts. Bypasses every Personal-upload state bug. Zero member friction.
claude.ai web chat — finally has an answer
Web chat doesn't support plugin uploads. v3.9 ships paste bundles — one self-contained Markdown file per skill, generated by scripts/build-skill-paste.py, downloadable from Releases. Paste as first chat message, ask question next. Six bundles built every release: llm-council, the-architect, ep-council, morpheus, plugin-creator, project-lifecycle. 12-38 KB each.
Install matrix — every Claude surface covered
Surface Path Persists Auto-update
Cowork / Code / Desktop (individual) Marketplace ✅ ✅
Cowork / Code / Desktop (Team/Enterprise) Org-managed ✅✅ ✅
claude.ai web chat Paste bundle per-chat n/a
Air-gapped / legacy Personal-upload ❌ ❌
Maintainers / forks Build locally n/a n/a
The boring fixes that made it ship
One YAML colon-space crashed the workflow on first push — quoted the step name, added the bug class to the v3.3.1 regression family. Heredoc with indented EOF in CI bash — de-indented, body terminates cleanly. Two-step if env.SECRET / if not env.SECRET pattern — collapsed to one step with the check in bash. Ship-it lessons that won't recur.
Full Changelog: keithceh/Coeus@v3.8.0...v3.9.0
Mirror of keithceh/Coeus@v3.9.0. Built and synced by release.yml on every tagged release of the source repo.