MIT · 17 skills · v0.2.3

Your agent reads the rule
when the task needs it

One canonical set of engineering practices, written once, loaded on demand by Claude Code, Codex, Copilot, Cursor and Antigravity. Your instruction file stops being re-read in full on every request.

Claude Code, from anywhere

/plugin marketplace add huseyn0w/agentic-development-kit

No clone, no per-project setup. Every other tool installs from a checkout.

Context paid per request agentic-cms-django
measured 2026-07-27
CLAUDE.md, on its own 8,575

434 lines, read in full on every request. Including “fix this typo”.

With the kit 2,606

A 1,008-line remainder plus 17 skill descriptions. Bodies load only on a trigger.

5,969 tokens off every single request

ONE CANON, FIVE CODING TOOLS

17

SKILLS IN THE CANON

~1,600

TOKENS ALWAYS-ON, ALL 17

~53,000

TOKENS PAID ONLY ON TRIGGER

1

TEST GATE, EVERY TOOL

01 The problem

Instruction files only grow

Every project starts with a short CLAUDE.md. Then a convention is added, then a gotcha, then the thing that broke last month. Nothing is ever removed, and the whole file is read on every single request.

Paid in full, every time

A 434-line instruction file costs the same on “fix this typo” as it does on a database migration. There is no partial read.

Copied across repositories

The same rules about repositories, validation and tests live in five projects and drift apart in all five.

Rewritten per tool

CLAUDE.md, AGENTS.md, .cursorrules, copilot-instructions.md. Four files, one set of practices, four chances to disagree.

02 How it works

Write once, load on trigger

Skills invert the cost. A tool sees only each skill's name and one-line description until a task actually calls for one, then it reads the body.

STEP 01

Author in skills/

One directory is the canon. Front matter is validated on every build: the name must match the directory, the description is capped at 400 characters because it is loaded in every session, and a Non-negotiables section is mandatory.

STEP 02

scripts/sync.sh generates the rest

Adapters per tool, the installable plugin bundle and the marketplace entry are all generated. Editing them is pointless - the next sync overwrites the change. Changing skill content without a version bump is refused outright.

STEP 03

The agent reads what it needs

A Django question loads elman-django. A migration question loads elman-sql-db beside it. The other fifteen bodies cost nothing that request.

claude
> add a composite index to the orders table loading skill elman-sql-db 3,410 tok loading skill elman-django 4,180 tok not loaded 15 other skills 0 tok composite index on (customer_id, created_at), column order chosen for the range scan migration written with CONCURRENTLY, so the table is not locked in production

03 Token economy

The measurements, including the ones that look bad

Seventeen descriptions cost about 1,600 tokens per session, always. Where the instruction file was bloated, the kit pays for itself several times over. Where it was already small, the kit costs more. Both are below.

Project CLAUDE.md before after per request now net
agentic-cms-django 8,575 1,008 2,606 −5,969
agentic-cms-ts 9,062 3,202 4,800 −4,262
agentic-cms-laravel 3,990 3,328 4,926 +936
wordmcpress 1,647 1,697 3,295 +1,648
standout-cv 916 966 2,564 +1,648
smarthiring.tech 142 192 1,790 +1,648
across the six 24,332 19,981 −4,351

Measured 2026-07-27 at roughly four characters per token. Django and TypeScript carry the whole win; the other four are net negative on tokens alone. If a small project does not want the trade, disable the plugin there - it is a per-scope setting.

Three tiers, very different prices

Names and descriptions ~1,600 All 17, loaded every session, in every project.
Skill bodies ~53,000 Read only when a task triggers the skill. Typically one or two per task.
Reference files ~10,700 Read only when a skill body says to open one. Rarely.

The build caps descriptions at 400 characters where the Agent Skills specification allows 1,024. At 1,024 the permanent cost would be roughly 2.5 times higher, for content nobody asked for.

04 The canon

Seventeen skills

Five tied to a stack, twelve that apply whatever you are writing. Every claim inside them is grounded in a primary source and cited inline, with the URL checked rather than recalled.

Stacks

5 skills

elman-laravel-inertia

Laravel 12 and Inertia 2 on PHP 8.3. Repositories, models in app/Http/Models, observer registration, Pest, Pint and Larastan.

elman-django

Django 5.2 LTS on Python 3.12. App layout, migrations, select_related and prefetch_related, django-parler, pytest-django.

elman-react-next-ts

Next.js 15 App Router, React 19, NestJS 10 and Prisma. Strict TypeScript, server and client boundaries, Vitest and Playwright.

elman-kotlin-spring

Kotlin with Spring Boot on Gradle. Null safety, thin controller-service-repository layering, transactions, the JPA N+1 trap.

elman-golang

Idiomatic Go. Package layout, error wrapping, context propagation, errgroup, table-driven tests and the race detector.

Cross-cutting

12 skills

elman-security

Injection, XSS, CSRF, SSRF, authorization checks, secrets, uploads and security headers, across all five languages.

elman-auth-practices

