Commit Graph
51 Commits
Author SHA1 Message Date
Michael SitarzewskiandClaude Opus 5 8333d995ef fix(install): tell aider users when their CONVENTIONS.md is our stale roster
#871 shrank the aider integration from 3.8M characters of concatenated agents
to a 97K roster index, because aider keeps a conventions file in context for a
whole session. The fix only reached new installs.

install_aider refuses to overwrite an existing CONVENTIONS.md, which is right —
it is aider's own user-authored file and the one on disk may be the reader's.
But "already exists (remove to reinstall)" says nothing about which file it is,
so anyone holding the pre-index roster re-ran the installer, read that, and
kept the broken file. The people the fix was written for were the ones it could
not reach.

Our generated file has always opened with "# The Agency — AI Agent
Conventions", so the installer can now tell its own stale copy from someone
else's conventions and say which it is. Neither branch writes anything.

Verified in a container, all three cases:
  stale Agency roster   -> names it, reports 3800039 bytes, says to delete and re-run
  user's own file       -> "leaving your file alone", file intact
  no file               -> installs, 97065 bytes

Windsurf has the same guard and the same gap; #870 already handles it there, so
this leaves that path alone rather than colliding with it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-20 20:29:21 -05:00
Hotragn Pettugani d3a3f573e3 fix(aider): CONVENTIONS.md is a roster index, not 3.8 million characters of agents (#871)
Aider loads a conventions file into context and keeps it there for the whole
session — that is what the file is for, and the docs say to load it with
--read so prompt caching can hold it. This integration concatenated every
agent body into it. At 279 agents that is 3,816,372 characters, roughly a
million tokens. No model takes that. Anyone who ran

    ./scripts/install.sh --tool aider

got a CONVENTIONS.md that either blows the context window on the first turn
or bills for a million tokens trying.

CONVENTIONS.md is now the roster index it was described as: one entry per
agent with the name, the description, the division, and the path to the
agent file. 96,823 characters, down from 3.8 million. The header explains
how to pull a single agent's full instructions into the session:

    /read-only /path/to/agency-agents/engineering/engineering-frontend-developer.md

Naming an agent in a prompt still works the way it did — the description is
what the model needed for that, and it is still there.

test-convert-outputs.sh now holds the index to being an index: it fails if
CONVENTIONS.md grows past 250,000 characters, if it does not list exactly
one path per roster agent, or if any path it prints does not resolve. The
existing round-trip check on the accumulated file still covers the names and
descriptions.
2026-09-20 18:35:10 -05:00
647c8baa42 fix(install): preserve list-item indent when adding the Hermes plugin; regression test + CI (#714)
ensure_hermes_plugin_enabled() hardcoded a 2-space indent for the inserted `- agency-agents-router` line. Hermes writes plugins.enabled items at 4 spaces, so the new line and the next existing item collapsed into one plain scalar ("agency-agents-router - disk-cleanup") and every previously enabled plugin silently dropped (#839, and #689 diagnosed the same in July). The inserter now matches the existing item indent (default 4), appends after existing entries so order is preserved, and is idempotent on re-run. scripts/check-hermes-config-rewrite.{sh,py} runs seven regression cases; a small workflow runs it on every PR.

Reproduced on main with a 4-space config and verified fixed with this patch; installer suite 36/0; the regression script passes 7/7.

Fixes #839. Closes #689 (same fix, proposed first by @harshsinghmp).

Co-Authored-By: Harsh Singh <32476777+harshsinghmp@users.noreply.github.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-06 15:47:19 -05:00
af128a9288 fix(install): honor CLAUDE_CONFIG_DIR as config root, not agents dir (#834)
resolve_dest() for claude-code now appends /agents to CLAUDE_CONFIG_DIR (the config root that replaces ~/.claude); a value already ending in /agents is used verbatim and a trailing slash is stripped. detect_claude_code() honors CLAUDE_CONFIG_DIR so relocated configs are detected. Three regression cases in scripts/test-install.sh.

Fixes #578. The diagnosis and the same fix were first proposed by @halindrome in #579 (June); this lands the current-main version with tests.

Co-Authored-By: Shane McCarron <520688+halindrome@users.noreply.github.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-04 13:06:36 -05:00
128565a828 fix(install): refuse --path only for colliding tools; re-land installer test suite (#772) (#828)
* Reapply "test(install): add a regression suite for install.sh + CI on Linux and macOS (#772)" (#827)

This reverts commit 4bab3cf4a2.

* fix(install): refuse --path only for tools that would overwrite each other; re-land installer test suite (#772)

Re-lands the install.sh regression suite from #772 (reverted in #827) together
with the guard change that makes it pass, so CI goes green in one step.

Background. #825 made --path refuse more than one --tool, on #819's report that
several tools sharing one destination clobber each other. That was right in
spirit and over-broad in practice, and it was implemented without verifying
the premise. Measured by installing one agent with every tool into a sandbox
and comparing what landed:

  <division>-<slug>.md  (raw copy)   claude-code, copilot
  <slug>.md             (converted)  gemini-cli, opencode, qwen, zcode
  agency-<slug>/SKILL.md             antigravity, osaurus

Tools in the same group write identical filenames and silently overwrite each
other (qwen + gemini-cli lose a file while both print [OK]). Tools in different
groups coexist (claude-code + codex, claude-code + qwen). Every other tool's
output is distinct.

The guard now refuses --path only for a colliding pair, naming both tools and
the reason, and allows the rest. path_collision_group() holds the measured
table; re-measure if a converter's naming changes.

The suite's two-tool --path cases used claude-code + copilot, which collide:
the "installs exactly one agent" count of 1 was passing because copilot had
overwritten claude-code's identical file. They now use claude-code + codex and
assert that BOTH outputs survive, which a single count cannot show; a new case
asserts the colliding pair is refused. codex has no committed output, so those
cases convert (only the two raw-copiers work under --no-convert in a fresh
checkout).

Verified under bash 3.2 (the macOS CI leg): 29 passed, 0 failed, 1 xfail.
Guard spot-checked against all three measured groups plus a cross-group pair.

Suite, workflow and CONTRIBUTING note by @SergiorCode (#772). Refs #772 #819
#825 #827.

Co-Authored-By: SergiorCode <SergiorCode@users.noreply.github.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* fix(install): auto-convert never fired in a fresh checkout — README.md read as generated output

ensure_converted decided a converted tool's output was present if its
integrations/<tool>/ directory contained any file. Every one of those
directories ships a committed README.md, so in a fresh checkout the check
always found a file, skipped convert.sh, and the installer then hard-failed
"integrations/<tool> missing. Run convert.sh first." — the exact flow #426's
auto-convert was added to prevent. This affected every converted tool; it was
masked locally by generated outputs left behind in the working tree, and
surfaced only when the test suite ran in a clean checkout.

Only files other than README.md now count as generated output. Verified in a
clean worktree under bash 3.2: the suite's serial-control case (claude-code +
codex into one --path) now auto-converts codex and both outputs land;
29 passed, 0 failed, 1 xfail.

Refs #426

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

---------

Co-authored-by: SergiorCode <SergiorCode@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-03 07:15:08 -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 3570801f74 fix(install): reject unknown agent selections (#779)
Signed-off-by: Mr-Neutr0n <harikp2002@gmail.com>
2026-08-26 08:46:45 -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
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
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
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
PattrnData 8ab8d82930 Add Hermes lazy Agency router plugin (#614)
* Add Hermes lazy agency router plugin

* Document Hermes router specialist usage
2026-06-28 08:27:39 -05:00
Michael SitarzewskiandClaude Opus 4.8 48b5225986 docs(install): list OSAURUS_SKILLS_DIR in the Env override header (#604)
resolve_dest honors OSAURUS_SKILLS_DIR but the header's Env: line omitted it.
One-line doc add for completeness. Follow-up to #603.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 15:48:15 -05:00
Michael SitarzewskiandClaude Opus 4.8 f56a217945 Add Osaurus tool target + document the division contract (#603)
Tooling: add Osaurus (Anthropic Agent-Skills SKILL.md format) as a conversion
and install target, wired into convert.sh (convert_osaurus + dispatch/valid/all/
parallel lists, --osaurus flag) and install.sh (detect/label/dest/install_osaurus
+ dispatch). Generated output lands in integrations/osaurus/agency-*/SKILL.md and
is gitignored like every other tool's output (regenerate via convert.sh osaurus).

Docs/guardrails — make the division contract discoverable, since it lived only
in scattered script comments and tripped up multiple contributors:
- CONTRIBUTING.md: complete the division list to all 16 (was missing academic/
  gis/sales) and document that divisions.json is the source of truth (CI-checked
  by check-divisions.sh), how to propose a new division, and that strategy/
  (NEXUS playbooks) and integrations/ (generated output) are NOT divisions.
- install.sh: correct the stale "sync with convert.sh / lint-agents.sh" comment —
  install.sh intentionally keeps strategy/ in AGENT_DIRS (filtered at scan time),
  so it is deliberately NOT the same set as the other two.
- .gitignore: ignore integrations/osaurus/agency-*/ (the osaurus output was the
  one tool whose generated files weren't excluded).

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 15:45:50 -05:00
a077c9ac0b feat: add GIS division with 13 specialized agents across 4 tiers (#572)
* feat: add GIS division with 13 specialized agents across 4 tiers

- Strategic: Technical Consultant, Solution Engineer
- Core: GIS Analyst, Spatial Data Engineer, Geoprocessing Specialist, QA Engineer
- Emerging: GeoAI/ML Engineer, BIM/GIS Specialist, 3D & Scene Developer,
  Spatial Data Scientist, Drone/Reality Mapping
- Delivery: Web GIS Developer, Cartography Designer

Also:
- Add Smart Campus Digital Twin use case scenario
- Update agent counts (218→231) and division counts (15→16)
- All agents follow existing format: frontmatter + identity + mission + rules + process

* Wire gis/ division into toolchain + reconcile roster

The PR added the gis/ agents + README rows but didn't register the
division where the toolchain looks, so the 13 agents would be silently
skipped by convert/install/lint. Register gis (alpha: after
game-development) in:
- scripts/convert.sh AGENT_DIRS
- scripts/install.sh AGENT_DIRS + ALL_DIVISIONS + division_emoji (🌍)
- scripts/lint-agents.sh AGENT_DIRS
- .github/workflows/lint-agents.yml (paths trigger + changed-file globs)

README: count 231 -> 232 / 16 divisions and add the Strategy Duel Agent
roster row (reconciles the row #390 left out), so rows == count == 232.

Verified: lint PASS, convert generates all 13, `install.sh --list teams`
shows "gis 13 agents", roster drift 0.

Co-Authored-By: Cyruschu430 <Cyruschu430@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Hermes Agent <agent@hermes.ai>
Co-authored-by: Michael Sitarzewski <msitarzewski@gmail.com>
Co-authored-by: Cyruschu430 <Cyruschu430@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 15:42:10 -05:00
Michael SitarzewskiandClaude Opus 4.8 f8d94c72c4 docs: sync roster to 218 agents + fix install.sh --list (#570)
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>
2026-06-06 17:30:49 -05:00
f541d07bb3 feat: Installer v2 — selective install, interactive TUI, consolidate the install.sh cluster (#567)
* 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>
2026-06-05 10:07:10 -05:00
JZ e481116cc5 refactor(install): replace usage() magic line numbers with sentinels (#506)
Thanks @ShaoJiaZhen! 🙏
2026-06-04 18:39:34 -05:00
8237f99b85 feat: add Security division (resolves RFC #438) (#566)
New security/ division: 6 new agents (#223, #326) + 4 relocated; differentiated Security Architect; 209 agents / 15 divisions. Closes #223, #326.

Co-Authored-By: anonym88-ai <anonym88-ai@users.noreply.github.com>
Co-Authored-By: caveat-ops <caveat-ops@users.noreply.github.com>
2026-06-04 16:55:28 -05:00
Michael SitarzewskiandTomo Wang f954ca5378 feat(gemini-cli): switch to native subagents (#565)
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>
2026-06-04 06:04:35 -05:00
Yunus Kılıç 620a061a90 feat: add Codex agent conversion and install support (#362)
Adds Codex as a conversion/install target: each agent → `~/.codex/agents/<slug>.toml` with the three required Codex fields (name, description, developer_instructions).

Validated: all 184 agents generate valid, parseable TOML (incl. 21k-char agents with embedded code blocks) via the PR's TOML basic-string escaper. Matches OpenAI's documented custom-agent schema.

Thanks @yunuskilicdev.
2026-06-03 18:59:48 -05:00
Kiên Bùi a4ec4a0d13 fix: add post-install hint for Copilot agent path verification (#224)
Adds post-install hint reminding users to verify VS Code chat.agentFilesLocations setting for Copilot agents.
2026-04-11 23:25:48 -05:00
Michael Sitarzewski e73f4019ae fix: add finance/ to scripts, CI, README, and CONTRIBUTING.md (#437)
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.
2026-04-11 01:14:35 -05:00
Ryanba 30f6f18d41 文档: 同步 OpenClaw 安装与集成说明 (#432)
Syncs OpenClaw install docs and integration paths. Aligns README examples with current script behavior.
2026-04-10 18:54:58 -05:00
Alon Kolyakov 37e5c521c9 refactor: sync agent directory lists across all scripts (#253)
Syncs agent directory lists (academic/, sales/, strategy/) across all three scripts: lint-agents.sh, convert.sh, install.sh. Refactors install.sh to use shared AGENT_DIRS constant, eliminating duplication. Closes #242.
2026-04-10 18:46:28 -05:00
toukanno 464a37dcb4 fix: correct VS Code Copilot agent path and opencode directory handling (#323)
Fixes Copilot agent install path (copies to both ~/.github/agents and ~/.copilot/agents for backwards compatibility) and OpenCode directory handling (searches both flat and nested layouts). Closes #218, #228, #185, #245.
2026-04-10 18:46:11 -05:00
Michael Sitarzewski 3117f9f866 Merge pull request #195 from CelsoDeSa/main
Thanks @CelsoDeSa — clean Kimi Code integration, follows existing patterns perfectly!
2026-03-26 23:47:09 -05:00
Michael SitarzewskiandClaude Opus 4.6 14cd42972c Add academic division to convert.sh and install.sh directory loops
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 15:31:22 -05:00
Celso de Sá 422fa1bd68 feat(kimi): add Kimi Code CLI integration support
Add complete support for Kimi Code CLI agent format.

- Add convert_kimi() function to generate YAML agent specs
- Add install_kimi() function to install agents to ~/.config/kimi/agents/
- Add Kimi to tool detection and installer UI
- Add integrations/kimi/ directory (generated files gitignored)
- Update integrations/README.md with Kimi documentation
- Add generated agent directories to .gitignore

Users can generate agents with: ./scripts/convert.sh --tool kimi
2026-03-14 15:05:06 -03:00
CagesThrottleUs eaf9b4be18 feat(scripts): add parallelization for install.sh
Signed-off-by: CagesThrottleUs <manstein.felix@gmail.com>
2026-03-14 10:59:33 +05:30
Smit Devrukhkar d8454d308d Copilot agents need to be copied to ~/.copilot/agents in order to show up as usable agents in github copilot 2026-03-13 15:09:25 -07:00
stablegenius49 3ddf9b6b4b fix gemini cli installer preflight 2026-03-12 14:45:18 -07:00
Michael Sitarzewski b9437990cd Merge pull request #147 from muleyprasad/main
Welcome Qwen Code as the 9th converter target! Follows existing patterns well.
2026-03-12 07:49:22 -05:00
abu-matterize 4df2226256 Fix OpenCode install/convert color compatibility 2026-03-12 16:02:10 +05:30
Prasad Muley 1a0d029e1b Add Qwen Code support to convert.sh and install.sh
- Add convert_qwen() to scripts/convert.sh for generating Qwen SubAgent .md files
- Add install_qwen() to scripts/install.sh for installing to .qwen/agents/ (project-scoped)
- Add qwen detection, tool label, and install cases
- Update README.md with Qwen in supported tools table + usage section
- Add integrations/qwen/agents/ to .gitignore + create .gitkeep
- Add Qwen Code compatibility note to CONTRIBUTING.md
- Preserve tools: field in Qwen output when present in source agents
- Fix interactive installer to show dynamic [1-N] toggle range
- Update README roadmap checklist to include Qwen Code

Qwen SubAgents use minimal YAML frontmatter (name, description) with optional tools: field preserved from source. Body content passes through unchanged.
Tested with 120 agents — all convert and install successfully.
2026-03-11 23:02:10 -04:00
Michael SitarzewskiandClaude Opus 4.6 71c3bdf03c Add sales division to installers, linter, and README
- 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>
2026-03-11 09:54:45 -05:00
Yimikami d1d3c9c133 fix: install all agent categories for copilot 2026-03-11 16:34:04 +03:00
Pip 27afa03c64 openclaw: let stderr through on agents add failure 2026-03-10 18:54:15 -05:00
Pip 6c78886ec9 openclaw: auto-register agents on install
After copying workspace files, call `openclaw agents add --non-interactive`
for each agent so they're immediately usable by agentId without any manual
config steps. Guarded by `command -v openclaw` so it's a no-op when OpenClaw
isn't installed. Adds a post-install reminder to restart the gateway.

Tested by Pip — an OpenClaw instance running on the machine that maintains
the agency-agents repo. 🫛
2026-03-10 17:42:31 -05:00
Michael SitarzewskiandClaude Opus 4.6 42393d76ab Add OpenClaw support to install.sh
- 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>
2026-03-10 17:28:48 -05:00
Michael Sitarzewski a732075285 Merge PR #76: Align OpenCode integration with current conventions
fix(opencode): align integration with current OpenCode conventions
2026-03-10 16:52:22 -05:00
Michael Sitarzewski c54a597638 Merge pull request #68 from 0xdx2/copilot
feat:Add support for Copilot agents installation in install.sh
2026-03-10 09:51:20 -05:00
Michael SitarzewskiandClaude Opus 4.6 74e756be57 Support nested agent directories and add game-development category
- 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>
2026-03-10 09:06:47 -05:00
Michael SitarzewskiandClaude Opus 4.6 1707291599 Add paid-media category to scripts and CI workflow
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>
2026-03-10 08:18:35 -05:00
Victor Kzam fc669c1b74 fix(opencode): use plural agents/ directory per current conventions
OpenCode docs now specify agents/ (plural) as the standard directory name;
agent/ (singular) is legacy backwards-compat. Update the converter output
path, installer source/dest paths, and .gitignore entry accordingly.
2026-03-09 13:13:56 +00:00
0xdx2 f537275383 feat:Add support for Copilot agents installation in install.sh 2026-03-09 15:42:05 +08:00