CodeVetter · Repo Unpack · System map
msitarzewski/agency-agents
The repo is a content catalog plus a local installer, not a service. Agent source lives in 18 division directories declared by divisions.json. scripts/convert.sh renders tool-specific files under integrations/ (gitignored except READMEs); scripts/install.sh copies or symlinks them into host config directories. Shared parsing and the installer TUI live in scripts/lib.sh. There is no package manifest, database, or HTTP server. A separate desktop app (agency-agents-app) is documented as a consumer of the same catalogs. CI is six GitHub Actions workflows on ubuntu-latest, with the installer also matrixed onto macos-latest.
- 279 agent files start with YAML frontmatter and sit in 18 division directories whose canonical set is the divisions object in divisions.json (academic through testing), each with label, Lucide icon, and hex color.
- strategy/, integrations/, examples/, and scripts/ are explicitly non-divisions. strategy/ holds NEXUS playbooks and runbooks with no agent frontmatter; integrations/ is convert.sh output. NON_DIVISION_DIRS in check-divisions.sh is examples, scripts, integrations, strategy.
- tools.json is the install contract for 16 hosts. Each entry carries id, kebab, format, installKind (per-agent, roster, or plugin), detect dirs, version bin/args, scope, and dest templates. claude-code and copilot use format identity; hermes is installKind plugin; aider and windsurf are roster.
- scripts/convert.sh is the renderer. It sources lib.sh, hardcodes AGENT_DIRS to the 18 divisions, accepts --tool/--out/--parallel/--jobs, and writes only under integrations/ (or --out). It states it never touches user config dirs.
- scripts/install.sh is the installer. ALL_TOOLS lists the same 16 kebab names. Divisions are parsed at runtime by divisions_from_json from divisions.json (awk/grep/sed, no jq) into ALL_DIVISIONS; AGENT_DIRS then appends strategy, which is_agent_file filters out.
- scripts/lib.sh is the shared bash 3.2 library: get_field, get_body, slugify, agent_slug, is_agent_file, fence_open_p/fence_closes_p, and the installer TUI (tui_begin, read_key, draw_frame). It is sourced, not executed, and has no external dependencies.
- Hermes output is not a per-agent renderer. run_conversions special-cases tool hermes and calls python3 scripts/build-hermes-plugin.py --repo-root --out, which reads divisions.json and emits the agency-agents-router plugin.
- Generated agent payloads are gitignored. .gitignore keeps integrations/*/README.md tracked and ignores per-tool trees such as integrations/opencode/agents/, integrations/cursor/rules/, integrations/hermes/agency-agents-router/, and integrations/aider/CONVENTIONS.md.
- CI entrypoints are the six workflows under .github/workflows: test-install.yml (ubuntu-latest and macos-latest), lint-agents.yml, check-divisions.yml, check-tools.yml, check-runbooks.yml, and check-hermes-config-rewrite.yml. All except lint-agents run on every pull_request and on push to main, with no path filter.
- The recommended user path in README is the separate native app at agencyagents.app / msitarzewski/agency-agents-app, which browses the roster and installs into Claude Code, Cursor, Codex, Gemini, and others. The in-repo path is ./scripts/install.sh and ./scripts/convert.sh.
- There is no application runtime in this repo: no package.json, no server, no database. Persistence of installed agents is the host tool's config directory on disk, and the only machine-readable catalogs shipped here are divisions.json, tools.json, and strategy/runbooks.json.