A curated collection of papers on agentic AI systems, classified by the contribution of each one.
Every paper is filed under a single area, its contribution, then cut across by topics and facets: what it is about, at what scale, in which domain. The vocabulary is validated at build time, so a term that stops resolving stops the build.
Browse the site · Suggest a paper · Contributing guide · RSS
11 areas in 4 layers, 58 topics and 32 facet values across 5 facets.
32 papers listed, 32 of them with a written summary.
The site has filtering, search and the reading-path graph; this listing is the same data, flattened for reading on GitHub.
🔥 essential · 📖 survey · ⚖️ benchmark. Surveys first within each area, then newest first.
Where to enter the field.
foundations)2026What the agent reasons about, stores, executes and learns.
reasoning-planning)20262026NeurIPS 2023 · 2023NeurIPS 2023 · 2023ICLR 2023 · 2022memory)20262026202620262026UIST 2023 · 2023tools-context)20262026NeurIPS 2023 · 2023learning-evolution)202620262026The inner loop of the system, its number of agents, and the substrate it runs on.
coordination)COLM 2024 · 2023ICLR 2024 · 2023engineering)20262026202620262026How a system is measured, and how its risk is governed.
evaluation)2026202620262026ICLR 2025 · 2024ICLR 2024 · 2023safety)2026Gaps. No papers yet in
architectures,interoperability. The areas exist in the taxonomy before anything lives in them — the gap is a reading list, and a good place to make a first contribution.
taxonomy.yml. A nonexistent area or topic breaks the build
and prints the valid values. The taxonomy validates itself too: an area
pointing at a missing layer, or an orphaned domain, stops compilation./taxonomy. Each
reference states which part of the vocabulary it supports.relates_to graph between papers, navigable in
both directions).about, scale, infra, type, domain) cut across areas
and say what the paper is about.| Who | How | Resulting status | |
|---|---|---|---|
| Suggest a paper | Anyone | Issue with 3 fields → reviewed PR | triaged — visible on the site |
| Add and read | Anyone willing to clone | Edit the .yml and open a pull request | read — includes tldr and notes |
No cloning, no local scripts.
triaged state requires these three fields, and
reaching it makes the paper visible once the PR is merged. When the choice
is unclear, pick the closest option; the PR is reviewed before merging.issue_ops.yml) validates the data, builds the site with
the new record, and opens a pull request. On a missing year, an invalid
link, a duplicate paper, or a value outside the taxonomy, the Action
comments the reason on the issue and labels it needs-fix in place of
opening a broken PR. Close and reopen the issue to retry.The issue flow reaches triaged: no tldr, notes, topics or
about, since those require reading the paper. To add them, edit the
.yml directly. python scripts/add.py <arxiv-id> fetches the metadata and
creates the record in the captured state with the classification fields
commented out.
Editing a record already in the collection follows the same path: change the
file under src/content/papers/ and open a pull request. validate.yml runs
the build and the test suite on it.
Incomplete classification does not block a paper. The schema enforces three states:
| status | Requires | Effect |
|---|---|---|
captured | metadata only | Kept in git, not visible on the site. |
triaged | area, scale, type | Visible in the index. |
read | tldr, topics, about | Works as a summary on the site. |
See CONTRIBUTING.md for picking an area, and TAXONOMY.md for filling a record in by hand or proposing changes to the vocabulary.
It lives in src/data/taxonomy.yml (v3) and is the single source of truth: the
validator, the site, the guides and the issue form all read from that one file.
| Layer | Areas |
|---|---|
| Overview | foundations |
| Agent capabilities | reasoning-planning, memory, tools-context, learning-evolution |
| System structure | architectures, coordination, interoperability, engineering |
| Measurement and control | evaluation, safety |
The complete vocabulary, with usage counts, is at
/taxonomy.
The design and the criterion behind each field are documented in
TAXONOMY.md.
Two decisions that resolve most ambiguous cases:
scale: [multi-agent]. The coordination area is reserved for papers
whose central contribution is the coordination mechanism itself.mcp and a2a are topics (the
paper is about the protocol); rag, knowledge-graph, sandbox and api
are infra values (the system uses them).Requires Node.js 22.12 or newer (an Astro 7 requirement). The exact version is
in .nvmrc, which is also what CI uses: nvm use picks it up.
npm install
npm run dev
Python 3.11+ is needed only for the scripts: npm run docs, npm test and
scripts/add.py. Browsing and building the site need nothing but Node.
pip install -r requirements-dev.txt
The dev server starts at http://localhost:4321.
The search box in the header is powered by Pagefind, which indexes the built HTML. Under
astro devit returns nothing, which is expected. To exercise search, runnpm run build && npm run preview.
Note: as of Astro 7 the dev server runs as a background daemon. Ctrl+C does not stop it, and a later
npm run devattaches to the existing instance, which can serve a stale version of the site. To stop it:npx astro dev stop # stop the server npx astro dev status # check the process npx astro dev logs # view server logs
| Command | What it does |
|---|---|
npm run dev | Dev server on localhost:4321 |
npm run build | Runs astro check (types + paper validation) and builds to dist/ |
npm run preview | Serves dist/ to review the final build |
npm run docs | Regenerates the doc sections and issue form from taxonomy.yml |
npm run docs:check | Fails if those are stale. CI runs this. |
npm test | Runs the full test suite (~20s) |
npm run test:fast | Skips the tests that shell out to a real build (<1s) |
python scripts/add.py <arxiv-id> | Creates a record from arXiv metadata |
npm run docs also rewrites the paper listing in this README and the counts in
.github/badges.json, so both stay true without anyone updating them by hand.
npm run build gates deployment: a type error, or a paper that fails
taxonomy validation, stops publication.
| Path | Contents |
|---|---|
src/content/papers/ | One .yml per paper. The data. |
src/data/taxonomy.yml | Single source of truth: layers, areas, topics, facets, domains and references. |
src/content.config.ts | Zod schema, built from the taxonomy vocabulary. Enforces the three paper states. |
src/lib/taxonomy.ts | Shared loader for taxonomy.yml plus integrity guards (assertGroupsResolve). |
src/lib/papers.ts | Collection helpers: publication logic, author formatting, id/filename check. |
src/lib/url.ts | url() helper for internal links. The site lives under a subpath, so hardcoding routes breaks every fork. |
src/layouts/Layout.astro | Shared shell: header, area sidebar, client scripts. |
src/pages/ | Routes: /, /areas, /domains, /taxonomy, /papers/[id], /rss.xml. |
public/ | Static files (favicon). |
scripts/ | arxiv.py (shared metadata fetch), add.py (local capture), process_issue.py (used by the Action), gen_docs.py (README listing, doc blocks, issue form, badges). |
tests/ | pytest suite. test_schema.py is the important one: it falsifies records on purpose to prove the build rejects them. |
.github/workflows/ | issue_ops.yml (issue intake), validate.yml (build on every PR), deploy.yml (GitHub Pages). |
pip install -r requirements-dev.txt
npm test
The suite covers the issue parser, the one script that runs unsupervised, along with the doc generator and the build-time guards. The assertions cover the error messages as well as the exit codes, since a rejection a contributor cannot act on leaves the submission stuck.
tests/test_schema.py is deliberately slow. It falsifies a record or the
taxonomy and runs a real npm run build per case. A passing npm run build
proves only that valid data compiles, and leaves the behavior of the guards
unmeasured. Skip it locally with npm run test:fast.
Read CONTRIBUTING.md. Suggestions, corrections to a classification, and proposals for new vocabulary are all welcome, and each has its own issue template. Participation is covered by the Code of Conduct.
For citing the taxonomy or the collection, the repository carries a CITATION.cff, which GitHub's "Cite this repository" button reads. It covers the classification work only. The papers themselves are cited directly.
Two licenses, because the repository holds two different things:
src/, scripts/, .github/): MIT.src/content/papers/) and the taxonomy
(src/data/taxonomy.yml): CC0 1.0.
Bibliographic metadata is reusable without conditions.The papers themselves carry no license from this repository. They stay under the terms their publishers set. See LICENSE.
10 commits
1 commits
Astro
45.4%
Python
44.4%
TypeScript
9.8%
A curated collection of papers on agentic AI systems, classified by the contribution of each one.
Every paper is filed under a single area, its contribution, then cut across by topics and facets: what it is about, at what scale, in which domain. The vocabulary is validated at build time, so a term that stops resolving stops the build.
Browse the site · Suggest a paper · Contributing guide · RSS
11 areas in 4 layers, 58 topics and 32 facet values across 5 facets.
32 papers listed, 32 of them with a written summary.
The site has filtering, search and the reading-path graph; this listing is the same data, flattened for reading on GitHub.
🔥 essential · 📖 survey · ⚖️ benchmark. Surveys first within each area, then newest first.
Where to enter the field.
foundations)2026What the agent reasons about, stores, executes and learns.
reasoning-planning)20262026NeurIPS 2023 · 2023NeurIPS 2023 · 2023ICLR 2023 · 2022memory)20262026202620262026UIST 2023 · 2023tools-context)20262026NeurIPS 2023 · 2023learning-evolution)202620262026The inner loop of the system, its number of agents, and the substrate it runs on.
coordination)COLM 2024 · 2023ICLR 2024 · 2023engineering)20262026202620262026How a system is measured, and how its risk is governed.
evaluation)2026202620262026ICLR 2025 · 2024ICLR 2024 · 2023safety)2026Gaps. No papers yet in
architectures,interoperability. The areas exist in the taxonomy before anything lives in them — the gap is a reading list, and a good place to make a first contribution.
taxonomy.yml. A nonexistent area or topic breaks the build
and prints the valid values. The taxonomy validates itself too: an area
pointing at a missing layer, or an orphaned domain, stops compilation./taxonomy. Each
reference states which part of the vocabulary it supports.relates_to graph between papers, navigable in
both directions).about, scale, infra, type, domain) cut across areas
and say what the paper is about.| Who | How | Resulting status | |
|---|---|---|---|
| Suggest a paper | Anyone | Issue with 3 fields → reviewed PR | triaged — visible on the site |
| Add and read | Anyone willing to clone | Edit the .yml and open a pull request | read — includes tldr and notes |
No cloning, no local scripts.
triaged state requires these three fields, and
reaching it makes the paper visible once the PR is merged. When the choice
is unclear, pick the closest option; the PR is reviewed before merging.issue_ops.yml) validates the data, builds the site with
the new record, and opens a pull request. On a missing year, an invalid
link, a duplicate paper, or a value outside the taxonomy, the Action
comments the reason on the issue and labels it needs-fix in place of
opening a broken PR. Close and reopen the issue to retry.The issue flow reaches triaged: no tldr, notes, topics or
about, since those require reading the paper. To add them, edit the
.yml directly. python scripts/add.py <arxiv-id> fetches the metadata and
creates the record in the captured state with the classification fields
commented out.
Editing a record already in the collection follows the same path: change the
file under src/content/papers/ and open a pull request. validate.yml runs
the build and the test suite on it.
Incomplete classification does not block a paper. The schema enforces three states:
| status | Requires | Effect |
|---|---|---|
captured | metadata only | Kept in git, not visible on the site. |
triaged | area, scale, type | Visible in the index. |
read | tldr, topics, about | Works as a summary on the site. |
See CONTRIBUTING.md for picking an area, and TAXONOMY.md for filling a record in by hand or proposing changes to the vocabulary.
It lives in src/data/taxonomy.yml (v3) and is the single source of truth: the
validator, the site, the guides and the issue form all read from that one file.
| Layer | Areas |
|---|---|
| Overview | foundations |
| Agent capabilities | reasoning-planning, memory, tools-context, learning-evolution |
| System structure | architectures, coordination, interoperability, engineering |
| Measurement and control | evaluation, safety |
The complete vocabulary, with usage counts, is at
/taxonomy.
The design and the criterion behind each field are documented in
TAXONOMY.md.
Two decisions that resolve most ambiguous cases:
scale: [multi-agent]. The coordination area is reserved for papers
whose central contribution is the coordination mechanism itself.mcp and a2a are topics (the
paper is about the protocol); rag, knowledge-graph, sandbox and api
are infra values (the system uses them).Requires Node.js 22.12 or newer (an Astro 7 requirement). The exact version is
in .nvmrc, which is also what CI uses: nvm use picks it up.
npm install
npm run dev
Python 3.11+ is needed only for the scripts: npm run docs, npm test and
scripts/add.py. Browsing and building the site need nothing but Node.
pip install -r requirements-dev.txt
The dev server starts at http://localhost:4321.
The search box in the header is powered by Pagefind, which indexes the built HTML. Under
astro devit returns nothing, which is expected. To exercise search, runnpm run build && npm run preview.
Note: as of Astro 7 the dev server runs as a background daemon. Ctrl+C does not stop it, and a later
npm run devattaches to the existing instance, which can serve a stale version of the site. To stop it:npx astro dev stop # stop the server npx astro dev status # check the process npx astro dev logs # view server logs
| Command | What it does |
|---|---|
npm run dev | Dev server on localhost:4321 |
npm run build | Runs astro check (types + paper validation) and builds to dist/ |
npm run preview | Serves dist/ to review the final build |
npm run docs | Regenerates the doc sections and issue form from taxonomy.yml |
npm run docs:check | Fails if those are stale. CI runs this. |
npm test | Runs the full test suite (~20s) |
npm run test:fast | Skips the tests that shell out to a real build (<1s) |
python scripts/add.py <arxiv-id> | Creates a record from arXiv metadata |
npm run docs also rewrites the paper listing in this README and the counts in
.github/badges.json, so both stay true without anyone updating them by hand.
npm run build gates deployment: a type error, or a paper that fails
taxonomy validation, stops publication.
| Path | Contents |
|---|---|
src/content/papers/ | One .yml per paper. The data. |
src/data/taxonomy.yml | Single source of truth: layers, areas, topics, facets, domains and references. |
src/content.config.ts | Zod schema, built from the taxonomy vocabulary. Enforces the three paper states. |
src/lib/taxonomy.ts | Shared loader for taxonomy.yml plus integrity guards (assertGroupsResolve). |
src/lib/papers.ts | Collection helpers: publication logic, author formatting, id/filename check. |
src/lib/url.ts | url() helper for internal links. The site lives under a subpath, so hardcoding routes breaks every fork. |
src/layouts/Layout.astro | Shared shell: header, area sidebar, client scripts. |
src/pages/ | Routes: /, /areas, /domains, /taxonomy, /papers/[id], /rss.xml. |
public/ | Static files (favicon). |
scripts/ | arxiv.py (shared metadata fetch), add.py (local capture), process_issue.py (used by the Action), gen_docs.py (README listing, doc blocks, issue form, badges). |
tests/ | pytest suite. test_schema.py is the important one: it falsifies records on purpose to prove the build rejects them. |
.github/workflows/ | issue_ops.yml (issue intake), validate.yml (build on every PR), deploy.yml (GitHub Pages). |
pip install -r requirements-dev.txt
npm test
The suite covers the issue parser, the one script that runs unsupervised, along with the doc generator and the build-time guards. The assertions cover the error messages as well as the exit codes, since a rejection a contributor cannot act on leaves the submission stuck.
tests/test_schema.py is deliberately slow. It falsifies a record or the
taxonomy and runs a real npm run build per case. A passing npm run build
proves only that valid data compiles, and leaves the behavior of the guards
unmeasured. Skip it locally with npm run test:fast.
Read CONTRIBUTING.md. Suggestions, corrections to a classification, and proposals for new vocabulary are all welcome, and each has its own issue template. Participation is covered by the Code of Conduct.
For citing the taxonomy or the collection, the repository carries a CITATION.cff, which GitHub's "Cite this repository" button reads. It covers the classification work only. The papers themselves are cited directly.
Two licenses, because the repository holds two different things:
src/, scripts/, .github/): MIT.src/content/papers/) and the taxonomy
(src/data/taxonomy.yml): CC0 1.0.
Bibliographic metadata is reusable without conditions.The papers themselves carry no license from this repository. They stay under the terms their publishers set. See LICENSE.
10 commits
1 commits
Astro
45.4%
Python
44.4%
TypeScript
9.8%