ir:agent-landscape

Scan the web for coding agents and agent orchestrators, track GitHub stars and trends, rank by popularity+momentum, and publish a report to the irrlicht site. Shows which agents irrlicht already supports. Use when user says 'agent landscape', 'scan agents', 'coding agent tracker', 'agent popularity', '/ir:agent-landscape', or wants to see the competitive landscape of coding agents.

13 stars

Best use case

ir:agent-landscape is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Scan the web for coding agents and agent orchestrators, track GitHub stars and trends, rank by popularity+momentum, and publish a report to the irrlicht site. Shows which agents irrlicht already supports. Use when user says 'agent landscape', 'scan agents', 'coding agent tracker', 'agent popularity', '/ir:agent-landscape', or wants to see the competitive landscape of coding agents.

Teams using ir:agent-landscape should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/ir:agent-landscape/SKILL.md --create-dirs "https://raw.githubusercontent.com/ingo-eichhorst/Irrlicht/main/.claude/skills/ir:agent-landscape/skill.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/ir:agent-landscape/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How ir:agent-landscape Compares

Feature / Agentir:agent-landscapeStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Scan the web for coding agents and agent orchestrators, track GitHub stars and trends, rank by popularity+momentum, and publish a report to the irrlicht site. Shows which agents irrlicht already supports. Use when user says 'agent landscape', 'scan agents', 'coding agent tracker', 'agent popularity', '/ir:agent-landscape', or wants to see the competitive landscape of coding agents.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Agent Landscape Tracker

Discover, track, and rank coding agents and agent orchestrators. Publish a styled HTML report to the irrlicht site at `site/landscape/index.html` and an in-depth comparison at `site/landscape/compare/index.html`.

## Non-negotiable rules

Past runs of this skill invented data — fabricated star counts, wrong repo paths, copied descriptions instead of reading the actual README, and fake historical snapshots (e.g. "2026-01-01" entries for agents the skill only started tracking in April). Follow these rules to prevent a repeat:

1. **Never invent a value.** Every `stars`, `language`, `license`, `description`, `funding_millions_usd`, `estimated_users`, or historical snapshot must come from a concrete source you can quote (the gh CLI, a specific WebFetch URL, a specific search result). If you don't have a source, write `null` and move on.
2. **Never copy an old value forward.** If you can't re-verify a field on this run, set it to `null` instead of leaving whatever was in the file from last time.
3. **Always use `gh api` for GitHub data, not WebFetch.** `gh api repos/OWNER/REPO` returns canonical stars, language, license, description, archived flag, and follows renames. `WebFetch` on github.com returns JS-rendered pages that routinely give stale numbers.
4. **Honor GitHub's repo-rename redirects.** `gh api` returns a `full_name` field. If `full_name != OWNER/REPO` that you requested, the repo has been transferred. Update `github_repo` to the new canonical path in `agent-data.json`.
5. **Never write a historical snapshot you didn't measure.** `stars_history` may only contain entries this skill actually measured. Do not back-fill "~3 months ago" or "~1 month ago" rows from memory or estimate.
6. **Plausibility check before writing.** Before writing a new stars value, compare to the prior snapshot. If the delta is >30% in <30 days for a repo with >5k stars, investigate before trusting it — it's more likely a bad query than real growth. Common causes: cached HTML, wrong repo, joke repo inflating itself via README marketing.
7. **Descriptions come from the repo's own `description` field**, not from product marketing pages. If a description contains attribution (e.g. "Anthropic's X" or "Google's Y"), verify the GitHub owner matches the claim. `badlogic/pi-mono` is not Anthropic's. `block/goose` is not Block's anymore (it was transferred). `cursor/cursor` is not the editor source (it's the issue tracker).
8. **Archived repos go in the "archived" list, not the ranked table.** `gh api` returns `archived: true` — respect it.
9. **Short-window growth is not 1-month or 3-month growth.** Until the repo has a snapshot ≥30 days old, the growth column must read "Recent growth since <date> (Nd ago)", not "1M" or "3M". The HTML generator already enforces this.

## Data File

All state persists in `references/agent-data.json` (relative to this skill directory). Schema:

```json
{
  "last_updated": "2026-04-24",
  "agents": [
    {
      "name": "Aider",
      "github_repo": "Aider-AI/aider",
      "category": "agent",
      "website": "https://aider.chat",
      "description": "AI pair-programming tool in your terminal.",
      "stars": 43874,
      "language": "Python",
      "license": "Apache-2.0",
      "interface": "CLI",
      "pricing": "Free (open source)",
      "stars_history": [
        {"date": "2026-04-24", "stars": 43874},
        {"date": "2026-04-12", "stars": 43202}
      ],
      "alternative_metrics": null,
      "irrlicht_support": "none",
      "first_seen": "2026-04-05"
    }
  ]
}
```

