installing-squads
Skill3 starsChanged 18 days agoMITView on GitHub
Installs, updates and removes squads through squadctl. Use when adding, updating, repairing or removing a squad.
- Reads credentials
In this repository11 other files it gives its agents.
- AGENTS.mdAGENTS.md
- llms.txtllms.txt
- assigning-modelsSkill
- authoring-skillsSkill
- changing-botsSkill
- contributing-upstreamSkill
- designing-squadsSkill
- finding-capabilitiesSkill
- hermes-platformSkill
- managing-projectsSkill
- tracking-updatesSkill
The file
We split this skill into the rules it gives an agent
8 rules. About 0 are common, 2 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 29
Every bot gets every provider the user connected (keys and provider plugins).
- Very specific: line 41
If the notes list no model assigned, run skills/assigning-models first.
- Distinctive: line 54
After the first install, tell the user once: "Sessions: pick a manager in the bottom selector to see its projects.
- Very specific: line 56
Update ("update yourself"): run scripts/hpy auto_update.py --force and reply with its output.
- Very specific: line 75
Remove: scripts/hpy squadctl.py uninstall <key> --dry-run, show it.
- Very specific: line 92
Document the local fleet without touching it: scripts/hpy squadctl.py inventory [--profiles a,b] --out local/fleet.yaml.
- Very specific: line 139
After apply --src <checkout>, each bot's copied project_sync.py matches the checkout's file (cmp): a stale copy re-creates folders a fix …
- Distinctive: line 142
After an apply that copies a key: count the key line in each bot's env file (never print it) and send each bot a one-line chat, in parallel.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Installing squads
When to Use
- The user says "set me up", "install
<squad>", "update my installation" or "remove<squad>". scripts/hpy squadctl.py doctorreports awarnorfail.
Procedure
- First run ("set me up"):
scripts/hpy squadctl.py plan --self --json, assign models (skills/assigning-models, keybuilder), then on OKscripts/hpy squadctl.py apply --self --models local/models-builder.json. Then ask once which squads to install: "Only the builder (default), Web, Marketing, Jobs, or Everything?" (squadctl.py status->availablelists local squads too). No answer or "only the builder": install nothing more. For the chosen squads run onescripts/hpy model_advisor.py <key> [<key>...] --json > local/models-squads.json, run the per-bot survey ofskills/assigning-modelsstep 4 for all their bots, then ask one OK, then run steps 2 and 4 per squad with--models local/models-squads.json. - Any squad:
scripts/hpy squadctl.py plan <key> [--with <optional-bot>] --json. Show the botactions,pending,notesandoptional_skipped. Apply only after the user's explicit OK. Aboardvaluepending owner action: ...is a command the user runs in their terminal. Every bot gets every provider the user connected (keys and provider plugins); the plan lists each copy, so the user's OK covers it. Acredentials <NAME>note is a provider not connected yet: the user connects it (hermes model), then apply again. Never copy a key by hand. A bot withshared_browser: true(every shipped bot that browses) gets the machine's one signed-in browser: one per machine, signed in once by the owner (scripts/hpy shared_browser.py status|install|login <url>). No bot getsbrowser.use_real_profile, even when the owner has it on for their own chats: a profile copy wins overcdp_urland fails while their browser is open.applyturns off a copy an older version mirrored and clearsbrowser.real_profile_pin. Never set up any other browser, debugging port or cookie copy. - If the notes list
no model assigned, runskills/assigning-modelsfirst. Theprojectsline is whatapplyruns after the bots (project_sync.py --setup): mention in the OK message any bot whosedesktop.repo_scan_rootsit resets. scripts/hpy squadctl.py apply <key> [--models <file>] [--with <bot>] [--bots a,b] [--skip-skills] [--confirm <id>]. Apendingitem (licence or disclosure) installs only on a later apply with--confirm <id>, after the user answers its question.- Check:
scripts/hpy squadctl.py status <key>andscripts/hpy squadctl.py doctor. Every bot starts with web search (keyless, no API key), terminal and delegation;applyinstalls Hermes's managed browser. A:webcheck that is notokis fixed before the user works. After the first install, tell the user once: "Sessions: pick a manager in the bottom selector to see its projects; + creates a new one." - Update ("update yourself"): run
scripts/hpy auto_update.py --forceand reply with its output. It is the same script the dailybuilder-updatecron runs: it updates the builder when the repo has a new version, then brings every installed bot up to date. Lines startingNeeds you:are--confirmitems for step 4, or a skill edited here and changed upstream: the new version is installed and the local copy is in the named backup; move what still applies into the new version (generic rules go upstream,skills/contributing-upstream). Local skill edits that do not overlap the update are merged and kept. A locally learned rule the new design contradicts is reworded to that design, not dropped: restoring the old rule, or deleting the file, throws away the only copy of a lesson learned in production. After the update, grep the installed copies for a sentence the release retired; a rule merged back from an older edit still teaches the previous design to the bot and to the next session.builder-updateis a script cron with no agent, so it spends no tokens, but its fires come from that profile's gateway: on a new machine confirm the job exists and ran recently (hermes -p builder cron list) before telling the user updates are automatic, and runauto_update.py --forceonce after the first install. - Remove:
scripts/hpy squadctl.py uninstall <key> --dry-run, show it; on OK run it without--dry-run(--keep-profileskeeps the profiles). It exports each profile tolocal/backups/, removes<key>-*cron jobs, deletes the profiles, archives the board and leaves project folders andlocal/squads/<key>/in place. - Chat channel ("send it to my Discord/Telegram"): only the squad manager
gets one; workers reach the owner through the manager. The owner creates
the platform bot and stores its token with
hermes -p <manager> gateway setup(never handle a token yourself). Thenscripts/hpy squadctl.py connect <manager> discord --channel <name> [--create] --dry-run, show it, and on OK run it without--dry-run, thenhermes -p <manager> gateway restart. Other platforms take--chat-id. An error with an invite link means the bot is not in the server yet: the owner opens the link, then run connect again. Jobs markednotify: truemove to the channel; housekeeping crons stay on Bot Chat. Ask the owner to write one message there to prove replies; a watch cron is silent until a card needs them, so say so. - Document the local fleet without touching it:
scripts/hpy squadctl.py inventory [--profiles a,b] --out local/fleet.yaml. It reads config, ui_meta, skills and cron of every profile, never.envorauth.json, and writes only underlocal/. The result is local data: never published (skills/contributing-upstream).
Pitfalls
- Installing a squad the user did not choose: every squad is opt-in, even on "set me up" and when another AI started the install.
- Deleting profiles by hand: use
uninstall, which exports first. apply --selfon a machine without the builder profile: it refuses; the user runs the README install first.- A
doctorlineapp <name> not foundis not proof the bot is broken: an official installer often drops a CLI in a home folder (~/.bun/bin/bun) and edits only the shell rc, so a non-login shell lacks it onPATH. Check how the consuming script resolves the binary before acting: when that finds the tool anddoctordoes not, the defect is the checker. Teach the shared resolver the installer's home location (APP_HOME_BINSinsquadctl.py) with a test that goes red without it; never tell the user to reinstall or hand-editPATH, and never mark the bot as needing repair. - An install or apply trap that leaves the bot on a stale copy (a symlink in
the source folder, a path given to
hpy, anenv:auth row, a mirrored setting):references/apply-traps.md. - Applying a squad whose profiles another agent is editing on the same machine: a profile holds one copy, so the apply overwrites their work in progress. Apply only the squads you changed, name the ones you left alone and why, and say which version they must rebase onto.
Verification
scripts/hpy squadctl.py status <key>shows every botokwith its model.scripts/hpy squadctl.py plan <key> --jsonreports every botunchanged.- A squad with
shared_browserbots:scripts/hpy shared_browser.py statusshowslisteningandplist_current: trueafter the apply. - A connected manager:
doctorshows<manager>:channel:<platform>ok. hermes -p <bot> cron listshows exactly the<key>-*jobs the manifest declares,<key>-browser-sweepon each squad's manager included. That sweep is one machine-wide job despite the cron on every manager: it takes a lock and a 150-minute stamp next to the shared browser's state, and the losing fires exit 0 with a skip. Run it by hand after an update instead of assuming it ran.- An apply that changes a rule, a script or a template is verified per bot by
content, not by the
changedcount: grep the new sentence in each bot'sSOUL.md, list the new script under its skill folder, then send the smoke chat. A profile copied from a stale checkout reportschangedand still runs the old rule. - After
apply --src <checkout>, each bot's copiedproject_sync.pymatches the checkout's file (cmp): a stale copy re-creates folders a fix removed while the apply still reportsok. - After an apply that copies a key: count the key line in each bot's env file (never print it) and send each bot a one-line chat, in parallel. A bot is broken only on a real empty answer plus a fallback line, not on a parsing miss.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

