Compassion Switzerland's shared setup for AI coding agents on our Odoo work, for Claude Code. Two layers:
- Guardrails, enforced for everyone through managed settings: no reading credentials, no force-push, ask before dropping a database or upgrading a module.
- Optional plugins in the
compassionmarketplace, visible in/plugin→ Discover. Install all, some or none; remove any whenever you like.
| Plugin | What it gives you |
|---|---|
compassion-bundler |
All the Compassion plugins in one install |
find-docs |
Current docs for any library through Context7, and Odoo docs pinned to your repository's version |
agent-browser |
The agent checks its work in your local Odoo through a real Chrome: screenshots, console errors, forms |
assisted-by |
Every commit the agent makes ends with Assisted-by: <model id>, <effort>, <harness> |
The catalog is a common floor, not anyone's personal setup.
Before you start: Claude Code, logged in with the organization's account. Node.js 22.13 or newer for
find-docs,agent-browserandassisted-by, and npm for the first two (on Debian and Ubuntu, npm is a package of its own). Without them, each of these plugins warns when a session starts.
Everything, in one install (recommended)
/plugin install compassion-bundler@compassion
Or only what you want, from /plugin → Discover, or one at a time:
/plugin install find-docs@compassion
/plugin install agent-browser@compassion
/plugin install assisted-by@compassion
Or let your agent do it. Paste this into a new Claude Code session; it asks before each step:
Set me up with the compassion-agent-toolkit, following ONBOARDING.md from the CompassionCH/compassion-agent-toolkit repository.
/exit
then start claude again. The plugins load in the new session.
Higher rate limits. Run it once, in a terminal:
npx ctx7@latest loginNothing to do now: the first time the agent needs the browser, it offers to install the CLI and its Chrome, asking before each step.
No compassion marketplace in /plugin? (machine without the organization's settings)
Add it once:
/plugin marketplace add CompassionCH/compassion-agent-toolkit
Then turn on its updates: /plugin → Marketplaces → compassion →
Enable auto-update.
-
Updates are automatic. Claude Code fetches new versions when a session starts, and the next session loads them (or run
/reload-plugins). -
With the bundler, new plugins arrive on their own. When a plugin joins the catalog, the bundler's update installs it; nothing to do. If you picked plugins one by one, install new ones from Discover when you want them.
-
Remove or pause a plugin:
/plugin→ Installed → Uninstall or Disable. The bundler's plugins stay on together: to drop one, uninstall the bundler first (its plugins stay installed), then the one you don't want. -
For a whole repository: run this in the repository, then commit
.claude/settings.json. Everyone opening the repository is offered the plugin.claude plugin install <plugin>@compassion --scope project
Put the Odoo version on line one of the repository's CLAUDE.md (draft one
with /init) or AGENTS.md, plus your local Odoo URL. find-docs pins the
docs to that version, and agent-browser uses that URL.
Context7 works without an account, at lower rate limits. For higher ones, log
in once (install step 3) or set CONTEXT7_API_KEY. Never paste a key into the
chat; if you do, revoke it and make a new one.
ctx7 setup would install Context7's generic find-docs too: keep one,
ideally this one, which pins Odoo versions.
With assisted-by, every commit the agent makes ends with, for example:
Assisted-by: claude-opus-5-5, high, claude-code
It says AI helped while a human stays the author, in line with the OCA's AI
policy. A hook adds it from what Claude Code records, so it never depends on
the agent remembering, and skips commits that already have one. It costs
nothing in context and never blocks a commit. Unknown values read unknown.
To count them:
git log --format='%(trailers:key=Assisted-by,valueonly,separator=)' | grep . | sort | uniq -cPaste admin/managed-settings.json in claude.ai
→ Admin settings → Claude Code → Managed settings (Owner role). It:
- registers the
compassionmarketplace with auto-update, installing no plugin; - blocks the retired all-in-one
compassion-agent-toolkitplugin (0.3 and earlier); - denies reading credentials:
odoo.conf,.odoorc,~/.pgpass,.env*, private SSH keys,*.pem,*.key; - denies force-pushes; plain pushes stay allowed;
- switches off Claude Code's
Co-Authored-Byline; - sets
managedSourcesBehaviortomerge: a machine that also has an MDM profile or a localmanaged-settings.jsonapplies those too, combined with this policy (lists union, the strictest lock wins), instead of ignoring them. Needs Claude Code v2.1.242 or later.
These rules are guardrails, not a vault: keep production credentials off development machines and use anonymized databases (Odoo's neutralize is not anonymization).
The single compassion-agent-toolkit plugin is retired. Follow
Install to get the same tools back with compassion-bundler. The
Context7 key from the old plugin's options is no longer used: log in again
(step 3).
/feedback, and thumbs up or down on claude.ai, send the whole
conversation to Anthropic, kept up to 5 years. Check it holds no personal
data, credentials or confidential code first.
claude plugin validate . # the marketplace
for p in plugins/*/; do claude plugin validate "$p"; done # each plugin
claude --plugin-dir ./plugins # try them locallyReleasing = bump that plugin's version and push. Without a new version,
nobody receives the change. Changes to admin/managed-settings.json apply
once the workspace owner pastes them.
Adding a plugin:
- Create
plugins/<name>/.claude-plugin/plugin.json(name,version, a one-linedescription), with its skills or hooks beside it. - Add it to
.claude-plugin/marketplace.json:source: "./plugins/<name>". - Add it to
compassion-bundler'sdependenciesand bump the bundler's version, or bundler users never receive it. - Add a row to the table above.
One job per plugin, each useful on its own.
MIT, see LICENSE.