Field definitions:
- `github_repo` — canonical `OWNER/REPO` from `gh api` `.full_name`. Rewrite on repo rename.
- `stars` — current GitHub stars from `gh api` `.stargazers_count`. `null` if no public repo.
- `language`, `license` — straight from `gh api` (`.language`, `.license.spdx_id`). `null` if missing.
- `description` — from `gh api` `.description`. Lightly cleaned if too long, but never replaced with third-party marketing copy. For non-GitHub agents, use the project's own homepage.
- `interface` — curated string (CLI / IDE extension / Desktop app / Web / SDK / Enterprise SaaS / CLI (tmux) / etc.).
- `pricing` — curated string (Free (open source) / Freemium / Paid / Enterprise / Paid (usage-based)).
- `stars_history` — snapshots **this skill actually measured**. Newest first. Never back-fill.
- `alternative_metrics` — for non-GitHub agents. Object with any of `funding_millions_usd`, `acquisition_price_millions_usd`, `estimated_users`, `source`, `measured_date`. Set to `null` when `github_repo` is set.
- `irrlicht_support` — `"live"` (adapter exists in `core/adapters/inbound/`), `"planned"`, or `"none"`.
- `category` — `"agent"` or `"orchestrator"`.
- `first_seen` — ISO date when this entry was first added. Never change it once set.

### Snapshot strategy

Snapshots accumulate over successive runs. No back-filling.

On each run:
1. Append today's `{date, stars}` to `stars_history` for each GitHub agent.
2. Retain all prior real snapshots (no trimming until we have > 12 entries).
3. If today already has an entry, overwrite it (same-day re-run).
4. Dates are the run date, not a month/week anchor.

Growth is only computed on demand in the HTML generator using whichever snapshots exist. Until there is a snapshot ≥30 days old, growth is shown as "Recent growth since <date> (Nd ago)" rather than "1M" / "3M".

### NEW badge

An agent is "NEW" only if both:
- `first_seen` is strictly later than the earliest `first_seen` across all tracked agents (so the initial seed batch never gets tagged), **and**
- `first_seen` is within the last 90 days.

## Deny list

`references/deny-list.txt` lists agent/orchestrator names to explicitly exclude. One name per line; `#` lines are comments. Entries with matching `name` field are skipped during discovery and removed from `agent-data.json` if present.

## Irrlicht support mapping

The canonical source of truth is `core/adapters/inbound/agents/` + `core/adapters/inbound/orchestrators/`. As of this writing:

- `live`: Claude Code (`anthropics/claude-code`), OpenAI Codex (`openai/codex`), Pi (`earendil-works/pi`, renamed from `badlogic/pi-mono` in v0.74), Gas Town (`gastownhall/gastown`), Aider (`Aider-AI/aider`), OpenCode (`anomalyco/opencode`).
- `planned`: Gemini CLI, Cursor, Amp, Claude Squad, Qwen Code, Crush, Continue, Goose, Kilo Code, Paperclip, Ruflo, Multiclaude, SWE-agent.
- Everything else: `none`.

Before each run, `ls core/adapters/inbound/agents/` and `ls core/adapters/inbound/orchestrators/` to confirm the list is still correct. If the set of live adapters has changed, update this section and apply the change to `agent-data.json`.

## Workflow

### 0. Preflight

```bash
cd /Users/ingo/projects/irrlicht
gh auth status
ls core/adapters/inbound/agents
ls core/adapters/inbound/orchestrators
```

Abort if `gh` is not authenticated — every other step depends on it.

### 1. Load existing data

Read `references/agent-data.json`. Read `references/deny-list.txt` and prune any matching entries from the data. If `agents` is empty, read `references/seed-agents.md` for the initial list.

### 2. Refresh every GitHub agent via `gh api`

For every agent with `github_repo`, run:

```bash
gh api repos/<github_repo> --jq '{repo: .full_name, stars: .stargazers_count, language: .language, license: .license.spdx_id, description: .description, archived: .archived}'
```

Batch them in a single bash loop so you don't issue 40 separate tool calls. Example:

```bash
jq -r '.agents[] | select(.github_repo != null) | .github_repo' references/agent-data.json \
| while read -r repo; do
    gh api "repos/$repo" --jq '{queried: "'"$repo"'", repo: .full_name, stars: .stargazers_count, language: .language, license: .license.spdx_id, description: .description, archived: .archived}'
  done
```

