Read this file, then follow the steps below to set up the council plugin for the user.
Steps
-
Detect the user's shell (
$SHELL) and resolve the config file:- zsh →
~/.zshrc - bash →
~/.bashrc(or~/.bash_profileon macOS if.bashrcdoesn't exist) - fish →
~/.config/fish/config.fish
- zsh →
-
Check if the council repo exists locally:
- Look for
.claude-plugin/plugin.jsonin the current directory - Check common locations:
~/git/octant-council-builder,~/octant-council-builder,~/projects/octant-council-builder,~/code/octant-council-builder,~/src/octant-council-builder - If found, store the absolute path as
$PLUGIN_DIR - If not found, set
$REPO_FOUND=false
- Look for
-
Before doing anything else, explain to the user what setup will do and ask for confirmation. Include:
- How plugins work:
--plugin-dirtells Claude Code to load.claude-plugin/plugin.jsonfrom a directory and register allskills/*/SKILL.mdfiles as slash commands - If repo not found: that we'll clone it from
https://github.com/golemfoundation/octant-council-builder.git - That we'll create a shell alias (e.g.
alias council='claude --plugin-dir /path/to/repo') - Why the alias is useful: keeps things isolated — the council only loads when you use the alias, plain
claudestays clean - That we'll enable the agent teams env var (
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1) - That the alias points at the local clone, so editing agent/skill markdown files takes effect immediately
- Mention
/reload-pluginsfor picking up skill changes during a live session - Wait for user confirmation before proceeding. If they cancel, stop.
- How plugins work:
-
If repo was not found, ask where to clone it (default:
~/git/octant-council-builder) and run:git clone https://github.com/golemfoundation/octant-council-builder.git "$CLONE_DIR"Set
$PLUGIN_DIRto the clone location. -
Ask the user what alias name they want (e.g.
council,pgc,eval,betty,hal). -
Check the alias isn't already taken (
command -v/alias). If it is, let them know and ask again. -
Remove any existing lines tagged
# public-goods-councilfrom the config file, then append:For zsh/bash:
alias NAME='claude --plugin-dir PLUGIN_DIR' # public-goods-council export CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 # public-goods-councilFor fish:
alias NAME "claude --plugin-dir PLUGIN_DIR" # public-goods-council set -gx CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS 1 # public-goods-council -
Tell the user to run:
source [config file] && cd $PLUGIN_DIR && $ALIAS_NAMEThen explain:
- How the alias works:
--plugin-dirloads the plugin from the repo. The council skills only appear when you use the alias — plainclaudestays unaffected. - Developing your council: agents are markdown files in
agents/— edit them and changes are picked up on the next/council:evaluate. Skills are inskills/*/SKILL.md— run/reload-pluginsinside a session to pick up skill changes without restarting. No build step, no compilation. - Sharing your council: once you design your own council, push your fork and share the repo URL. Anyone can clone it and run
/council:settingsto install your council as a plugin.
- How the alias works: