agent-starter

July 11, 2026 · View on GitHub

Skills, hooks, templates, and engineering guides for bootstrapping AI-agent-friendly projects, with a per-project self-improvement loop.

What it is

A toolkit for setting up projects that AI agents can work in safely and productively. It scaffolds new projects, retrofits existing ones, and ships enforcement hooks, drop-in configs, and engineering patterns. The differentiator is the self-improvement loop: scaffolded projects capture signal from their own usage and turn it into better rules over time.

ComponentWhat it doesWhere
Skills8 slash commands: scaffold, adopt, commit, reflect, remember, dreamskills/
HooksEnforcement (lint, file-size, dangerous-command) + signal capture for the loophooks/
TemplatesDrop-in configs: Biome, ESLint, ruff, pyright, CLAUDE.md, env boundariestemplates/
Guides9 engineering patterns for AI-agent codebasesguides/
Self-improvement loopProjects learn from their own usage and propose their own rulesacross the above

Provenance: patterns marked "derived from Anthropic's Claude Code source" are reverse-engineered from the Claude Code CLI; everything else is added on top. See About.

Quick start

This repo doubles as a Claude Code plugin marketplace. Installing the plugin is the recommended path: it loads every skill and wires the enforcement hooks in one step.

/plugin marketplace add sneg55/agent-starter
/plugin install agent-starter@agent-starter

Then run /new-project (new codebase) or /adopt-project (existing one).

Install

Pick the path that matches what you want:

I want...Do this
Everything (skills + hooks), one stepPlugin install, see Quick start
Just the skills, globallynpx skills add sneg55/agent-starter -a claude-code -g
Just the hooks in ~/.claudegit clone …/agent-starter && cd agent-starter && ./install.sh
To point an agent at the repoSee the table below

Point an agent at the repo

No install needed. Give an agent the repo URL and it reads the matching entry file and drives the setup interactively (audit-first, opt-in, nothing overwritten):

SituationSayAgent reads
New project"read this repo and set up my project https://github.com/sneg55/agent-starter/"AGENT.md
Existing project"read this repo and apply it to my project"ADOPT.md
Whole teamship the setup with the repo so everyone gets it from a git pullTEAM.md

TEAM.md is the companion to ADOPT.md: where ADOPT.md installs into one developer's ~/.claude, TEAM.md vendors the setup (hooks, shared config, plugin defaults) into the repo itself.

Notes on the plugin and hooks

  • The plugin wires five enforcement hooks (file-size, lint-on-edit, silent-error, dangerous-command, codebase-health) plus a /loop instruction-review hook, all from hooks/hooks.json.
  • The read-before-edit guard pair is left out of the plugin on purpose (recent Claude Code enforces read-before-edit natively). Opt into it with ./install.sh --with-read-guard.
  • install.sh merges its settings.json wiring idempotently via jq, so re-runs never duplicate entries.

Components

Skills

Install all skills globally with npx skills: npx skills add sneg55/agent-starter -a claude-code -g (or get them via the plugin).

SkillWhat it does
/new-projectInterviews you, then scaffolds directory structure, CLAUDE.md, configs, hooks, skills, and the first commit. Mirrors AGENT.md.
/adopt-projectAudits an existing codebase, proposes components grouped by invasiveness, applies only what you approve. Mirrors ADOPT.md.
/commitOne well-crafted commit: analyzes the diff, follows repo style, writes a "why not what" message. Includes the Git Safety Protocol.
/commit-push-prFull git flow: branch, commit, push, and create/update a PR with summary and test plan.
/simplifySpawns 3 parallel agents (Code Reuse, Quality, Efficiency) to review your diff and fix issues.
/reflectThe promote step of the loop: reads the .harness ledger and feedback memories, clusters recurring mistakes, proposes gated rule/threshold/lint/ADR changes.
/rememberScans auto-memory and proposes promotions to CLAUDE.md, CLAUDE.local.md, or shared memory. Detects duplicates, stale entries, conflicts.
/dreamMemory consolidation: merges, prunes, and re-indexes memory files across four phases (orient, gather, consolidate, prune).

Hooks

Ready-to-use hook scripts in hooks/. The plugin wires the first six; install.sh wires them into ~/.claude. See guides/hooks-reference.md for the hook system itself.