Password storage, session and cookie lifecycle, JWT pitfalls, refresh rotation, OAuth and OIDC, MFA, lockout, reset.

elman-testing-tdd

The test pyramid, unit against integration against e2e, doubles, flaky tests, and coverage read as a signal rather than a target.

elman-clean-code

Naming, function size, argument count, control-flow depth, early returns, and duplication against premature abstraction.

elman-code-review

Both sides of the review: what should block a pull request, and how to structure a change so it can be reviewed at all.

elman-arch-conventions

Thin entry points, logic in services or model methods, database access through repositories, and where each stack differs on purpose.

elman-design-patterns

Which pattern to reach for, what it costs, and the signal that justifies it. Organised by problem rather than by GoF category.

elman-ddd

Ubiquitous language, bounded contexts, aggregates and domain events, each priced by its cost. Including when a CRUD app needs none of it.

elman-sql-db

MySQL 8.4 and PostgreSQL 16. Index selection, EXPLAIN ANALYZE, N+1 across four ORMs, keyset pagination, live-table migrations.

elman-ci-cd

GitHub Actions job structure, caching, matrix builds, required checks, pull_request_target risks and third-party action pinning.

elman-docker-k8s

Dockerfile layer ordering, multi-stage builds, non-root users, healthchecks and Compose. Kubernetes only past a single VPS.

elman-design

The monochrome design language: palette, Geist type scale, spacing tokens, mandatory focus rings, motion and the accessibility floor.

05 Coverage

Two delivery paths, stated plainly

Four tools read .agents/skills/ natively, so one copied directory serves all of them. Claude Code does not, and is served by a plugin instead - which is better anyway, because it then works in every project without copying anything into any of them.

ToolRouteWhat it reads
Claude Code Plugin Skills, hooks, the /token-check command and the context status line, installed once at user scope.
OpenAI Codex Native .agents/skills/ - names and descriptions only until a task triggers a body.
GitHub Copilot Native .agents/skills/ in VS Code and the CLI.
Cursor Native .agents/skills/
Google Antigravity Native .agents/skills/
Copilot in JetBrains, Xcode, Eclipse Fallback .github/copilot-instructions.md - an index plus each skill's Non-negotiables, never the full text.

The static fallback exists because Copilot inside JetBrains, Xcode and Eclipse cannot load skills at all. It carries an index and each skill's Non-negotiables section, which is why that section is mandatory in the front matter contract. If every tool you use supports skills, skip it.

06 Test gate

One gate, whoever runs the push

A single pre-push hook instead of five per-tool variants. It fires the same way for you, for Claude Code, for Codex, Copilot, Cursor and Antigravity.

  • No .claude/test-gate.sh in the repository and the push proceeds untouched. Installing the hook cannot break a project that has not opted in.
  • A gate that fails aborts the entire push. Nothing is sent, because git is all-or-nothing here rather than per-ref.
  • An agent reaching for git push --no-verify skips the git hook entirely, so a second guard blocks that tool call outright.
  • A broken symlink where the gate should be is treated as a misconfiguration, not as an absence. It refuses rather than guessing.
git push
pre-push: running .claude/test-gate.sh pest 112 passed larastan 2 errors pre-push: the test gate failed (exit 1). Push aborted, nothing was sent. Fix: make it pass, then push again. Bypass: git push --no-verify (only when you know why)

Context tooling, beside the canon

Handoff across compact and clear

Branch, uncommitted work and diff stat are recorded before a compaction or a clear, and injected back on the next session start. The transcript format is never parsed - it is internal and documented as changing between releases.

Context status line

The status line is the only surface that receives live context usage; no hook event carries a token count. It renders and colours the threshold. Clearing stays a human decision.

/token-check

One recommendation - clear, compact or continue - with reasoning that names what is still load-bearing. It also flags large tool output that should have gone to a subagent.

07 Install

Dry run by default

Every script shows exactly what it would write and touches nothing until you pass --apply. That is how you check the kit before trusting it with a live repository.

Claude Code

Two lines in any session, no clone. The plugin carries the skills, the hooks, the command and the status line, at user scope - so every project has it.

/plugin marketplace add huseyn0w/agentic-development-kit /plugin install elman-practices@elman-marketplace

GitHub Copilot CLI

The same plugin bundle, installed straight from the repository.

$ copilot plugin install huseyn0w/agentic-development-kit:plugins/elman-practices

Into a project: Codex, Cursor, Antigravity

Skills for every tool that reads files from the repository, the static fallback for editors that cannot load skills at all, and the push gate.

$ git clone https://github.com/huseyn0w/agentic-development-kit $ agentic-development-kit/scripts/install.sh ./my-app --skills --static --hooks --apply

Shrink a project's CLAUDE.md

Removes what a skill now covers, shows a diff, keeps a .bak. This is the step that produced the numbers above.

$ scripts/claude-md-slim.sh ./my-app --apply

Read it before you trust it.
It is all on GitHub.

Seventeen skills, the generator, the push gate and the measurements that argue against it in places. MIT licensed.