divisions.json now drives the division set. Add scripts/check-divisions.sh
(CI: check-divisions.yml, runs on every PR with no path filter) which fails
if divisions.json disagrees with the directories on disk, the AGENT_DIRS
arrays in convert.sh / lint-agents.sh, or the lint-agents.yml path filters,
or if any entry lacks label/icon/color.
Fixes pre-existing drift surfaced by the new check: integrations was missing
from convert.sh and lint-agents.sh; integrations and strategy were missing
from lint-agents.sh and the lint workflow (so those agents weren't being
linted at all).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Establishes a source of truth for how each division (top-level agent directory)
is presented: a display label, a Lucide icon name, and a brand color. Lets the
Agency Agents app (and any other tooling) render divisions consistently —
including fixing "GIS" (was title-cased to "Gis") and covering `gis` +
`integrations`, which had no metadata before.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace literal passwords in two testing-agent code samples with
environment-variable reads — the secure, idiomatic pattern for each
framework rather than a placeholder string:
- testing-api-tester.md: 'secure_password' -> process.env.TEST_USER_PASSWORD
- testing-performance-benchmarker.md: 'password123' -> __ENV.TEST_USER_PASSWORD (k6)
Removes the weak-credential examples flagged in #477 and models good
secrets hygiene for anyone copying these snippets.
Closes#477
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Account for the 9 agents merged in #450-456, #568, #569:
- README: add 3 Engineering rows (Multi-Agent Systems Architect,
Drupal/WordPress Shopping Cart Engineer) + 6 Specialized rows
(CFO, ESG & Sustainability Officer, Data Privacy Officer,
Operations Manager, M&A Integration Manager, Organizational
Psychologist); bump Stats + acknowledgements 209 -> 218.
- install.sh: fix `--list` as the final argument aborting with
exit 1 under set -e (shift 2 with only one positional). Now
treats a missing/flag-like value as "all" and shifts once.
Roster drift is now zero (218 linked rows = 218 source agents);
convert/install auto-discover the new agents via AGENT_DIRS
(specialized/ + engineering/). lint: 0 errors, 218 files.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat: installer v2 — selective install, interactive TUI, consolidate cluster
One coherent, dependency-free installer (bash 3.2+, zero deps) that
consolidates 7 conflicting install.sh PRs and fixes#532.
Selective install (compose freely; empty = everything):
- --division / --agent / --agents-file filter across both source tools and
the flat converted outputs via a slug-based allow-set (#157, #487)
- --list [tools|teams|agents] and --dry-run
Install mechanics:
- --link symlink vs copy (#233); --path + env-var fallbacks (#216);
auto-run convert.sh when integration files are missing (#426);
resolve_tool_path dynamic detection (#327); set -e-safe increments (#505)
Interactive wizard (pure bash):
- Tools -> Teams -> Review, arrow-key nav, space toggle, a/n all/none,
live / search, live agent counts, inline OpenCode capacity warning,
alt-screen takeover with trap-based Ctrl-C restore, non-TTY fallback
#532: installing a subset keeps you under OpenCode's ~119 scanner cap
(upstream anomalyco/opencode#27988); installer warns when exceeded; README
documents it.
New scripts/lib.sh holds shared frontmatter/slug helpers (used by
convert.sh too) + ANSI/TUI primitives.
Closes#157, #216, #233, #327, #426, #487, #505.
Co-Authored-By: kienbui1995 <kienbui1995@users.noreply.github.com>
Co-Authored-By: Shiven0504 <Shiven0504@users.noreply.github.com>
Co-Authored-By: rounakkumarsingh <rounakkumarsingh@users.noreply.github.com>
Co-Authored-By: toukanno <toukanno@users.noreply.github.com>
Co-Authored-By: ilyaivasyk <ilyaivasyk@users.noreply.github.com>
Co-Authored-By: Jason2031 <Jason2031@users.noreply.github.com>
Co-Authored-By: ShaoJiaZhen <ShaoJiaZhen@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(installer): robust arrow-key reading (bash 3.2 integer timeouts + SS3)
read_key used a fractional -t 0.01 timeout, which bash 3.2 (/bin/bash on
macOS) doesn't support — so arrow-key escape bytes ([A/[B) leaked through
and were parsed as letter commands (toggling instead of moving). Rewrite
to read the sequence byte-by-byte with integer timeouts and handle both
CSI ([) and SS3 (O) cursor modes.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(installer): clear-to-end-of-line per row so frames don't bleed
draw_frame only cleared below the frame (\033[0J), so when a new screen's
lines were shorter than the previous screen's, the old tails (tool paths,
warnings) bled through on the right. Now erase-to-eol (\033[K) on every
line before the screen-clear.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(installer): 2-column grid for Tools/Teams on the Review screen
Replaces the wrapping space-joined 'Tools:'/'Teams:' lines with a compact
column-major 2-column grid (each item on its own line, like the selectors),
so long rosters stay readable and on-screen instead of wrapping.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(installer): Review layout — space after Teams, warning below Install
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(installer): consistent screen layout across all 3 screens
Standard vertical rhythm everywhere: pager -> description -> content ->
selection summary -> navigation -> warnings. Splits the selector footer
into separate summary/nav/warning lines (SEL_SUMMARY_FN/SEL_NAV/
SEL_WARN_FN) and reorders the Review screen to match.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: kienbui1995 <kienbui1995@users.noreply.github.com>
Co-authored-by: Shiven0504 <Shiven0504@users.noreply.github.com>
Co-authored-by: rounakkumarsingh <rounakkumarsingh@users.noreply.github.com>
Co-authored-by: toukanno <toukanno@users.noreply.github.com>
Co-authored-by: ilyaivasyk <ilyaivasyk@users.noreply.github.com>
Co-authored-by: Jason2031 <Jason2031@users.noreply.github.com>
Co-authored-by: ShaoJiaZhen <ShaoJiaZhen@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Migrates Gemini CLI to native subagents (~/.gemini/agents/) + quotes zk-steward description. Rebased from #472; e2e-verified with real gemini v0.43.0. Closes#473.
Co-Authored-By: Tomo Wang <tomo_wang@163.com>
The README Stats and acknowledgements were stale (144 / 147 agents, "12
divisions") and 19 merged agents were missing from the division tables.
- Update both count statements to 203 agents across 14 divisions
- Add 19 missing roster rows: Design (1), Engineering (4), Marketing (5),
Project Management (1), Sales (1), Specialized (7)
- De-hardcode the Gemini CLI README ("61 Agency agents" -> "all Agency
agents") so it can't go stale again
Verified: every on-disk agent is now linked in the README (0 missing).
Thanks to the contributors whose agents are now cataloged — @epowelljr,
@hedonnn, @Subhodip-Chatterjee, @Shiven0504, @DKFuH, @ahteshamsalamatansari,
@ahruslan17, @lz-googlefycy, @jmlozano1990, @kriptoburak — and everyone
building out The Agency.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
marketing/marketing-email-strategist.md (#509) landed with CRLF line
endings, which violate .gitattributes (*.md text eol=lf) and broke
./scripts/lint-agents.sh — head -1 saw "---\r" and reported a confusing
"missing frontmatter opening ---" on a file that visibly starts with ---.
- Normalize that file to LF (content-neutral; 0 non-whitespace changes).
- Add a CRLF guard to lint-agents.sh that fails fast with a clear,
actionable message instead of the misleading frontmatter error.
Thanks @hedonnn for the Email Marketing Strategist agent — great content;
just needed the line endings normalized.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds scripts/check-agent-originality.sh, which flags new agents that
substantially duplicate an existing one. It compares each candidate
against the whole roster (and other files in the same change set) using
entity-neutralized 8-word shingle overlap, so a find-replace "re-skin"
that only swaps a country/platform name can't slip past review.
- CI: new "Check agent originality" step in lint-agents.yml runs it on
changed agent files; a >=40% match fails the build.
- Docs: CONTRIBUTING.md gains a self-run "before submitting" step, a
checklist item, and a "things we'll always close" bullet for re-skins.
Calibration: across the existing 184-agent library the worst same-pair
similarity is ~1.5% (median 0%), so the WARN >=20% / FAIL >=40% defaults
leave a wide margin against false positives.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds finance/ to AGENT_DIRS in all 3 scripts, CI workflow trigger paths, CONTRIBUTING.md category list, and README.md division roster. Also fixes duplicate sales entry in lint-agents.sh.
Fixes 3 agents for CONTRIBUTING.md template compliance (missing sections, incorrect headers). Reverts 2 tooling PRs (#371 promptfoo, #337 Vitest) that were merged without required Discussion — Discussions created at #434 and #435.
Thanks @MeghanBao — Civil Engineer is a welcome addition to the Specialized Division. Closes#287!
(Apologies for the back and forth — we were in the middle of a big triage session.)
Thanks @vasanth15-hts — great rewrite of the Security Engineer. The adversarial thinking framework and expanded STRIDE analysis are a real improvement.
Refined from #51 by @SiamakSafari — restructured into standard template
with proper YAML frontmatter, deliverable templates, and platform-specific
citation patterns.
Co-Authored-By: SiamakSafari <SiamakSafari@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Clarify what belongs in a PR vs. a Discussion — agent files are always
welcome, but tooling/architecture/bulk changes should start as a
Discussion first. Committed build output will always be closed.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Running `convert.sh --tool aider` previously also wrote the Windsurf
output (and vice versa) because write_single_file_outputs dumped all
formats unconditionally. Each single-file format now only writes when
its tool is selected.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Added to Engineering: AI Data Remediation Engineer, Data Engineer, Feishu
Integration Developer. Added to Marketing: Book Co-Author, Cross-Border
E-Commerce Specialist, Douyin Strategist, Livestream Commerce Coach, Podcast
Strategist, Private Domain Operator, Short-Video Editing Coach, Weibo
Strategist. Added to Specialized: Automation Governance Architect, Corporate
Training Designer, Government Digital Presales Consultant, Healthcare Marketing
Compliance, Recruitment Specialist, Study Abroad Advisor, Supply Chain
Strategist.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Great engineering agents — Code Reviewer, DB Optimizer, Git Workflow, Software Architect, and SRE all fill genuine gaps. Nice vibes too. Clean split from #124.
Add yellow, violet, rose, lime, gray, and fuchsia to
resolve_opencode_color() — these were passing through as
plain strings and breaking OpenCode's hex-only color validation.
Fixes#108
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add sales/ to claude-code and copilot installer dir lists
- Add sales/ to lint-agents workflow trigger and changed-files filter
- Add LinkedIn Content Creator to marketing table in README
- Update agent count to 120
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Auto-detect ~/.openclaw directory or openclaw CLI
- Copy SOUL.md, AGENTS.md, IDENTITY.md per agent to ~/.openclaw/agency-agents/
- Add to interactive selector and tool list
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
OpenClaw support:
- Add section-splitting convert_openclaw() to convert.sh that routes
## headers by keyword into SOUL.md (persona) vs AGENTS.md (operations)
and generates IDENTITY.md with emoji + vibe from frontmatter
- Add integrations/openclaw/ to .gitignore
Frontmatter additions (all 112 agents):
- Add emoji and vibe fields to every agent for OpenClaw IDENTITY.md
generation and future dashboard/catalog use
- Add services field to carousel-growth-engine (Gemini API, Upload-Post)
- Add emoji/vibe to 7 new paid-media agents from PR #83
Agent quality:
- Rewrite accounts-payable-agent to be vendor-agnostic (remove AgenticBTC
dependency, use generic payments.* interface)
Documentation:
- CONTRIBUTING.md: Add Persona/Operations section grouping guidance,
emoji/vibe/services frontmatter fields, external services editorial policy
- README.md: Add OpenClaw to supported tools, update agent count to 112,
reduce third-party OpenClaw repo mention to one-line attribution
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add game-development to AGENT_DIRS in convert.sh, lint-agents.sh,
install.sh, and the CI workflow
- Remove maxdepth 1 from find commands so nested subdirectories
(e.g., game-development/unity/) are discovered
- Update CI git diff globs to **/*.md for recursive matching
- Remove strategy from lint AGENT_DIRS (playbooks, not agents)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Prepares infrastructure for the upcoming Paid Media Division (PR #83).
Registers paid-media in convert.sh, lint-agents.sh, install.sh, and
the lint-agents GitHub Actions workflow.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>