Commit Graph
403 Commits
Author SHA1 Message Date
Sergio Romero 1e2d1b940e test(install): add a regression suite for install.sh + CI on Linux and macOS (#772)
* test(install): add a regression suite for install.sh + CI on Linux and macOS

install.sh is the largest script in the repo and has no tests. Every install
bug so far has been a silent one — agents copied to the wrong directory, a
path with a space split in two, a filter that installed everything — and the
only signal was a user noticing later.

scripts/test-install.sh pins the installer's observable contract:

  * destinations: default $HOME/.claude/agents, --path override, tool env var
    override, and --path winning over the env var
  * selection: --division, --agent, --agents-file (comments/blank lines)
  * --dry-run writes nothing; unknown --tool exits non-zero
  * --link produces symlinks; a second run installs the same set, not dupes
  * a destination containing spaces stays one directory

Expected counts are derived from divisions.json + lib.sh at runtime, so the
suite doesn't need updating when agents are added. Every case runs with HOME
pointed at a throwaway sandbox, so a broken default path can never write into
the real config. bash 3.2 + BSD userland, no new dependencies.

Verified it fails on the regressions it claims to catch: unquoting install_file
fails only the spaces case, neutering slug_allowed fails the four selection
cases, un-short-circuiting --dry-run fails the dry-run case, and ignoring the
env var in resolve_dest fails the env-override case.

CI runs it on ubuntu-latest and macos-latest (macOS ships bash 3.2, Linux
ships bash 5) plus bash -n over every script in scripts/.

* test(install): pin the parallel worker argument regression (#755)

Review feedback: the existing "paths with spaces" case selects a single tool,
so it stays on the serial path and never reaches the worker spawn where #755's
bug lives. Adds a case that does.

  --tool claude-code,copilot --parallel --jobs 1 --agents-file <spaced path>
  --path "<home>/My [Agents]/dest dir"

with a serial control immediately before it (same two tools, same spaced and
globbed --path, no --parallel) so a failure is attributable to the worker
hand-off rather than to the selection filter.

Marked xfail rather than a hard assertion: it fails on main today and passes
with #755 applied, and encoding a known-broken case as a hard failure would
turn CI red for reasons unrelated to whatever PR is being reviewed. xfail
never fails the suite; when the case starts passing it prints a note to
promote it to assert_eq (one-word edit). Measured on macOS bash 3.2.57:
main -> 25 passed / 1 xfail, #755 applied -> 26 passed / 0 failed, both
deterministic over repeated runs.

Note on --jobs 1: workers are still spawned through the same xargs/sh
hand-off, so argument propagation is exercised in full. Serializing them
keeps a second, unrelated defect out of this case — with two workers running
concurrently against one shared --path, the parent exits non-zero on ~3 runs
in 5 once the workers actually copy anything (one worker's cp fails with
ENOENT on the shared destination). That race is invisible on main only
because the workers currently install nothing at all; --jobs 1 or per-tool
destinations are clean. Reported in the PR discussion.
2026-09-02 20:48:48 -05:00
Michael SitarzewskiandClaude Fable 5.1 3febe026c1 fix(lib): get_field strips a quoted YAML scalar's outer quotes so quoted sources don't double-wrap (#826)
Contributors keep reaching for the same fix when a description contains ": "
and breaks YAML frontmatter: double-quote the source scalar (#473 for
zk-steward, re-proposed in #548, and again in #810). #778 fixed the same
problem one layer down by having the converters emit quoted scalars. The two
compose badly: get_field returned a quoted source's quotes as content, so
yaml_quote wrapped them again and every generated file for an already-quoted
agent shipped as  description: '"..."'  with a literal quote leaking into the
parsed value. zk-steward and ai-data-remediation-engineer are affected on
main today.

get_field now treats one matching outer pair of double or single quotes as
delimiters: it strips them and unescapes (\" -> ", \\ -> \, '' -> '). Quoting a
source description is now safe and harmless, so #473/#548/#810's instinct and
#778's generator-side fix reconcile. Unquoted sources are unchanged.

Verified in a sandbox end-to-end (source -> convert.sh -> parsed YAML):
zk-steward and ai-data-remediation-engineer no longer leak a quote and keep
their internal apostrophes; developer-tooling-engineer (unquoted, contains
": ") is byte-identical to before; synthetic '...''...' and "...\"...\\" cases
unescape correctly. lib.sh is only ever sourced by bash (its shebang); note
`repeat()` at the top of the TUI section is a zsh reserved word, so sourcing
lib.sh from a zsh shell errors — pre-existing and unrelated.

Refs #473 #548 #810 #778

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-02 20:32:18 -05:00
Michael SitarzewskiandClaude Fable 5.1 91d37aa3af fix(scripts): kimi skipped in --parallel, stale progress idx, --path multi-tool guard, rm -rf slug guard (#825)
Four install/convert bugs reported by @sunilkumarvalmiki (#817-#820), each
verified in a sandbox before and after the change.

- convert.sh --tool all --parallel silently skipped kimi: the parallel batch
  listed 11 tools and the sequential batch 2, so the 14th tool ran in neither
  (kimi output: 0 files vs 273 for every other tool). Add kimi to the parallel
  batch — it writes to its own integrations/kimi/<slug>/ dir so it is
  parallel-safe. (#817)
- The sequential batch's progress counter was hardcoded idx=8, stale from an
  older batch size, printing "aider (8/14)" instead of 12/14. Derive it from
  the parallel list length so it can never drift again; now prints 13/14 and
  14/14. Same root cause as #817. (#818)
- --path is a documented single-destination override; with several --tool
  values every tool resolved to the same directory and clobbered each other.
  Refuse --path with more than one tool. Deliberately NOT restricting the path
  itself: the override is the supported way to redirect installs (e.g. to a
  sandbox), and validating it against an expected dir would break that. (#819)
- clean_tool_output runs rm -rf on $OUT_DIR/$1. The tool name is validated
  upstream so this is not reachable today, but a plain-slug guard on $1 makes a
  future direct caller unable to steer it outside $OUT_DIR via "../" or "/".
  A prefix check would not do: "$OUT_DIR/../x" still starts with the prefix. (#820)

Fixes #817
Fixes #818
Fixes #819
Fixes #820

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-02 20:04:22 -05:00
3c9588880b Add Research division + Research Synthesist (consolidated #770) (#807)
* Add Research division with Research Synthesist agent

New division for literature review, source evaluation, and evidence
synthesis. Wired into divisions.json, convert.sh, lint-agents.sh,
install.sh, and the lint-agents CI workflow.

* chore(hermes): regenerate agent count 272 -> 273 for research division (#770)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Prashant Raj Bista <prashant.bista.18@gmail.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-26 09:57:10 -05:00
hari 9572c66428 fix(installer): deduplicate repeated tool selections (#777)
Signed-off-by: Mr-Neutr0n <harikp2002@gmail.com>
2026-08-26 08:50:52 -05:00
hari 3464daa3c6 fix(convert): quote YAML frontmatter values (#778)
Signed-off-by: Mr-Neutr0n <harikp2002@gmail.com>
2026-08-26 08:49:51 -05:00
hari 3570801f74 fix(install): reject unknown agent selections (#779)
Signed-off-by: Mr-Neutr0n <harikp2002@gmail.com>
2026-08-26 08:46:45 -05:00
d536331b5a feat: add Knowledge Graph Engineer + Master Plan Architect agents (#806)
Two gated single-agent contributions (both clean-PASS on the automated
gate: lint 0/0, low originality, canonical structure, no dupes):

- Knowledge Graph Engineer (engineering) — entity-relationship extraction,
  graph-enhanced RAG, queryable Neo4j graphs with provenance and
  contradiction tracking. Also closes agent-request #776. (#782, @chen-jiying)
- Master Plan Architect (specialized) — architectural teaching, red-team
  plan critique, comprehensive Markdown implementation plans. (#804, @augustoheiss)

README roster rows added for both; Hermes generated count 270 -> 272.
All guards green (divisions/tools/runbooks/hermes-plugin/lint).

Closes #782
Closes #804
Closes #776

Co-authored-by: chen-jiying <chen-jiying@users.noreply.github.com>
Co-authored-by: augustoheiss <augustoheiss@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-26 07:22:21 -05:00
Igor Kościński ebe9c99acb Move Economy Designer to proper section (#749) 2026-08-06 08:29:46 -05:00
c89557f785 feat: add Economy Designer + improve Reality Checker & SEO Specialist (#748)
Consolidated landing of three gated contributions:

- Economy Designer (game-development) — virtual economy specialist:
  currency systems, sources/sinks, monetization modeling, inflation
  control, live economy tuning. Distinct from the generalist Game
  Designer. (#651, @blockersiontko)
- Reality Checker — add the missing "Critical Rules You Must Follow"
  section, filling a canonical-template gap. (#746, @a01066983478-lgtm)
- SEO Specialist — add a Pre-GSC keyword-cannibalization audit and
  hreflang implementation template (URL inventory, query-intent overlap,
  title/H1 deconfliction, canonical/language hygiene). (#747, @kyle1188)

README roster row added for Economy Designer; Hermes generated count
269 -> 270. All guards green (divisions/tools/runbooks/hermes-plugin/lint).

Closes #651
Closes #746
Closes #747

Co-authored-by: blockersiontko <blockersiontko@users.noreply.github.com>
Co-authored-by: a01066983478-lgtm <a01066983478-lgtm@users.noreply.github.com>
Co-authored-by: kyle1188 <kyle1188@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 16:06:51 -05:00
8ef49232e0 feat: add 4 gated single agents (Rust Refactor, LLM Post-Training, UI Finish-Gate, Data Viz) (#742)
Lands four gated single-agent contributions via a consolidated branch
(avoids the README-conflict cascade of parallel fork PRs). Each passed
the full gate: lint 0/0, originality 0.0%, canonical structure, and a
manual conceptual-dupe check against the existing roster.

- Rust Refactoring Specialist (engineering) — behavior-aware, evidence-based
  Rust refactoring across crates/traits/modules. (#741, @TanasiDesigns)
- LLM Post-Training Engineer (engineering) — SFT/DPO/GRPO/RLVR experiment
  gating, checkpoint integrity, failure classification. Distinct sub-specialty
  from AI Engineer. (#740, @kaining-never-stop)
- UI Finish-Gate Reviewer (design) — anti-generic UI finish gate; catches
  interchangeable UI before ship via evidence + a written design contract.
  Distinct from the testing-division Reality Checker. (#739, @samuelbushi)
- Data Visualization Engineer (engineering) — chart-type selection, perceptually
  honest encodings, colorblind-safe palettes, performant D3/Vega. (#729, @Hotragn)

README roster rows added for all four; Hermes generated count 265 -> 269.
All guards green (divisions/tools/runbooks/hermes-plugin/lint).

Closes #741
Closes #740
Closes #739
Closes #729

Co-authored-by: TanasiDesigns <TanasiDesigns@users.noreply.github.com>
Co-authored-by: kaining-never-stop <kaining-never-stop@users.noreply.github.com>
Co-authored-by: samuelbushi <samuelbushi@users.noreply.github.com>
Co-authored-by: Hotragn <Hotragn@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 16:09:51 -05:00
ee5e758c10 feat: add Privacy Engineer + Aging Parent Care Companion agents (#738)
Lands two gated contributor agents via consolidated branch:

- Privacy Engineer (engineering) — the technical counterpart to the
  policy-focused Data Privacy Officer: PII discovery/classification,
  data minimization, consent enforcement, DSAR/deletion pipelines,
  tokenization, retention automation. (#728)
- Aging Parent Care Companion (specialized) — HIPAA-aligned family
  caregiver decision-support: appointment/medication coordination,
  care-team comms, and caregiver wellbeing. Novel consumer-caregiver
  domain. (#727)

README roster rows added for both; Hermes generated count 263 -> 265.
All guards green (divisions/tools/runbooks/hermes-plugin/lint).

Closes #728
Closes #727

Co-authored-by: Hotragn <Hotragn@users.noreply.github.com>
Co-authored-by: iampaulmata <iampaulmata@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 20:10:34 -05:00
459dce837d Add GaussDB Expert Engineer specialist (#587) (#726)
Vendor specialist for Huawei's GaussDB OLTP (enterprise relational DB) —
performance tuning, high availability, and migration. A niche enterprise/
China-market addition, distinct from the general database-optimizer.

Gate: lint 0/0, originality 4.7% (shared DB terminology with database-optimizer,
well under thresholds), 1 H1 + 5 sections + 7 code blocks. All guards green
(divisions/tools/runbooks/hermes); Hermes roster 262 -> 263.



Claude-Session: https://claude.ai/code/session_01WKnDRWM4izsB8WAXKszhsq

Co-authored-by: opswm <opswm@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 10:25:46 -05:00
e104d88bed Add RAG Pipeline Engineer specialist (#601) (#725)
Production RAG pipeline specialist: chunking strategy, retrieval quality,
hybrid search, re-ranking, and eval-driven iteration. Retrieval-first
debugging mindset ("the retrieval is the crime scene, I have the evals").

Chosen over the concurrent #686 (RAG Engineer) as the keeper: same concept,
but #601 is more complete (2x content, 7 code blocks) and was submitted first.

Gate: lint 0/0, originality 0.0%, 1 H1 + 9 sections + 7 code blocks, valid
division. All guards green (divisions/tools/runbooks/hermes); Hermes roster
261 -> 262.



Claude-Session: https://claude.ai/code/session_01WKnDRWM4izsB8WAXKszhsq

Co-authored-by: MaedehJJ <MaedehJJ@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 09:36:56 -05:00
a7dfe4111d Add Resume Tailor specialist (#586) (#724)
Candidate-side resume optimization: JD-to-experience mapping, ATS keyword
alignment, role-requirement matching. Landed on a fresh branch (the original
#586 had a stale README conflict) with the roster row authored here.

Gate: lint 0/0, originality 0.0%, 1 H1 + 14 sections + 5 code blocks, valid
division. All guards green (divisions/tools/runbooks/hermes); Hermes roster
picks it up (260 -> 261).



Claude-Session: https://claude.ai/code/session_01WKnDRWM4izsB8WAXKszhsq

Co-authored-by: rshivam973 <rshivam973@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 09:01:33 -05:00
86a6695d4c Add 6 specialists: security ×2, engineering ×3, specialized ×1 (#720)
Consolidates five gated PRs into one merge (each edited the README roster,
so landing individually would cascade conflicts):

- Security: AI-Generated Code Security Auditor, Secrets & Credential Hygiene
  Engineer (#647, #648 — @Synvoya)
- Engineering: Database Reliability, Developer Tooling, IoT Fleet Engineer
  (#705 — @Hotragn)
- Specialized: Codebase Archaeologist (#681 — @Axion-Web-dev)

All six cleared the full gate: lint 0/0, originality 0.0-0.1% (no dupes vs
roster or each other), proper structure, valid divisions. Roster rows added
to the Security/Engineering/Specialized tables (every link verified). Full
guard suite green — divisions, tools, runbooks, and the Hermes plugin guard —
and the Hermes roster picks up all six (254 -> 260 agents).





Claude-Session: https://claude.ai/code/session_01WKnDRWM4izsB8WAXKszhsq

Co-authored-by: Synvoya <Synvoya@users.noreply.github.com>
Co-authored-by: Hotragn <Hotragn@users.noreply.github.com>
Co-authored-by: Axion-Web-dev <Axion-Web-dev@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 18:50:22 -05:00
Pip, Agent PipandMichael Sitarzewski 6e45066041 fix(hermes): expose Agency tool parameters (#717)
Co-authored-by: Michael Sitarzewski <michael@sitarzewski.com>
2026-07-15 09:55:50 -05:00
Michael SitarzewskiandClaude Opus 4.8 00fb28a4cf feat(tools): add ZCode (Z.ai GLM agent harness) (#700)
* feat(tools): add ZCode (Z.ai GLM agent harness)

ZCode reads per-agent markdown from `.zcode/agents/{slug}.md` (project) and
`~/.config/zcode/agents/{slug}.md` (global), with `name` + `description` YAML
frontmatter and an optional `tools` list — the same plain-agent-markdown shape
as Qwen.

- tools.json: add the `zcode` entry (dual-scope, per-agent, format `zcode-md`).
- convert.sh: add `convert_zcode` (byte-identical to the qwen converter,
  output to integrations/zcode/agents/) + register in the dispatch, valid_tools,
  tools_to_run, and parallel_tools.
- install.sh: add `zcode` to ALL_TOOLS, `install_zcode`, `detect_zcode`, and the
  resolve_dest / bin / is_detected / display / label dispatches.

Directories + file format verified against ZCode's published docs. Renderer
contract: `zcode-md` output is byte-identical to `qwen-md`, verified by
diffing `convert.sh --tool zcode` against `--tool qwen` (243/243 files match).

check-tools.sh passes (16 tools consistent across tools.json, install.sh, and
convert.sh); bash -n clean on both scripts.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WdX6PvnCfRgYD11yVpXVor

* zcode: gitignore generated output + add integration README

Bring the ZCode integration in line with the other tools: the 243 generated
agent files (integrations/zcode/agents/*.md) are output of `convert.sh`, not
source — add a .gitignore rule so they can't be committed, and add
integrations/zcode/README.md documenting generate/install (matching the vibe
and qwen integration READMEs).

Verified: generated agents are now git-ignored, the README is tracked, and
check-tools.sh still passes at 16 tools.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WKnDRWM4izsB8WAXKszhsq

* zcode: fix user-scope install path to ~/.zcode/agents (per ZCode docs)

The user-scope dest was ~/.config/zcode/agents/, but the official ZCode docs
state subagents are read from ~/.zcode/agents/<name>.md — so user-scope
installs landed where ZCode never looks. (detect.agentsDir and project scope
were already correct at .zcode/agents, so this was an internal inconsistency.)

Point tools.json dest.user, install_zcode's default, the header comment, and
the list display at ~/.zcode/agents; drop the stale ~/.config/zcode detection
clause; update the integration README. Keep format `zcode-md` distinct — ZCode's
native format supports color/model/permissions, so it will diverge from gemini-md
as the converter matures rather than being a permanent alias.

Verified: a default user-scope install now writes to ~/.zcode/agents/<slug>.md
(not ~/.config/zcode); check-tools.sh passes at 16 tools; install.sh syntax and
tools.json JSON both valid.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WKnDRWM4izsB8WAXKszhsq

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 11:29:16 -05:00
134b4d08e6 fix(lint): stop SIGPIPE from faking missing sections (#710)
`grep -q` exits at its first match without draining stdin, killing the
piping `echo` with SIGPIPE. Under `set -o pipefail` that 141 becomes the
pipeline's status, which is indistinguishable from "no match" — so a
section that is present gets reported missing. The race only surfaces on
bodies large enough that `echo` is still writing when `grep` bails, which
made the warning set differ between identical runs (full repo: 106/87/90
warnings across three runs; now a stable 59).

Feed both checks from a herestring so there is no writer to signal.

Co-authored-by: Jaak Vaher <jaak.vaher@cyber.ee>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-11 14:00:09 -05:00
Michael SitarzewskiandClaude Opus 4.8 9f3e401ccd fix: normalize section headers so OpenClaw SOUL.md isn't empty (15 agents) (#704)
convert.sh's OpenClaw conversion routes persona sections (Identity,
Communication, Critical Rules, Style, Learning & Memory) to SOUL.md and
everything else to AGENTS.md by matching `## ` header keywords. 15 agents
produced an empty SOUL.md because no header matched — the same class as the
#670 fix. Two distinct causes, two minimal fixes:

- 13 agents used a `##`-level persona section under a non-canonical name
  ("Role Definition" / "Core Expertise"). Renamed to "Identity & Role
  Definition" / "Identity & Core Expertise" — header text only, zero content
  change (each is a clean +1/-1 diff).
- 2 agents (french-consulting-market, salesforce-architect) had full persona
  sections but at `#` (H1) with no title — the literal #670 bug. Shifted every
  header one level deeper (fence-aware, so code-block content is untouched) and
  added a `# <Name>` title. These now lint 0/0.

Verified: 0 "no section headers map to SOUL.md" warnings remain (was 15);
regenerated OpenClaw output confirms all 15 SOUL.md files are now populated
with the persona; AGENTS.md retains operations; no agent content changed;
guards green. Total lint warnings 87 -> 59 (remaining are advisory
"missing Core Mission/Critical Rules", intentionally not forced).


Claude-Session: https://claude.ai/code/session_01WKnDRWM4izsB8WAXKszhsq

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-09 15:32:59 -05:00
Hank Selke 94a37671ac Add healthcare division to README roster (#685)
* Add healthcare division to README roster

* Add Healthcare Innovation Strategist to README table
2026-07-09 10:23:33 -05:00
Hank Selke ca4cd8ee72 Add Healthcare Innovation Strategist to healthcare/ division (#687)
Agent developed by Snark Health (github.com/snark-health).

Snark Health was founded by a practicing US physician with 25 years
of internal medicine and infectious disease experience and direct
leadership of a $2 billion risk-based Medicare bundled payment
contract with the US government, and a Kenyan engineer and operator
whose collaboration with the founding physician began in 1998 in
rural western Kenya. The frameworks in these files come from a team
that has delivered care in both US hospital systems and
resource-limited settings, managed actuarial risk under government
contract, and built health infrastructure across two continents
over 25 years.

AI Collective OS: snarkhealth.ai
Agent registry: snarkhealth.ai/registry
2026-07-09 10:23:04 -05:00
76a13dfdfa Add 10 engineering/academic specialists (Hotragn batch #690–#699) (#701)
Consolidates ten agent PRs from @Hotragn into one merge (they each edited
the README roster, so landing them individually would cascade conflicts):

- Engineering: Search Relevance, Identity & Access, Realtime Collaboration,
  Desktop App, Mobile Release, Video Streaming, FinOps, WebAssembly,
  API Platform
- Academic: Statistician

All ten cleared the gate: lint 0/0, originality 0.0–0.1% (no dupes vs the
roster or each other), proper structure, valid divisions. Roster rows added
to the Engineering and Academic tables; every link verified.



Claude-Session: https://claude.ai/code/session_01WKnDRWM4izsB8WAXKszhsq

Co-authored-by: Hotragn <Hotragn@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-09 10:08:46 -05:00
Michael SitarzewskiandClaude Opus 4.8 35548a57c7 docs: add README roster entries for the gov-tech agent batch (#688)
The five gov-tech agents (#580–#584) merged as agent-only PRs without
roster rows. Add them to the README division tables:
- Engineering: Drupal Performance, WordPress Performance, Section 508
  Accessibility Specialist, USWDS Developer
- Specialized: FedRAMP & RMF Compliance Engineer

Docs only; every link verified to resolve to a committed agent file.


Claude-Session: https://claude.ai/code/session_01WKnDRWM4izsB8WAXKszhsq

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 07:00:30 -05:00
Edgar Powell, JrandClaude Opus 4.8 88cae665db feat: add FedRAMP & RMF Compliance Engineer agent to Specialized Division (#584)
* feat: add FedRAMP & RMF Compliance Engineer agent to Specialized Division

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix: update FedRAMP agent for Rev5/20x dual-pathway, KSIs, and NIST 800-53 Rev 5

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 06:57:56 -05:00
Edgar Powell, JrandClaude Opus 4.8 4e1f97c864 feat: add USWDS Developer agent to Engineering Division (#583)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 06:57:53 -05:00
Edgar Powell, JrandClaude Opus 4.8 e5c24eabaa feat: add Section 508 Accessibility Specialist agent to Engineering Division (#582)
* feat: add Section 508 Accessibility Specialist agent to Engineering Division

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix: correct WCAG/508 legal baseline accuracy in Section 508 Specialist agent

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 06:57:50 -05:00
Edgar Powell, JrandClaude Opus 4.8 10e3d84e22 feat: add WordPress Performance Engineer agent to Engineering Division (#581)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 06:57:47 -05:00
Edgar Powell, JrandClaude Opus 4.8 92cde08a10 feat: add Drupal Performance Engineer agent to Engineering Division (#580)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 06:57:44 -05:00
Rodo 75173cea52 Add Vietnamese community translation link (#631) 2026-07-07 16:00:37 -05:00
Anil Chinchawale fb3b84d72c docs(solidity-engineer): add XDC to chain-specific quirks (#609)
XDC Network is an EVM-compatible L1 (XDPoS consensus) worth knowing
alongside Arbitrum/Optimism/Base/Polygon. It supports EIP-1559 on both
mainnet and the Apothem testnet, so it behaves as a standard EVM target
for gas estimation and tooling.
2026-07-07 15:56:03 -05:00
Michael SitarzewskiandClaude Opus 4.8 d3c8368ec9 docs: fix remaining stale antigravity skill paths in README (#684)
Two references in README.md still pointed at the old
`~/.gemini/antigravity/skills/` path. Per the current Antigravity spec
(verified against Google's July 2026 docs), the canonical global skills
path for all three flavors — Antigravity, AGY CLI, AGY IDE (incl. 2.0) —
is `~/.gemini/config/skills/`. #667 fixed integrations/README.md; this
fixes the two that remained in the top-level README, so every path
reference in the repo now agrees with tools.json/convert.sh/install.sh.

Verified: zero `gemini/antigravity/skills` references remain repo-wide.


Claude-Session: https://claude.ai/code/session_01WKnDRWM4izsB8WAXKszhsq

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 13:43:42 -05:00
Aria PramesiandClaude Fable 5 b00cbb1812 docs: fix stale antigravity path; add Mistral Vibe to integrations index (#667)
- Antigravity installs to ~/.gemini/config/skills/ per antigravity/README.md,
  convert.sh, and install.sh — the index was the sole outlier still saying
  ~/.gemini/antigravity/skills/
- Mistral Vibe is first-class in convert.sh and install.sh and has its own
  integrations/vibe/README.md, but was missing from the Supported Tools index

(The originality-gate fix originally in this PR was superseded by #659.)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 13:35:34 -05:00
Hotragn Pettugani f97145b40e Add Test Automation Engineer specialist (#674) 2026-07-07 11:14:34 -05:00
Hotragn Pettugani 15c35826e2 Add Internationalization Engineer specialist (#673) 2026-07-07 11:13:36 -05:00
Hotragn Pettugani 94a20393ae Add Payments & Billing Engineer specialist (#672) 2026-07-07 10:13:27 -05:00
Michael SitarzewskiandClaude Opus 4.8 71394d83e9 fix(marketing): correct agent title/header levels for OpenClaw conversion (#679)
Two marketing agents had malformed heading structure that broke the
OpenClaw conversion, which buckets sections by `^## `:

- ai-citation-strategist used H1 (`#`) for its section headers (Identity,
  Communication, Rules, Mission, Deliverables, Workflow, Metrics,
  Capabilities), so none matched `^## ` — SOUL.md came out nearly empty and
  everything landed in AGENTS.md. Promote those section headers to `##`
  (leaving template content inside code fences untouched) and add a proper
  `# AI Citation Strategist` H1 title.
- agentic-search-optimizer was the only file in the division with no H1
  title (body opened at `## Your Identity & Memory`). Add
  `# Agentic Search Optimizer`.

Verified: lint-agents passes (0/0), and the regenerated OpenClaw output now
splits correctly — SOUL.md carries the persona sections (Identity,
Communication, Critical Rules) instead of an empty file.

Fixes #670


Claude-Session: https://claude.ai/code/session_01WKnDRWM4izsB8WAXKszhsq

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 14:43:06 -05:00
Michael SitarzewskiandClaude Opus 4.8 3293712e41 fix(install): honor comma-separated --tool list (as the help documents) (#678)
The help text advertised `--tool <a,b>` (a comma list), but --tool took a
single value and validated it whole, so `--tool claude-code,cursor` failed
with "Unknown tool 'claude-code,cursor'". --division and --agent already
split on commas; --tool didn't (#671).

Split --tool on commas, trim each entry, and validate each against
ALL_TOOLS (mirrors --division), so a bad entry still errors clearly by
name. Single-tool use is unchanged.

Verified: --tool claude-code,cursor installs both; "claude-code, cursor"
(with spaces) works; --tool claude-code,nope errors on 'nope'; --tool
cursor still works.

Fixes #671


Claude-Session: https://claude.ai/code/session_01WKnDRWM4izsB8WAXKszhsq

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 14:43:03 -05:00
Michael SitarzewskiandClaude Opus 4.8 1b31b7a670 fix(install): derive division list from divisions.json (adds healthcare) (#677)
install.sh hardcoded the division set in two lists (AGENT_DIRS,
ALL_DIVISIONS), and both had gone stale — missing healthcare (#655). So
`--tool claude-code`/`copilot` skipped healthcare's 2 agents,
`--division healthcare` errored "Unknown division", the interactive team
list omitted it, and the agent count was low by 2 (#668).

Derive both lists from divisions.json (the single source of truth), using
the same no-jq awk/grep/sed parse as check-divisions.sh. ALL_DIVISIONS is
now exactly the divisions.json entries; AGENT_DIRS is that set plus
strategy/ (preserving the intentional scan of its frontmatter-less docs,
which is_agent_file filters out). This is the same fix pattern as #659
(check-agent-originality.sh) and #666 (build-hermes-plugin.py): a derived
list can't drift, so check-divisions.sh needn't be extended to cover it.

Verified: ALL_DIVISIONS resolves to 17 (healthcare in, strategy out),
strategy still scanned, and `--division healthcare --dry-run` now finds
2 agents instead of "Unknown division".

Fixes #668


Claude-Session: https://claude.ai/code/session_01WKnDRWM4izsB8WAXKszhsq

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 10:49:43 -05:00
Michael SitarzewskiandClaude Opus 4.8 ef1352f84b fix(install): never rm -rf a shared Hermes plugins directory (#676)
install_hermes() resolved `dest` from HERMES_PLUGIN_DIR and ran `rm -rf
"$dest"`. The var name invites setting it to the plugins *parent*
(~/.hermes/plugins) rather than the full plugin path, in which case the
rm -rf wiped the entire plugins directory and every other plugin in it.

Always target the agency-agents-router subdir (append it when the resolved
path doesn't already end in it), and add a defensive guard that refuses to
remove any path whose basename isn't `agency-agents-router`. Verified: with
HERMES_PLUGIN_DIR set to the plugins parent, a sibling plugin's data now
survives the install.

Fixes #669


Claude-Session: https://claude.ai/code/session_01WKnDRWM4izsB8WAXKszhsq

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 10:49:40 -05:00
Michael SitarzewskiandClaude Opus 4.8 6f8d5e50ea fix(hermes): accept slug alias + derive divisions from divisions.json (#666)
Two correctness fixes to the Hermes plugin generator:

1. slug alias (#665): agency_agents_search returns results keyed by `slug`,
   but load/inspect/delegate only accepted a param named `agent`, so the
   natural chain search -> load(slug=...) failed with "agent not found".
   Add `slug` as an optional alias across the READ/PROMPT/DELEGATE schemas
   and resolve either key in the handlers (via _identifier), with a clear
   "agent or slug is required" error when neither is passed. Backward
   compatible; `required` relaxed to [] (task-only for delegate).

2. division drift: AGENT_DIRS was a hardcoded copy of the division list that
   the bash check-divisions.sh guard can't see (it's a Python list), so it
   silently dropped healthcare (#655) — the two healthcare agents were
   missing from the Hermes roster. Derive the division dirs from
   divisions.json instead (mirrors the #659 fix to check-agent-originality.sh),
   so the roster stays in sync with the catalog by construction.

Verified on the regenerated plugin: roster is 235 agents (healthcare now
indexed); search "clinical evidence healthcare" -> inspect(slug=...) resolves
to Clinical Evidence Agent — exercising both fixes together. agent= still works.

Fixes #665


Claude-Session: https://claude.ai/code/session_01WKnDRWM4izsB8WAXKszhsq

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 17:25:08 -05:00
Michael SitarzewskiandClaude Opus 4.8 217a63b8b6 Derive originality check's division set from divisions.json (#659)
check-agent-originality.sh hardcoded its own copy of the division list
(AGENT_DIRS) in the Python heredoc — a 5th copy that check-divisions.sh's
bash-array parser never saw, so it drifted: it was missing `gis` and
`security` and still carried the retired `strategy`. The practical effect
was that every gis/ and security/ agent — including newly added ones —
skipped the duplicate-detection scan entirely.

Read divisions.json directly instead of hardcoding, so this check can
never drift from the catalog again. Now scans all 16 divisions; verified
green in full-audit mode.

Supersedes #649/#650, which patch the hardcoded constants rather than
removing them.


Claude-Session: https://claude.ai/code/session_01WKnDRWM4izsB8WAXKszhsq

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 12:52:12 -05:00
Michael SitarzewskiandClaude Opus 4.8 384dbbd2a8 docs: add tool-integration checklist + stop hardcoding roster counts (#663)
Two related drift traps, both from hand-typed numbers/lists that no guard
watches:

1. CONTRIBUTING had no "how to add a tool" checklist, and its wording
   ("all output is gitignored") implied gitignoring was automatic — so
   tool contributors kept committing generated integrations/<tool>/ output.
2. The division set and agent/division counts were hardcoded in prose in
   several places and had already gone stale (CONTRIBUTING said "16" and
   omitted healthcare; EXECUTIVE-BRIEF said "9 divisions").

Changes:
- Add an "Adding a Tool Integration" checklist to CONTRIBUTING (discuss-first,
  reuse an existing `format`, the ~5-file touch list incl. the required
  .gitignore rule, run check-tools.sh). Harmonize the "committed build
  output" policy line to point at it.
- De-hardcode the division list in CONTRIBUTING — defer to divisions.json.
- Stop scattering roster counts: strategy/EXECUTIVE-BRIEF ("9 divisions") and
  check-agent-originality.sh ("184-agent library") drop the number entirely;
  README keeps a showcase stat but softens "232 across 16" to "230+ across
  every division" so it never becomes a lie as the roster grows.


Claude-Session: https://claude.ai/code/session_01WKnDRWM4izsB8WAXKszhsq

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 12:45:36 -05:00
Michael SitarzewskiandClaude Opus 4.8 cb45d3ea8c Add strategy/runbooks.json — NEXUS runbook rosters by slug + CI guard (#664)
The app can't reliably resolve runbook rosters from display names (catalog
slugs are inconsistently division-prefixed, and names drift). This adds a
machine-readable manifest so the app reads rosters as data and maps each
slug to a catalog agent for one-click team deploy.

- strategy/runbooks.json: the 4 NEXUS scenarios (startup-mvp,
  enterprise-feature, marketing-campaign, incident-response), each with
  mode, duration, summary, doc, and a grouped roster. Every agents[] entry
  is a verified slug = the agent .md filename stem (the corpus id), resolved
  against the live roster — not a slugified display name. (Notably
  "Senior Project Manager" is project-manager-senior, NOT
  project-management-senior-project-manager, which naive mapping assumes.)
- scripts/check-runbooks.sh + .github/workflows/check-runbooks.yml: guard
  (mirrors check-divisions.sh) failing the build if any roster slug doesn't
  resolve to a real agent file, a doc path is missing, or JSON is malformed —
  so renaming/removing an agent can't silently break the app's deploy.

All 64 slug references verified; guard passes and fails correctly.


Claude-Session: https://claude.ai/code/session_01WKnDRWM4izsB8WAXKszhsq

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 12:41:01 -05:00
Laurent WandrebeckandMistral Vibe 90ae2b27d1 Add Mistral Vibe support for Agency agents (#658)
* Add Mistral Vibe support for Agency agents

- Add Mistral Vibe entry to tools.json with proper configuration
  (id, label, kebab, format, installKind, dest, detection, version)
- Implement convert_vibe() function in convert.sh for Mistral Vibe's format
  - Generates TOML agent configuration files (~/.vibe/agents/<slug>.toml)
  - Generates markdown prompt files (~/.vibe/prompts/<slug>.md)
  - Each agent gets agent_type and system_prompt_id (no hardcoded active_model)
- Add install_vibe() function in install.sh with full feature support
  - Copies both agent TOML and prompt MD files
  - Supports division/agent filtering and environment variable overrides
  - Uses VIBE_HOME environment variable for custom install paths
- Add Mistral Vibe detection and tool labeling
- Add Mistral Vibe to all necessary case statements and arrays
- Update README.md to document Mistral Vibe support
- All changes validated with scripts/check-tools.sh

Mistral Vibe uses a two-file approach per agent:
- ~/.vibe/agents/<slug>.toml for agent configuration
- ~/.vibe/prompts/<slug>.md for system prompts

Users can specify active_model in their agent TOML files or rely on their
Vibe configuration default model.

Usage: ./scripts/install.sh --tool vibe [--division X] [--agent Y]

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>

* Address PR #658 review feedback: add .gitignore, README, and fix icon

- Add integrations/vibe/README.md documenting the Mistral Vibe integration
- Update .gitignore to ignore integrations/vibe/agents/ and prompts/
- Update convert.sh usage() to include vibe in the tool list
- Fix tools.json: change vibe icon from 'mistral' to null (no mistral.svg)
- Bonus: update vibe accent color from #FF69B4 to #FA520F (Mistral brand orange)

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>

---------

Co-authored-by: Mistral Vibe <vibe@mistral.ai>
2026-07-05 04:21:50 -05:00
Hank Selke ac0fb2e563 Add healthcare/ division: Clinical Evidence Agent and Sovereign Health Systems Agent (#655)
Agents developed by Snark Health (github.com/snark-health).

Snark Health was founded by a practicing US physician with 25 years
of internal medicine and infectious disease experience and direct
leadership of a $2 billion risk-based Medicare bundled payment
contract with the US government, and a Kenyan engineer and operator
whose collaboration with the founding physician began in 1998 in
rural western Kenya. The frameworks in these files come from a team
that has delivered care in both US hospital systems and
resource-limited settings, managed actuarial risk under government
contract, and built health infrastructure across two continents
over 25 years.

AI Collective OS: snarkhealth.ai
Agent registry: snarkhealth.ai/registry
2026-07-05 04:21:47 -05:00
Michael Sitarzewski fc5a192e7e Merge pull request #642 from msitarzewski/feat/antigravity-config-skills
fix(antigravity): correct skills path (~/.gemini/config/skills) + deterministic SKILL.md
2026-07-01 12:23:00 -05:00
309a8e7b0c fix(antigravity): correct skills path + deterministic SKILL.md
Antigravity moved its skill directories: global skills now load from
~/.gemini/config/skills/ and project skills from <project>/.agents/skills/
(the old ~/.gemini/antigravity/skills/ is stale). Confirmed against Google's
Antigravity Skills docs.

- tools.json: antigravity → skill-md format, new user+project dests, scope
  user+project (keeps the `agency-` slug prefix for namespacing).
- convert.sh: emit standard Agent-Skills frontmatter only (name + description);
  drop risk/source/date_added — the date stamp made output non-deterministic,
  and it's the reason the app had kept Antigravity recognized-only. Now byte-
  identical to the osaurus skill-md shape. Removed the now-unused
  ANTIGRAVITY_DATE_ADDED constant.
- install.sh: install + detect against ~/.gemini/config/skills/.
- Docs updated.

check-tools.sh passes (tools.json / install.sh / convert.sh consistent).

Path discovery + skill-md approach by Pedro Remedios (msitarzewski/agency-agents-app#32).

Co-authored-by: Pedro Remedios <pedro.remedios@gmail.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 12:15:38 -05:00
Sheroy Cooper 7632f06682 docs: update installer tool list in README (#627) 2026-06-30 11:24:18 -05:00
Matt Van HornandMatt Van Horn 48502e16e3 feat: add Network Engineer agent (Cisco/Juniper/Palo Alto) (#623)
Fixes #265

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
2026-06-30 10:27:16 -05:00