For each result:
- If `repo != queried`, GitHub has renamed the repo — update `github_repo` to `repo`.
- If `archived: true`, move the agent out of the ranked tables into a separate "archived" list (or drop it if it's been replaced by another product — note the reason in a commit message).
- Update `stars`, `language`, `license`, `description` from the API response.
- Append today's `{date, stars}` to `stars_history` (overwriting if today already exists).
- Run the plausibility check from rule #6 above.

### 3. Search for new agents (optional; only when explicitly requested or quarterly)

Use WebSearch queries such as:
- `"best AI coding agents <year>"`
- `"new coding assistant CLI terminal <year>"`
- `"agent orchestrator framework <year>"`
- `"claude code alternatives"` / `"gas town alternatives"`

Skip anything that isn't a coding-specific agent or orchestrator (IDE themes, linters, general chatbots). Skip anything on the deny list.

For each new discovery:
- Resolve the canonical repo with `gh api` (see step 2) before writing anything.
- Set `first_seen` to today.
- Fill `interface` and `pricing` manually based on the project's own homepage.

### 4. Refresh non-GitHub agents (alternative_metrics)

For each agent with `github_repo: null`, re-check the following and update `measured_date` to today:

- Funding: `"<name>" funding round <year>` — look for the most recent round on TechCrunch / Bloomberg / Crunchbase.
- Acquisition: `"<name>" acquisition <year>` — if acquired, set `acquisition_price_millions_usd` and note in the description.
- User count: `"<name>" monthly active users` or `"<name>" VS Code marketplace installs`.

Only write numbers you have a source for. Set `source` to a short citation (outlet + date). If no data found, set `source` to a honest `"no public data found"` string.

Common pitfalls:
- Devin ≠ Cognition's total funding. Record under Devin since Devin is Cognition's product, but note "Cognition AI parent" in the source.
- Amp ≠ Sourcegraph Cody. Cody was rebranded to Amp; Amp is spinning out as a standalone company. Do not list both.
- Windsurf was acquired by Cognition (Dec 2025). Its funding field should be null; its `acquisition_price_millions_usd` should be set.

### 5. Save `agent-data.json`

Write the updated data. Sort agents by category (agent first), then by stars descending, then by name ascending. Set `last_updated` to today.

### 6. Generate HTML

Run the HTML generator:

```bash
python3 .claude/skills/ir:agent-landscape/assets/generate.py   # if checked in
# else: use the generator documented below
```

If the generator script is not checked in, the latest reference implementation lives in the commit that last touched `site/landscape/`. Use it as-is rather than re-writing it from scratch.

The generator must:
- Rank GitHub agents by `log10(stars + 1)` when no ≥30-day snapshot exists (no fake trend bonus).
- Add a trend component only when at least one snapshot is ≥30 days old.
- Show "Recent growth since `<prior snapshot date>` (Nd ago)" in the growth column header when no 30-day snapshot exists; switch to "1M / 3M growth" only when real snapshots at those horizons exist.
- Tag NEW per the rule above (later than earliest `first_seen` and within 90 days).
- Place non-GitHub agents in an unranked "No public repo" group below the ranked table.
- Include a footnote: "* License and pricing are sourced from the GitHub API and public web pages. Verify on the project's own website before relying on them."

### 7. Update landing-page nav

Ensure `site/index.html` has the Landscape nav link (nav bar + footer). Idempotent; skip if present.

### 8. Summary

Print:
- Count of tracked agents, how many github vs non-github.
- Any repos where `gh api` returned a renamed `full_name` (report the rename so the user can commit it).
- Any agents marked `archived: true` (report even if you've moved them out of the ranked list).
- Any plausibility-check failures (stars delta >30% in <30 days for a 5k+ repo) — do NOT silently write them; ask the user whether to trust the number.
- Top 5 by current stars per category.
- Diff summary: `git diff --stat site/landscape/` and `git diff --stat .claude/skills/ir:agent-landscape/references/agent-data.json`.

Related Skills

irrlicht-design

13
from ingo-eichhorst/Irrlicht

Use this skill to generate well-branded interfaces and assets for Irrlicht, either for production or throwaway prototypes/mocks/etc. Contains essential design guidelines, colors, type, fonts, assets, and UI kit components for prototyping.

ir:triage

13
from ingo-eichhorst/Irrlicht

Autonomously triage GitHub issues on ingo-eichhorst/Irrlicht. Diagnostic-only: scores each issue against a 6-axis readiness rubric and lands it at ready-for-agent or needs-info, with a one-line justification per label. Triggers: "/ir:triage" (sweep), "/ir:triage #N" (single), "/ir:triage #N #M".

ir:test-mac

13
from ingo-eichhorst/Irrlicht

Build and run a dev irrlicht daemon + macOS Swift app for local testing. Asks whether to run a SEPARATE instance alongside production (isolated state, port 7838 — production keeps running) or to REPLACE the running production versions (production port 7837 + production state, so the statusline quota feed and existing sessions show up). Use when the user says "test mac", "restart mac", "rebuild mac", or "/ir:test-mac".

ir:release

13
from ingo-eichhorst/Irrlicht

Build and publish an irrlicht release. Bumps version, builds Go daemon + Swift app, creates signed app bundle with icon, packages DMG (branded installer) + PKG, updates docs/changelog/landing page, commits, tags, pushes, and creates GitHub release with assets. Default: patch bump. Use "/ir:release minor" or "/ir:release major".

ir:refresh-aliases

13
from ingo-eichhorst/Irrlicht

Sync irrlicht's model-name alias map against codeburn's upstream BUILTIN_ALIASES. Fetches codeburn's src/models.ts, diffs entries against core/pkg/capacity/aliases.go, and proposes additions/changes as a PR. Use when user says '/ir:refresh-aliases', 'refresh aliases', 'sync codeburn aliases', 'check alias map', or when a session prices at $0 for a known model.

ir:onboarding-factory/record

13
from ingo-eichhorst/Irrlicht

Carry one assessed cell to a committed, verified recording: check prerequisites, port any missing driver step, drive the live agent CLI under a recording daemon via `of record run`, verify EVERY websocket observation (state + model + cost + tokens + agent) via `of record verify`, refresh the replay golden, and commit. Backflows a correction into the cell when the live recording disagrees with the assessment. Invoked as `/ir:onboarding-factory record <agent> <scenario>`.

ir:onboarding-factory/create-scenario

13
from ingo-eichhorst/Irrlicht

Add a brand-new scenario ROW to the matrix: one agent-agnostic `{id, name, description, acceptance_criteria, process}` entry written through `of scenario add`. Researches how the behavior manifests across every onboarded agent (and what the daemon would observe) before synthesizing the agent-agnostic spec. No agent CLI invocation, no recording. Invoked as `/ir:onboarding-factory create-scenario <slug>`.

ir:onboarding-factory/create-agent

13
from ingo-eichhorst/Irrlicht

Onboard a brand-new agent CLI as a matrix COLUMN: research its identity + recording prerequisites, register it via `of agent add`, scaffold its interactive driver from the template, and predict which step types each scenario's recipe will need (the driver-needs punch-list). No live recording. Invoked as `/ir:onboarding-factory create-agent <slug>`.

ir:onboarding-factory/assess

13
from ingo-eichhorst/Irrlicht

Judge one (agent, scenario) cell across the three pillars — agent capability, daemon sensor capture, driver capability — on cited evidence, then author the cell's recipe and machine-checkable spec. Writes the cell metadata via `of cell write` and the spec (expected.jsonl) via `of cell spec`. No live recording. Invoked as `/ir:onboarding-factory assess <agent> <scenario>`.

ir:onboarding-factory

13
from ingo-eichhorst/Irrlicht

Maintain the canonical scenario × agent fixture matrix for irrlicht. A slim dispatcher that routes intent to four focused subagents — `create-scenario` (add a matrix row), `create-agent` (add a matrix column), `assess` (judge one cell across the three pillars and write its spec), and `record` (drive the live agent and verify every websocket observation). Every read and every write goes through the `of` factory CLI (tools/onboarding-factory) — the skill itself never touches `replaydata/`. Each subagent returns a ≤6-line summary so the parent keeps its context for strategic decisions instead of drowning in per-cell tool output. Use when the user says "/ir:onboarding-factory", "onboard agent", "add a scenario", "assess fixtures", "record fixtures", or "regenerate recordings".

waddington-landscape

16
from plurigrid/asi

Waddington's epigenetic landscape: cell fate as gradient flow on potential surfaces, connecting developmental biology to dynamical systems, Schrödinger bridges, and fractional diffusion

performing-threat-landscape-assessment-for-sector

16
from plurigrid/asi

Conduct a sector-specific threat landscape assessment by analyzing threat actor targeting patterns, common attack vectors, and industry-specific vulnerabilities to inform organizational risk management.