From 21ad0d47a5f20059f862c23964ff77a6469d04c7 Mon Sep 17 00:00:00 2001 From: tiennm99 Date: Wed, 16 Sep 2026 21:11:54 +0700 Subject: [PATCH 1/4] feat: admit agent development environments; add Orca and Paseo Criterion 1 previously excluded "workspaces for agents", which ruled out the ADE category entirely. ADEs are the surface a developer actually works in, the same way a coding agent is, so they now qualify on their own terms. Libraries, SDKs, skill collections and observability-only layers stay out. - Widen inclusion criterion 1 in templates/readme.tmpl and document the two admitted kinds in docs/CONTRIBUTING.md. - Add `orchestration` to the Workflow facet in validate.go so ADEs are filterable as a distinct class on the dashboard. - Add stablyai/orca (70.0k) and getpaseo/paseo (17.5k). README.md is regenerated from the template by the daily run; its Contributing section is updated here so it is not stale in the meantime. go run . -check: 43 agents valid. go test ./...: ok. --- README.md | 4 ++-- data/agents.yml | 8 ++++++++ docs/CONTRIBUTING.md | 18 ++++++++++++++++++ templates/readme.tmpl | 4 ++-- validate.go | 2 +- 5 files changed, 31 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 4919ebb..568150f 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ **Inclusion criteria** — a repo belongs on this list when it is: -1. **An AI coding agent or assistant itself** — a tool that autonomously writes, edits, or reviews code. Frameworks, wrappers, observability layers, and workspaces *for* agents are out of scope. +1. **An AI coding agent, or an environment for running them** — either a tool that autonomously writes, edits, or reviews code, or an *agent development environment* (ADE) that runs and coordinates those agents as its primary purpose. Libraries, SDKs, prompt/skill collections, and observability-only layers remain out of scope. 2. **Notable**: roughly **10,000+ GitHub stars** (the current list floor). 3. **Open source and actively maintained** — no push in **6 months** means the entry is dropped. The daily run flags anything past **3 months** for review, so the ranking reflects tools people can actually use today. @@ -89,7 +89,7 @@ agents: |-------|------| | Surface (at least one) | `terminal` · `editor-plugin` · `ide` · `desktop` · `web` · `self-hosted` | | Model access | `byo-model` · `single-vendor` · `local-models` | -| Workflow | `interactive` · `autonomous` · `review` · `app-builder` · `research` | +| Workflow | `interactive` · `autonomous` · `review` · `app-builder` · `research` · `orchestration` | | Integration | `mcp` · `acp` · `headless` | | Origin (at most one) | `vendor` · `community` | diff --git a/data/agents.yml b/data/agents.yml index 811574b..5e586b4 100644 --- a/data/agents.yml +++ b/data/agents.yml @@ -143,3 +143,11 @@ agents: repo: Orkas tags: [desktop, byo-model, interactive, community] notes: "Open-source, local-first desktop AI workforce coordinated by a Commander through one chat; supports local coding-agent workflows." + - owner: stablyai + repo: orca + tags: [desktop, terminal, byo-model, orchestration, headless, community] + notes: "ADE: runs Codex, Claude Code, OpenCode and Pi side-by-side, each in its own git worktree, with a mobile companion app." + - owner: getpaseo + repo: paseo + tags: [desktop, web, terminal, self-hosted, byo-model, orchestration, headless, community] + notes: "ADE: self-hosted daemon that runs Claude Code, Codex, Copilot, OpenCode and Pi on your own machines, driven from desktop, mobile, web or CLI." diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 59c5bb5..3529c9a 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -24,6 +24,23 @@ Optional fields: `notes` (for clarifications or caveats) | `tags` | list | Yes | Tags from the vocabulary below; at least one surface tag, at most one origin tag | | `notes` | string | No | Additional context or disclaimers | +## Scope + +Two kinds of project belong here: + +1. **Coding agents** — they write, edit, or review code themselves. +2. **Agent development environments (ADEs)** — their primary purpose is running and + coordinating those agents: parallel worktrees, session management, remote or mobile + control. Tag these `orchestration`. + +An ADE earns a row because it is the surface a developer actually works in, the same way +a coding agent is. What stays out is anything that only *assists* agents without being a +place you run them: libraries and SDKs, prompt or skill collections, dashboards and +observability-only layers, and single-purpose wrappers around one agent's config. + +The other two criteria in the [README](../README.md#contributing) — roughly 10,000+ stars +and active maintenance — apply to both kinds equally. + ## Tag Vocabulary Tags replaced the old single-select `category` field, because one slot cannot @@ -55,6 +72,7 @@ lives in `tagVocabulary` (`validate.go`) and reaches the dashboard through - **review** — reviews diffs or existing code rather than writing it - **app-builder** — prompt-to-app scaffolding, with preview and deploy - **research** — published as a research artifact or proof of concept +- **orchestration** — runs and coordinates *other* coding agents as its primary purpose (an ADE), rather than editing code itself **Integration** — what it plugs into. diff --git a/templates/readme.tmpl b/templates/readme.tmpl index 680b225..2b1f070 100644 --- a/templates/readme.tmpl +++ b/templates/readme.tmpl @@ -33,7 +33,7 @@ **Inclusion criteria** — a repo belongs on this list when it is: -1. **An AI coding agent or assistant itself** — a tool that autonomously writes, edits, or reviews code. Frameworks, wrappers, observability layers, and workspaces *for* agents are out of scope. +1. **An AI coding agent, or an environment for running them** — either a tool that autonomously writes, edits, or reviews code, or an *agent development environment* (ADE) that runs and coordinates those agents as its primary purpose. Libraries, SDKs, prompt/skill collections, and observability-only layers remain out of scope. 2. **Notable**: roughly **10,000+ GitHub stars** (the current list floor). 3. **Open source and actively maintained** — no push in **6 months** means the entry is dropped. The daily run flags anything past **3 months** for review, so the ranking reflects tools people can actually use today. @@ -54,7 +54,7 @@ agents: |-------|------| | Surface (at least one) | `terminal` · `editor-plugin` · `ide` · `desktop` · `web` · `self-hosted` | | Model access | `byo-model` · `single-vendor` · `local-models` | -| Workflow | `interactive` · `autonomous` · `review` · `app-builder` · `research` | +| Workflow | `interactive` · `autonomous` · `review` · `app-builder` · `research` · `orchestration` | | Integration | `mcp` · `acp` · `headless` | | Origin (at most one) | `vendor` · `community` | diff --git a/validate.go b/validate.go index f25cf74..caf5fe3 100644 --- a/validate.go +++ b/validate.go @@ -32,7 +32,7 @@ var repoPattern = regexp.MustCompile(`^[A-Za-z0-9._-]+$`) var tagVocabulary = []tagFacet{ {ID: facetSurface, Label: "Surface", Tags: []string{"terminal", "editor-plugin", "ide", "desktop", "web", "self-hosted"}}, {ID: facetModel, Label: "Model access", Tags: []string{"byo-model", "single-vendor", "local-models"}}, - {ID: facetWorkflow, Label: "Workflow", Tags: []string{"interactive", "autonomous", "review", "app-builder", "research"}}, + {ID: facetWorkflow, Label: "Workflow", Tags: []string{"interactive", "autonomous", "review", "app-builder", "research", "orchestration"}}, {ID: facetIntegration, Label: "Integration", Tags: []string{"mcp", "acp", "headless"}}, {ID: facetOrigin, Label: "Origin", Tags: []string{"vendor", "community"}}, } From c5d8561d8f783c9a65cccc5bcfe85b552ff058af Mon Sep 17 00:00:00 2001 From: tiennm99 Date: Wed, 16 Sep 2026 21:21:12 +0700 Subject: [PATCH 2/4] feat: widen scope to AI developer tools; enforce hard 1,000-star floor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The list was already drifting past "coding agents" — ADEs were admitted in the previous commit. Rather than keep widening criterion 1 one category at a time, it now describes the actual subject: developer tools built around AI. The dividing line becomes tools you use vs. building blocks you import, which keeps libraries, SDKs, model weights and skill collections out. The star floor drops from a soft "roughly 10,000+" to a hard 1,000: - enforceStarFloor drops any below-floor entry from the ranking and emits an ::error:: annotation, so the published list can never violate the rule. Dropping rather than failing keeps one bad entry from blocking the refresh of every other repo. - -check cannot catch this (star counts need the API, -check runs offline); docs/CONTRIBUTING.md says so explicitly. Side effect: Orkas (1,998 stars) now clears the floor it previously missed. go run . -check: 43 agents valid. go test ./...: ok. --- README.md | 6 +++--- docs/CONTRIBUTING.md | 37 ++++++++++++++++++++++++++----------- github.go | 23 +++++++++++++++++++++++ github_test.go | 21 +++++++++++++++++++++ main.go | 5 +++++ templates/readme.tmpl | 6 +++--- 6 files changed, 81 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 568150f..5ad65a3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Awesome Coding Agents -> Curated ranking of AI agent coding tools, sorted by GitHub stars. +> Curated ranking of AI-powered developer tools, sorted by GitHub stars. > Updated daily by GitHub Actions. 📊 **[Interactive dashboard with star-history charts →](https://tiennm99.github.io/awesome-coding-agents/)** @@ -68,8 +68,8 @@ **Inclusion criteria** — a repo belongs on this list when it is: -1. **An AI coding agent, or an environment for running them** — either a tool that autonomously writes, edits, or reviews code, or an *agent development environment* (ADE) that runs and coordinates those agents as its primary purpose. Libraries, SDKs, prompt/skill collections, and observability-only layers remain out of scope. -2. **Notable**: roughly **10,000+ GitHub stars** (the current list floor). +1. **A developer tool built around AI** — something a developer uses to build software, where an LLM is central to what it does. That covers agents that write, edit, or review code; agent development environments that run and coordinate them; and AI-assisted editors, terminals, and review tools. Libraries, SDKs, model weights, and prompt or skill collections are out of scope — this list ranks tools you *use*, not building blocks you *import*. +2. **At least 1,000 GitHub stars** — a hard floor, enforced by the updater. An entry below it is dropped from the ranking automatically, so the threshold is never waived for an individual entry. 3. **Open source and actively maintained** — no push in **6 months** means the entry is dropped. The daily run flags anything past **3 months** for review, so the ranking reflects tools people can actually use today. Archived or abandoned repos are kept only when they are historically significant, and are marked as such in [`data/agents.yml`](data/agents.yml). diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 3529c9a..de079f8 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -26,20 +26,35 @@ Optional fields: `notes` (for clarifications or caveats) ## Scope -Two kinds of project belong here: +This list ranks **developer tools built around AI** — things a developer uses to +build software, where an LLM is central to what the tool does. In practice that +spans several shapes: -1. **Coding agents** — they write, edit, or review code themselves. -2. **Agent development environments (ADEs)** — their primary purpose is running and - coordinating those agents: parallel worktrees, session management, remote or mobile - control. Tag these `orchestration`. +- **Coding agents** — they write, edit, or review code themselves. +- **Agent development environments (ADEs)** — their primary purpose is running and + coordinating those agents: parallel worktrees, session management, remote or + mobile control. Tag these `orchestration`. +- **AI-assisted editors, terminals, and review tools** — the developer stays in the + driver's seat and the model accelerates the work. -An ADE earns a row because it is the surface a developer actually works in, the same way -a coding agent is. What stays out is anything that only *assists* agents without being a -place you run them: libraries and SDKs, prompt or skill collections, dashboards and -observability-only layers, and single-purpose wrappers around one agent's config. +The dividing line is **tools you use vs. building blocks you import**. Out of scope: +libraries and SDKs, agent frameworks meant to be built on, model weights, prompt or +skill collections, and dashboards that only observe a tool without being one. -The other two criteria in the [README](../README.md#contributing) — roughly 10,000+ stars -and active maintenance — apply to both kinds equally. +A tool also has to be *about* software development. General-purpose assistants and +chat UIs do not qualify just because a developer could use them. + +### The star floor is hard + +**1,000 stars minimum.** This is not a judgement call and is not waived for +individual entries, however good the tool is. The updater enforces it: any entry +below the floor is dropped from the ranking and reported as an `::error::` in the +Actions log (`enforceStarFloor` in `github.go`). Because star counts require the +API, `go run . -check` cannot catch this offline — a below-floor entry passes CI +and is then dropped by the next daily run, so check the count before opening a PR. + +Maintenance requirements apply to every entry equally: no push in 6 months means +removal, and the daily run warns past 3 months. ## Tag Vocabulary diff --git a/github.go b/github.go index 3a621d7..3e1919a 100644 --- a/github.go +++ b/github.go @@ -74,6 +74,13 @@ var graphqlURL = "https://api.github.com/graphql" // annotates the run. const staleWarnAfter = 90 * 24 * time.Hour +// minStars is the hard inclusion floor from the README's criteria. Unlike the +// staleness window, this is not a judgement call: an entry below the floor is +// dropped from the published ranking, so the list can never show a repo that +// does not meet it. It lives here rather than in -check because star counts +// need the API and -check runs offline. +const minStars = 1000 + // chunkSize is the max aliases per GraphQL request (GitHub node-limit safety margin). const chunkSize = 50 @@ -272,3 +279,19 @@ func doWithRetry(token string, body []byte) ([]byte, int, error) { } return nil, 0, fmt.Errorf("all %d attempts failed; last error: %w", maxRetries, lastErr) } + +// enforceStarFloor drops entries below minStars and annotates each one as a run +// error. Dropping rather than failing the run keeps one below-floor entry from +// blocking the refresh of every other repo, while the ::error:: annotation +// makes the removal impossible to miss in the Actions log. +func enforceStarFloor(stats []Stat) []Stat { + kept := make([]Stat, 0, len(stats)) + for _, s := range stats { + if s.Stars < minStars { + fmt.Printf("::error::repo %s has %d stars, below the %d minimum — dropped from the ranking; remove its entry from data/agents.yml\n", s.CanonicalKey, s.Stars, minStars) + continue + } + kept = append(kept, s) + } + return kept +} diff --git a/github_test.go b/github_test.go index 27d63bc..7287702 100644 --- a/github_test.go +++ b/github_test.go @@ -312,3 +312,24 @@ func TestFetchStats_StaleWarning(t *testing.T) { t.Errorf("missing archived warning %q in:\n%s", want, logs) } } + +func TestEnforceStarFloor(t *testing.T) { + in := []Stat{ + {CanonicalKey: "a/above", Stars: minStars + 1}, + {CanonicalKey: "b/exactly", Stars: minStars}, + {CanonicalKey: "c/below", Stars: minStars - 1}, + {CanonicalKey: "d/zero", Stars: 0}, + } + + got := enforceStarFloor(in) + + want := []string{"a/above", "b/exactly"} + if len(got) != len(want) { + t.Fatalf("kept %d entries, want %d: %+v", len(got), len(want), got) + } + for i, w := range want { + if got[i].CanonicalKey != w { + t.Errorf("kept[%d] = %s, want %s", i, got[i].CanonicalKey, w) + } + } +} diff --git a/main.go b/main.go index b756b24..6ab7151 100644 --- a/main.go +++ b/main.go @@ -52,6 +52,11 @@ func run() error { return err } + stats = enforceStarFloor(stats) + if len(stats) == 0 { + return fmt.Errorf("no agents in %s meet the %d-star minimum", agentsPath, minStars) + } + snapshots, deltas7, deltas30, err := appendHistory(historyPath, stats) if err != nil { return err diff --git a/templates/readme.tmpl b/templates/readme.tmpl index 2b1f070..6e28e2b 100644 --- a/templates/readme.tmpl +++ b/templates/readme.tmpl @@ -1,6 +1,6 @@ # Awesome Coding Agents -> Curated ranking of AI agent coding tools, sorted by GitHub stars. +> Curated ranking of AI-powered developer tools, sorted by GitHub stars. > Updated daily by GitHub Actions. 📊 **[Interactive dashboard with star-history charts →](https://tiennm99.github.io/awesome-coding-agents/)** @@ -33,8 +33,8 @@ **Inclusion criteria** — a repo belongs on this list when it is: -1. **An AI coding agent, or an environment for running them** — either a tool that autonomously writes, edits, or reviews code, or an *agent development environment* (ADE) that runs and coordinates those agents as its primary purpose. Libraries, SDKs, prompt/skill collections, and observability-only layers remain out of scope. -2. **Notable**: roughly **10,000+ GitHub stars** (the current list floor). +1. **A developer tool built around AI** — something a developer uses to build software, where an LLM is central to what it does. That covers agents that write, edit, or review code; agent development environments that run and coordinate them; and AI-assisted editors, terminals, and review tools. Libraries, SDKs, model weights, and prompt or skill collections are out of scope — this list ranks tools you *use*, not building blocks you *import*. +2. **At least 1,000 GitHub stars** — a hard floor, enforced by the updater. An entry below it is dropped from the ranking automatically, so the threshold is never waived for an individual entry. 3. **Open source and actively maintained** — no push in **6 months** means the entry is dropped. The daily run flags anything past **3 months** for review, so the ranking reflects tools people can actually use today. Archived or abandoned repos are kept only when they are historically significant, and are marked as such in [`data/agents.yml`](data/agents.yml). From 3310ed36d434dfd358e11b76cf4f8721b907028a Mon Sep 17 00:00:00 2001 From: tiennm99 Date: Wed, 16 Sep 2026 21:40:23 +0700 Subject: [PATCH 3/4] chore: rename to ai-dev-tools "awesome-coding-agents" no longer described the contents once the scope widened past coding agents to AI-powered developer tools generally. Renaming now was near-free: 3 stars, 4 forks, 135 unique visitors, four months old. Name selection avoided the crowded awesome-* namespace, where the obvious candidates are held by established lists (awesome-ai-devtools 3.9k, awesome-ai-tools 6.2k, awesome-ai-coding-tools 2.1k). "ai-dev-tools" has no incumbent at the exact name. - Repo renamed; GitHub description and homepage updated. - Module path, User-Agent, .gitignore, H1, site /og:title and every GitHub Pages URL updated across README.md, templates/readme.tmpl, docs/LOCAL_DEV.md and site/index.html. - plans/reports/ left untouched: it is a dated historical record. go build: ok. go run . -check: 43 agents valid. go test ./...: ok. --- .gitignore | 2 +- README.md | 8 ++++---- docs/LOCAL_DEV.md | 2 +- github.go | 2 +- go.mod | 2 +- site/index.html | 16 ++++++++-------- templates/readme.tmpl | 8 ++++---- 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index f60ce43..cf8ff6a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ # Go build artifacts -/awesome-coding-agents +/ai-dev-tools *.exe *.test *.out diff --git a/README.md b/README.md index 5ad65a3..ff794cb 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ -# Awesome Coding Agents +# AI Dev Tools > Curated ranking of AI-powered developer tools, sorted by GitHub stars. > Updated daily by GitHub Actions. -📊 **[Interactive dashboard with star-history charts →](https://tiennm99.github.io/awesome-coding-agents/)** +📊 **[Interactive dashboard with star-history charts →](https://tiennm99.github.io/ai-dev-tools/)** **Last updated:** 2026-09-16 03:54 UTC · **Tracked:** 40 repos **Top 7-day mover:** [earendil-works/pi](https://github.com/earendil-works/pi) (+2642 stars) @@ -60,7 +60,7 @@ 3. The updater fetches live repo metadata via the GitHub GraphQL API in one batched query. 4. Star counts are appended to `data/history.jsonl` for 7-day delta computation. 5. This `README.md` is regenerated from `templates/readme.tmpl` and committed back to the repo. -6. `site/data.json` is regenerated and the [dashboard](https://tiennm99.github.io/awesome-coding-agents/) (`site/index.html`) is redeployed to GitHub Pages. +6. `site/data.json` is regenerated and the [dashboard](https://tiennm99.github.io/ai-dev-tools/) (`site/index.html`) is redeployed to GitHub Pages. **Δ7d:** Change in stars over the past 7 days; `—` means fewer than 7 days of history. @@ -83,7 +83,7 @@ agents: tags: [terminal, byo-model, interactive, community] ``` -**Tags** describe a tool across five facets — the [dashboard](https://tiennm99.github.io/awesome-coding-agents/) filters on them, OR within a facet and AND across facets: +**Tags** describe a tool across five facets — the [dashboard](https://tiennm99.github.io/ai-dev-tools/) filters on them, OR within a facet and AND across facets: | Facet | Tags | |-------|------| diff --git a/docs/LOCAL_DEV.md b/docs/LOCAL_DEV.md index a3f42fb..31c9b68 100644 --- a/docs/LOCAL_DEV.md +++ b/docs/LOCAL_DEV.md @@ -9,7 +9,7 @@ 1. Go to [https://github.com/settings/tokens](https://github.com/settings/tokens) 2. Click "Generate new token" → "Generate new token (classic)" -3. Give it a name (e.g., "awesome-coding-agents") +3. Give it a name (e.g., "ai-dev-tools") 4. Select scope: **`public_repo`** (needed to read public repo metadata) 5. Click "Generate token" and copy the value diff --git a/github.go b/github.go index 3e1919a..6079ba4 100644 --- a/github.go +++ b/github.go @@ -251,7 +251,7 @@ func doWithRetry(token string, body []byte) ([]byte, int, error) { } req.Header.Set("Authorization", "Bearer "+token) req.Header.Set("Content-Type", "application/json") - req.Header.Set("User-Agent", "awesome-coding-agents-updater") + req.Header.Set("User-Agent", "ai-dev-tools-updater") resp, err := httpClient.Do(req) if err != nil { diff --git a/go.mod b/go.mod index 7d02bfe..655bf88 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/tiennm99/awesome-coding-agents +module github.com/tiennm99/ai-dev-tools go 1.23 diff --git a/site/index.html b/site/index.html index 4e84b00..5c92037 100644 --- a/site/index.html +++ b/site/index.html @@ -3,11 +3,11 @@ <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> -<title>Awesome Coding Agents — Rankings & History +AI Dev Tools — Rankings & History - + - + @@ -211,11 +211,11 @@

- Awesome Coding Agents + AI Dev Tools

Curated ranking of open-source AI coding agents by GitHub stars, refreshed daily.
- + GitHub @@ -225,7 +225,7 @@