{"id":45902557,"url":"https://github.com/kagan-sh/kagan","last_synced_at":"2026-05-06T08:04:30.787Z","repository":{"id":334614644,"uuid":"1142059009","full_name":"kagan-sh/kagan","owner":"kagan-sh","description":"The Orchestration Layer for AI Coding Agents","archived":false,"fork":false,"pushed_at":"2026-04-30T20:06:30.000Z","size":13299,"stargazers_count":66,"open_issues_count":2,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-30T20:19:47.815Z","etag":null,"topics":["ai","ai-agents","antrophic","claude","claude-code","cli","codex","gemini","kagan","kanban","mcp","openai","opencode","python","textual","tui","uv"],"latest_commit_sha":null,"homepage":"http://kagan.sh/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kagan-sh.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-01-25T22:09:11.000Z","updated_at":"2026-04-30T20:06:39.000Z","dependencies_parsed_at":"2026-03-04T23:02:17.129Z","dependency_job_id":"e77d8bea-f4da-4379-a9a2-1f6eb2cfeadb","html_url":"https://github.com/kagan-sh/kagan","commit_stats":null,"previous_names":["aorumbayev/kagan"],"tags_count":140,"template":false,"template_full_name":null,"purl":"pkg:github/kagan-sh/kagan","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kagan-sh%2Fkagan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kagan-sh%2Fkagan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kagan-sh%2Fkagan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kagan-sh%2Fkagan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kagan-sh","download_url":"https://codeload.github.com/kagan-sh/kagan/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kagan-sh%2Fkagan/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32620523,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-04T10:08:07.713Z","status":"ssl_error","status_checked_at":"2026-05-04T10:08:02.005Z","response_time":58,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","ai-agents","antrophic","claude","claude-code","cli","codex","gemini","kagan","kanban","mcp","openai","opencode","python","textual","tui","uv"],"created_at":"2026-02-28T00:01:23.924Z","updated_at":"2026-05-06T08:04:30.737Z","avatar_url":"https://github.com/kagan-sh.png","language":"Python","funding_links":[],"categories":["Agent Infrastructure","Table of Contents"],"sub_categories":["Multi-Agent Orchestration"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/kagan-sh/kagan/main/.github/assets/hero-dark.svg\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/kagan-sh/kagan/main/.github/assets/hero-light.svg\"\u003e\n    \u003cimg alt=\"Kagan — Kanban TUI for AI coding agents with a structural human review gate\" src=\"https://raw.githubusercontent.com/kagan-sh/kagan/main/.github/assets/hero-dark.svg\" width=\"100%\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://pypi.org/project/kagan/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/v/kagan?style=for-the-badge\" alt=\"PyPI\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://pypi.org/project/kagan/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/pyversions/kagan?style=for-the-badge\" alt=\"Python\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://opensource.org/license/MIT\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge\" alt=\"License: MIT\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/kagan-sh/kagan/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/kagan-sh/kagan?style=for-the-badge\" alt=\"Stars\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://discord.gg/dB5AgMwMy\"\u003e\u003cimg src=\"https://img.shields.io/badge/discord-join-5865F2?style=for-the-badge\u0026logo=discord\u0026logoColor=white\" alt=\"Discord\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://marketplace.visualstudio.com/items?itemName=kagan.kagan-vscode\"\u003e\u003cimg src=\"https://img.shields.io/visual-studio-marketplace/v/kagan.kagan-vscode?label=VS%20Marketplace\u0026style=flat\" alt=\"VS Marketplace\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://open-vsx.org/extension/kagan/kagan-vscode\"\u003e\u003cimg src=\"https://img.shields.io/open-vsx/v/kagan/kagan-vscode?label=Open%20VSX\u0026style=flat\" alt=\"Open VSX\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://snyk.io/test/github/kagan-sh/kagan?targetFile=pyproject.toml\"\u003e\u003cimg src=\"https://snyk.io/test/github/kagan-sh/kagan/badge.svg?targetFile=pyproject.toml\u0026style=flat\" alt=\"Snyk\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://glama.ai/mcp/servers/kagan-sh/kagan\"\u003e\u003cimg src=\"https://glama.ai/mcp/servers/kagan-sh/kagan/badges/score.svg\" alt=\"Glama\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003c!-- mcp-name: io.github.kagan-sh/kagan --\u003e\n\n\u003ch3 align=\"center\"\u003e\n  \u003ca href=\"https://docs.kagan.sh/\"\u003eDocs\u003c/a\u003e ·\n  \u003ca href=\"https://docs.kagan.sh/quickstart/\"\u003eQuickstart\u003c/a\u003e ·\n  \u003ca href=\"https://docs.kagan.sh/concepts/task-lifecycle/\"\u003eThe review gate\u003c/a\u003e ·\n  \u003ca href=\"https://docs.kagan.sh/guides/mcp-setup/\"\u003eMCP Setup\u003c/a\u003e ·\n  \u003ca href=\"https://docs.kagan.sh/reference/cli/\"\u003eCLI Reference\u003c/a\u003e ·\n  \u003ca href=\"CONTRIBUTING.md\"\u003eContributing\u003c/a\u003e\n\u003c/h3\u003e\n\n---\n\nKagan is a Kanban TUI for AI coding agents with a structural human review gate. No agent-authored task reaches your main branch without an explicit approval — the state machine enforces it.\n\nThe agent runs in an isolated git worktree. When it finishes, the task card moves to REVIEW. You read the diff, check the acceptance criteria, and press approve. Then merge fires. That transition — REVIEW to DONE — cannot be automated away. It is not a setting.\n\n## Install\n\n```bash\nuv tool install kagan     # or: uvx kagan\n```\n\n\u003cdetails\u003e\n\u003csummary\u003eMac / Linux (no uv)\u003c/summary\u003e\n\n```bash\ncurl -fsSL https://uvget.me/install.sh | bash -s -- kagan\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eWindows (PowerShell)\u003c/summary\u003e\n\n```powershell\niwr -useb uvget.me/install.ps1 -OutFile install.ps1; .\\install.ps1 kagan\n```\n\u003c/details\u003e\n\n## What you get\n\n- Kanban board (BACKLOG → IN_PROGRESS → REVIEW → DONE) enforced by a state machine\n- Each task runs in its own git worktree — your working copy stays untouched\n- Managed runs (background agent) or interactive attach (you + agent in tmux/editor)\n- REVIEW stage requires explicit human approval before merge; no path around it\n- MCP server so Claude Code, Codex, or any MCP-capable client can drive the board\n- `kagan doctor` preflight checks all required tools before first run\n\nTested agents: **Claude Code** · **Codex** · **Gemini CLI** · 11 more — see [docs/backends](https://docs.kagan.sh/concepts/architecture-overview/#supported-agents).\n\nFull docs: **[docs.kagan.sh](https://docs.kagan.sh/)**\n\n## Companion surfaces\n\nThe TUI (`kagan`) is the primary operator surface. Two companion surfaces exist for specific workflows:\n\n- **Web dashboard** (`kagan web`) — browser-based board, useful for remote access or a second monitor\n- **VS Code extension** — sidebar panel and `@kagan` chat participant inside VS Code\n\nBoth companions share the same state as the TUI via the same API server. Neither is required.\n\n## License\n\n[MIT](LICENSE)\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.star-history.com/#kagan-sh/kagan\u0026type=date\"\u003e\n    \u003cpicture\u003e\n      \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=kagan-sh/kagan\u0026type=date\u0026theme=dark\" /\u003e\n      \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=kagan-sh/kagan\u0026type=date\" /\u003e\n      \u003cimg alt=\"Star History\" src=\"https://api.star-history.com/svg?repos=kagan-sh/kagan\u0026type=date\" width=\"600\" /\u003e\n    \u003c/picture\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkagan-sh%2Fkagan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkagan-sh%2Fkagan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkagan-sh%2Fkagan/lists"}