{"adoption": {"forks": 654, "observed_at": "2026-08-28T04:09:29.995676+00:00", "stars": 5814}, "canonical_url": "https://ross.abutalabs.com/products/how-to-build-a-coding-agent", "card": {"archived": false, "artifact_type": "learning-resource", "description": "A workshop that teaches you how to build your own coding agent. Similar to Roo code, Cline, Amp, Cursor, Windsurf or OpenCode.", "domain": ["large-language-models", "education", "tutorials"], "enriched": true, "function": ["agent-framework", "llm-inference", "developer-tools"], "health_score": 79, "homepage": "https://ghuntley.com/agent/", "language": "Go", "license": null, "license_family": "other", "maturity": "active", "member_repos": ["ghuntley/how-to-build-a-coding-agent"], "name": "ghuntley/how-to-build-a-coding-agent", "platform": ["go", "cli", "cross-platform"], "pushed_at": "2026-08-22T23:59:36+00:00", "repo": "ghuntley/how-to-build-a-coding-agent", "stars": 5814, "tags": ["coding-agent", "workshop", "tutorial", "anthropic-claude", "tool-use", "chatbot", "ai-agents"], "topics": ["agent", "ai", "cursor", "tutorial", "workshop"], "urls": [], "use_cases": ["learn how coding agents work internally", "build my own AI coding assistant", "understand agent tool use and event loops", "tutorial on building an agent with the Claude API", "teach a workshop on AI agents", "go from chatbot to coding agent step by step"], "what_it_is": "A step-by-step workshop teaching developers to build their own AI coding agent in Go, similar to tools like Cursor or Cline. It progresses through six versions, from a basic Claude chatbot to an agent with file reading, editing, shell execution, and code search tools.", "when_to_avoid": ["you need a production-ready coding agent rather than a learning exercise", "you want a framework or library to embed in your own product", "you need a project with a license or long-term maintenance guarantees"], "when_to_choose": ["you want to understand how agents like Cursor or Cline work under the hood", "you prefer learning by building incrementally in Go", "you want a short (~300 lines) hands-on introduction to LLM tool use"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/how-to-build-a-coding-agent", "repo": "ghuntley/how-to-build-a-coding-agent", "role": "main", "score": 62}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:29.995676+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:52:12.711702+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5023c4aa36cd77466298364f383eec30d2b41b00fe845a2c537f63b975260efc", "fetched_at": "2026-08-28T04:09:29.995676+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ghuntley/how-to-build-a-coding-agent"}, {"content_hash": "625e6e231ba9c47acca7ab49f6eccb020a5a0f4e77575bf582a7b8ef53dde56d", "fetched_at": "2026-08-29T08:47:43.351435+00:00", "kind": "homepage", "missing": false, "url": "https://ghuntley.com/agent/"}, {"content_hash": "c9df3a3af5429c8c3345dce396c4083e0d4fa34432ca514e1ab0217671a49f64", "fetched_at": "2026-08-29T08:47:43.361357+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/six-month-recap"}, {"content_hash": "f4632653af23a8d294048a4f836c0593297d276d083d7fd6534329f5e81f0db6", "fetched_at": "2026-08-29T08:47:43.364239+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/overton"}, {"content_hash": "679628a42dc2dcea31d8727dff3a1ca9cc4d4f94ea3eef49f416fea482d13664", "fetched_at": "2026-08-29T08:47:43.366001+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/cogsec"}, {"content_hash": "f9d715365ecbd50b83e75a7f830a47b629e18a7d007b6fcde98935a86c2d2add", "fetched_at": "2026-08-29T08:47:43.367710+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/warfare"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:29.995676+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:52:12.711702+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5023c4aa36cd77466298364f383eec30d2b41b00fe845a2c537f63b975260efc", "fetched_at": "2026-08-28T04:09:29.995676+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ghuntley/how-to-build-a-coding-agent"}, {"content_hash": "625e6e231ba9c47acca7ab49f6eccb020a5a0f4e77575bf582a7b8ef53dde56d", "fetched_at": "2026-08-29T08:47:43.351435+00:00", "kind": "homepage", "missing": false, "url": "https://ghuntley.com/agent/"}, {"content_hash": "c9df3a3af5429c8c3345dce396c4083e0d4fa34432ca514e1ab0217671a49f64", "fetched_at": "2026-08-29T08:47:43.361357+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/six-month-recap"}, {"content_hash": "f4632653af23a8d294048a4f836c0593297d276d083d7fd6534329f5e81f0db6", "fetched_at": "2026-08-29T08:47:43.364239+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/overton"}, {"content_hash": "679628a42dc2dcea31d8727dff3a1ca9cc4d4f94ea3eef49f416fea482d13664", "fetched_at": "2026-08-29T08:47:43.366001+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/cogsec"}, {"content_hash": "f9d715365ecbd50b83e75a7f830a47b629e18a7d007b6fcde98935a86c2d2add", "fetched_at": "2026-08-29T08:47:43.367710+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/warfare"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:52:12.711702+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5023c4aa36cd77466298364f383eec30d2b41b00fe845a2c537f63b975260efc", "fetched_at": "2026-08-28T04:09:29.995676+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ghuntley/how-to-build-a-coding-agent"}, {"content_hash": "625e6e231ba9c47acca7ab49f6eccb020a5a0f4e77575bf582a7b8ef53dde56d", "fetched_at": "2026-08-29T08:47:43.351435+00:00", "kind": "homepage", "missing": false, "url": "https://ghuntley.com/agent/"}, {"content_hash": "c9df3a3af5429c8c3345dce396c4083e0d4fa34432ca514e1ab0217671a49f64", "fetched_at": "2026-08-29T08:47:43.361357+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/six-month-recap"}, {"content_hash": "f4632653af23a8d294048a4f836c0593297d276d083d7fd6534329f5e81f0db6", "fetched_at": "2026-08-29T08:47:43.364239+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/overton"}, {"content_hash": "679628a42dc2dcea31d8727dff3a1ca9cc4d4f94ea3eef49f416fea482d13664", "fetched_at": "2026-08-29T08:47:43.366001+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/cogsec"}, {"content_hash": "f9d715365ecbd50b83e75a7f830a47b629e18a7d007b6fcde98935a86c2d2add", "fetched_at": "2026-08-29T08:47:43.367710+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/warfare"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:09:29.995676+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:29.995676+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:29.995676+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:52:12.711702+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5023c4aa36cd77466298364f383eec30d2b41b00fe845a2c537f63b975260efc", "fetched_at": "2026-08-28T04:09:29.995676+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ghuntley/how-to-build-a-coding-agent"}, {"content_hash": "625e6e231ba9c47acca7ab49f6eccb020a5a0f4e77575bf582a7b8ef53dde56d", "fetched_at": "2026-08-29T08:47:43.351435+00:00", "kind": "homepage", "missing": false, "url": "https://ghuntley.com/agent/"}, {"content_hash": "c9df3a3af5429c8c3345dce396c4083e0d4fa34432ca514e1ab0217671a49f64", "fetched_at": "2026-08-29T08:47:43.361357+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/six-month-recap"}, {"content_hash": "f4632653af23a8d294048a4f836c0593297d276d083d7fd6534329f5e81f0db6", "fetched_at": "2026-08-29T08:47:43.364239+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/overton"}, {"content_hash": "679628a42dc2dcea31d8727dff3a1ca9cc4d4f94ea3eef49f416fea482d13664", "fetched_at": "2026-08-29T08:47:43.366001+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/cogsec"}, {"content_hash": "f9d715365ecbd50b83e75a7f830a47b629e18a7d007b6fcde98935a86c2d2add", "fetched_at": "2026-08-29T08:47:43.367710+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/warfare"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:29.995676+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:29.995676+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:52:12.711702+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5023c4aa36cd77466298364f383eec30d2b41b00fe845a2c537f63b975260efc", "fetched_at": "2026-08-28T04:09:29.995676+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ghuntley/how-to-build-a-coding-agent"}, {"content_hash": "625e6e231ba9c47acca7ab49f6eccb020a5a0f4e77575bf582a7b8ef53dde56d", "fetched_at": "2026-08-29T08:47:43.351435+00:00", "kind": "homepage", "missing": false, "url": "https://ghuntley.com/agent/"}, {"content_hash": "c9df3a3af5429c8c3345dce396c4083e0d4fa34432ca514e1ab0217671a49f64", "fetched_at": "2026-08-29T08:47:43.361357+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/six-month-recap"}, {"content_hash": "f4632653af23a8d294048a4f836c0593297d276d083d7fd6534329f5e81f0db6", "fetched_at": "2026-08-29T08:47:43.364239+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/overton"}, {"content_hash": "679628a42dc2dcea31d8727dff3a1ca9cc4d4f94ea3eef49f416fea482d13664", "fetched_at": "2026-08-29T08:47:43.366001+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/cogsec"}, {"content_hash": "f9d715365ecbd50b83e75a7f830a47b629e18a7d007b6fcde98935a86c2d2add", "fetched_at": "2026-08-29T08:47:43.367710+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/warfare"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:29.995676+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:29.995676+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:29.995676+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:52:12.711702+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5023c4aa36cd77466298364f383eec30d2b41b00fe845a2c537f63b975260efc", "fetched_at": "2026-08-28T04:09:29.995676+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ghuntley/how-to-build-a-coding-agent"}, {"content_hash": "625e6e231ba9c47acca7ab49f6eccb020a5a0f4e77575bf582a7b8ef53dde56d", "fetched_at": "2026-08-29T08:47:43.351435+00:00", "kind": "homepage", "missing": false, "url": "https://ghuntley.com/agent/"}, {"content_hash": "c9df3a3af5429c8c3345dce396c4083e0d4fa34432ca514e1ab0217671a49f64", "fetched_at": "2026-08-29T08:47:43.361357+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/six-month-recap"}, {"content_hash": "f4632653af23a8d294048a4f836c0593297d276d083d7fd6534329f5e81f0db6", "fetched_at": "2026-08-29T08:47:43.364239+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/overton"}, {"content_hash": "679628a42dc2dcea31d8727dff3a1ca9cc4d4f94ea3eef49f416fea482d13664", "fetched_at": "2026-08-29T08:47:43.366001+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/cogsec"}, {"content_hash": "f9d715365ecbd50b83e75a7f830a47b629e18a7d007b6fcde98935a86c2d2add", "fetched_at": "2026-08-29T08:47:43.367710+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/warfare"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:29.995676+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:29.995676+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:52:12.711702+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5023c4aa36cd77466298364f383eec30d2b41b00fe845a2c537f63b975260efc", "fetched_at": "2026-08-28T04:09:29.995676+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ghuntley/how-to-build-a-coding-agent"}, {"content_hash": "625e6e231ba9c47acca7ab49f6eccb020a5a0f4e77575bf582a7b8ef53dde56d", "fetched_at": "2026-08-29T08:47:43.351435+00:00", "kind": "homepage", "missing": false, "url": "https://ghuntley.com/agent/"}, {"content_hash": "c9df3a3af5429c8c3345dce396c4083e0d4fa34432ca514e1ab0217671a49f64", "fetched_at": "2026-08-29T08:47:43.361357+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/six-month-recap"}, {"content_hash": "f4632653af23a8d294048a4f836c0593297d276d083d7fd6534329f5e81f0db6", "fetched_at": "2026-08-29T08:47:43.364239+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/overton"}, {"content_hash": "679628a42dc2dcea31d8727dff3a1ca9cc4d4f94ea3eef49f416fea482d13664", "fetched_at": "2026-08-29T08:47:43.366001+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/cogsec"}, {"content_hash": "f9d715365ecbd50b83e75a7f830a47b629e18a7d007b6fcde98935a86c2d2add", "fetched_at": "2026-08-29T08:47:43.367710+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/warfare"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:52:12.711702+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5023c4aa36cd77466298364f383eec30d2b41b00fe845a2c537f63b975260efc", "fetched_at": "2026-08-28T04:09:29.995676+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ghuntley/how-to-build-a-coding-agent"}, {"content_hash": "625e6e231ba9c47acca7ab49f6eccb020a5a0f4e77575bf582a7b8ef53dde56d", "fetched_at": "2026-08-29T08:47:43.351435+00:00", "kind": "homepage", "missing": false, "url": "https://ghuntley.com/agent/"}, {"content_hash": "c9df3a3af5429c8c3345dce396c4083e0d4fa34432ca514e1ab0217671a49f64", "fetched_at": "2026-08-29T08:47:43.361357+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/six-month-recap"}, {"content_hash": "f4632653af23a8d294048a4f836c0593297d276d083d7fd6534329f5e81f0db6", "fetched_at": "2026-08-29T08:47:43.364239+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/overton"}, {"content_hash": "679628a42dc2dcea31d8727dff3a1ca9cc4d4f94ea3eef49f416fea482d13664", "fetched_at": "2026-08-29T08:47:43.366001+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/cogsec"}, {"content_hash": "f9d715365ecbd50b83e75a7f830a47b629e18a7d007b6fcde98935a86c2d2add", "fetched_at": "2026-08-29T08:47:43.367710+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/warfare"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:52:12.711702+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5023c4aa36cd77466298364f383eec30d2b41b00fe845a2c537f63b975260efc", "fetched_at": "2026-08-28T04:09:29.995676+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ghuntley/how-to-build-a-coding-agent"}, {"content_hash": "625e6e231ba9c47acca7ab49f6eccb020a5a0f4e77575bf582a7b8ef53dde56d", "fetched_at": "2026-08-29T08:47:43.351435+00:00", "kind": "homepage", "missing": false, "url": "https://ghuntley.com/agent/"}, {"content_hash": "c9df3a3af5429c8c3345dce396c4083e0d4fa34432ca514e1ab0217671a49f64", "fetched_at": "2026-08-29T08:47:43.361357+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/six-month-recap"}, {"content_hash": "f4632653af23a8d294048a4f836c0593297d276d083d7fd6534329f5e81f0db6", "fetched_at": "2026-08-29T08:47:43.364239+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/overton"}, {"content_hash": "679628a42dc2dcea31d8727dff3a1ca9cc4d4f94ea3eef49f416fea482d13664", "fetched_at": "2026-08-29T08:47:43.366001+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/cogsec"}, {"content_hash": "f9d715365ecbd50b83e75a7f830a47b629e18a7d007b6fcde98935a86c2d2add", "fetched_at": "2026-08-29T08:47:43.367710+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/warfare"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:52:12.711702+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5023c4aa36cd77466298364f383eec30d2b41b00fe845a2c537f63b975260efc", "fetched_at": "2026-08-28T04:09:29.995676+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ghuntley/how-to-build-a-coding-agent"}, {"content_hash": "625e6e231ba9c47acca7ab49f6eccb020a5a0f4e77575bf582a7b8ef53dde56d", "fetched_at": "2026-08-29T08:47:43.351435+00:00", "kind": "homepage", "missing": false, "url": "https://ghuntley.com/agent/"}, {"content_hash": "c9df3a3af5429c8c3345dce396c4083e0d4fa34432ca514e1ab0217671a49f64", "fetched_at": "2026-08-29T08:47:43.361357+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/six-month-recap"}, {"content_hash": "f4632653af23a8d294048a4f836c0593297d276d083d7fd6534329f5e81f0db6", "fetched_at": "2026-08-29T08:47:43.364239+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/overton"}, {"content_hash": "679628a42dc2dcea31d8727dff3a1ca9cc4d4f94ea3eef49f416fea482d13664", "fetched_at": "2026-08-29T08:47:43.366001+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/cogsec"}, {"content_hash": "f9d715365ecbd50b83e75a7f830a47b629e18a7d007b6fcde98935a86c2d2add", "fetched_at": "2026-08-29T08:47:43.367710+00:00", "kind": "site_page", "missing": false, "url": "https://ghuntley.com/warfare"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 28, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 405, "days_push": 11, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 62, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}