HookFires onWhat it does
check-file-size.shWrite/EditWarns when a file exceeds size targets.
lint-on-edit.shWrite/EditLints + typechecks the file just written.
check-silent-errors.shWrite/EditBlocks writes that introduce swallowed/silent error handling.
block-dangerous-commands.shBashBlocks destructive shell commands before they run.
check-codebase-health.shSession startSurfaces codebase-health signals at the start of a session.
suggest-loop-improvements.shPrompt submitOn /loop, injects an instruction-review step.
track-reads.sh + require-read-before-edit.shRead / Write+EditOpt-in read-guard pair (--with-read-guard): blocks edits to files not read this session.
lib/log-event.shcalled by hooksAppends one JSON event to .harness/ledger.jsonl (the loop's signal capture).
harness-ledger-stats.shon demandComputes the recurring_events metric over the ledger.

Templates

Drop-in configs in templates/. Copy the ones you need.

Lint (paired with guides/lint-rules-for-ai.md):

  • biome.jsonc + eslint.config.mjs (TypeScript). Biome owns formatting and fast syntactic rules; ESLint owns type-aware correctness (no-floating-promises, the no-unsafe-* family), import resolution (catches hallucinated modules), and security rules.
  • ruff.toml + pyrightconfig.json, the Python counterpart. Ruff owns formatting and fast rules; pyright (strict) owns type-aware analysis.

Error handling & boundaries:

  • errorIds.ts / error_ids.py: central error-ID registry + AppError; every throw references a stable E_DOMAIN_NNN that stays searchable across rewordings. Pairs with guides/error-id-registry.md.
  • env.ts / env.py: single env-var boundary; Zod/pydantic schema is the source of truth, invalid env fails loudly at startup. Pairs with guides/zod-at-the-boundary.md.

Context & scaffolding:

  • truncate-for-context.ts / truncate_for_context.py: head+tail truncator for tool output so cat large.log and npm test don't blow the context window.
  • CLAUDE.md: project-instructions template with the full 4-type memory taxonomy, file format, and git safety rules.
  • NEW_PROJECT_PROMPT.md: copy-paste prompt to scaffold a project from scratch. Fill in the {{placeholders}}.

Guides

Engineering patterns in guides/.

GuideWhat it covers
large-codebase-best-practices.mdDirectory structure, file-size targets, naming, error handling, CLAUDE.md hierarchy. Derived from Anthropic's Claude Code source.
lint-rules-for-ai.mdTiered Biome + ESLint (and ruff + pyright) rules that block the mistakes LLMs make: dropped awaits, any escape hatches, hallucinated imports, half-finished functions.
hooks-reference.mdThe Claude Code hook system: 4 hook types, all 27 events, exit-code behavior, config format, 10 worked examples.
tool-authoring-pattern.mdThe BashTool/-style directory-per-tool layout extracted from Claude Code's source.
error-id-registry.mdStable error IDs (E_CFG_003) shared across logs, telemetry, docs, and agents.
discriminated-union-results.mdResult<Ok, Err> as the one shape every fallible function returns, exhaustiveness-checked by the compiler.
abort-signal-threading.mdThreading AbortSignal through long-running calls so Ctrl+C, timeouts, and obsoleted work actually stop.
prompt-caching.mdStructuring prompts so Anthropic's prefix cache hits 80%+, plus the silent cache-breakers to avoid.
zod-at-the-boundary.mdValidate external data once, at entry; the schema is the source of truth for the type.

The Self-Improvement Loop

New, added on top of the original Anthropic patterns.

Most starters are a frozen snapshot: every project begins from the same patterns and never learns from how it's actually used. agent-starter ships the machinery for each scaffolded project to improve itself from its own signal.

The loop has four parts. The first three reuse the existing memory + hooks system; only signal capture and measurement are new.

 ① signal → ② store → ③ promote → ④ measure → (back to ①)
   ▲                                              │
   └──────────────────────────────────────────────┘
  • ① Signal. hooks/lib/log-event.sh appends one JSON event to the project's .harness/ledger.jsonl every time an enforcement hook blocks or warns (file too large, lint failure, swallowed error, edit-before-read). It's best-effort and always exits 0, so logging can never break a hook. Your explicit corrections are already captured as feedback memories, the highest-value signal.
  • ② Store. The append-only ledger (structured events) plus the existing memory files (prose knowledge). The raw ledger is gitignored (local and noisy); distilled learnings are committed.
  • ③ Promote. The /reflect skill reads the ledger and your feedback memories, clusters recurring mistakes, and proposes concrete changes for your approval: a new project rule, a hook-threshold tweak, a lint rule, or an ADR. Nothing is auto-applied, you stay in the loop on every change.
  • ④ Measure. hooks/harness-ledger-stats.sh computes a recurring_events metric (mistakes that fall in recurring (rule, path-prefix) clusters). Each reflection records a snapshot to .harness/reflections/YYYY-MM-DD.md, so the next reflection can confirm a promoted rule actually reduced the mistakes it targeted.

The principle: signal is private (gitignored ledger), wisdom is shared (committed reflections and the rules they produce). New projects scaffolded via AGENT.md / /new-project are born with the loop wired in.

Memory Taxonomy

The CLAUDE.md template uses a 4-type memory system:

TypeScopeWhat belongs
userWho they areRole, goals, preferences, knowledge level
feedbackHow to workCorrections AND confirmations, both what to avoid and keep doing
projectWhat's happeningOngoing work, deadlines, incidents, decisions
referenceWhere to lookPointers to external systems (Linear, Grafana, Slack, etc.)

Key principles:

  • Never save what's derivable from code/git
  • Convert relative dates to absolute
  • Structure feedback with Why + How to apply
  • Verify memories against current state before acting on them

About

agent-starter started as Anthropic's own engineering patterns, extracted from the Claude Code CLI source and packaged into reusable form. It has since been extended with additional best practices, tooling, and original ideas that go beyond the source material, the flagship being the self-improvement loop. Patterns marked "derived from Anthropic's Claude Code source" are reverse-engineered from the real thing; everything else is added on top.

Licensed under MIT.