Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/micheltlutz/dev-challenge/spec-authoringnpx skills add micheltlutz/dev-challenge --skill spec-authoringgit clone --depth 1 https://github.com/micheltlutz/dev-challengeWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/micheltlutz/dev-challenge/spec-authoring)<a href="https://agentmods.dev/skills/micheltlutz/dev-challenge/spec-authoring"><img src="https://agentmods.dev/badge/skills/micheltlutz/dev-challenge/spec-authoring.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00083 | $0.01491 |
| Opus 5 | $0.00042 | $0.00745 |
| Sonnet 5 | $0.00017 | $0.00298 |
| Haiku 4.5 | $0.00008 | $0.00149 |
Grade A, and why
spec-authoring scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 165 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Authoring a spec
For contributors extending the lab. The rule that governs everything here: a spec change and its harness test land in the same pull request, or CI rejects it.
Anatomy
specs/challenges/<track>-<nn>-<slug>/
spec.md frontmatter + objective + contract + requirements
acceptance.md criteria, each with a stable ID
The directory name, the id: in the frontmatter, and the criterion prefix all
have to agree.
Frontmatter
Validated against
specs/schema/challenge.schema.json.
---
id: backend-05-balance # must equal the directory name
title: "Balance (amount)"
track: backend # backend | web | mobile | fullstack
order: 5 # unique within the track
difficulty: intermediate # starter | intermediate | advanced
estimated_hours: 3
depends_on: ["backend-04-statements"] # must exist, must stay acyclic
endpoints: ["GET /balance/"] # must exist in specs/openapi.json
acceptance: acceptance.md
verify: "harness/suites/test_balance.py"
tags: ["auth", "business-rules"]
---
Web and mobile additionally require:
figma_node: "13-5855" # or null
mockups: ["readme_files/images/statement-web.png"]
testids: ["balance-amount", "balance-toggle"] # non-empty
testids is the contract that makes a UI verifiable without dictating a
framework. Choose names that describe the role, not the implementation:
balance-toggle, not eye-icon-button.
Set verifiable: false and verify: null when no automated runner can check
the challenge — the whole mobile track is in that position, and saying so
plainly is better than implying coverage that does not exist.
Writing criteria
### BE05-AC3 — Seeded balance is exact
Given John Doe's token
When GET /balance/
Then `amount` equals 15491.00 within 0.01
- IDs are stable and globally unique.
<PREFIX><nn>-AC<n>:BEback-end,WEBweb,MOBmobile,FSfullstack. Never renumber an existing criterion — append. - One observable behaviour per criterion. If you need "and" in the Then, you probably have two.
- Testable from outside. The harness is black-box. "The code is well structured" is not a criterion; "the response contains no password field" is.
- Say the number.
15491.00, not "the correct balance".
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 5d ago First seen · 165 lines · 83 tokens per session scan A f709d926013b
spec-authoring is a skill published in the GitHub repository micheltlutz/dev-challenge (32 stars, last pushed 3d ago), licensed MIT. It adds 83 tokens to every session and 1,491 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
phone-ui-demos
把产品/知识点/文案做成"手机系统 UI 风格"的电影化网页演示动画——观众像在看一台真手机的精心编排录屏:锁屏通知、聊天、设置页、控制中心、App 界面逐镜头呈现,HyperOS/MIUI 级手感动效 + 虚拟时钟播放器,可全屏录屏当成片。只要用户提到:手机 UI 演示、手机录屏风格动画、App 演示网页、把产品做成手机里的演示、锁屏通知动画、系统 UI 风格演示页、或要求改造升级一批手机风格演示页——就用本 Skill。内容完全开放不设限:任何产品功能、课程知识、科普叙事都能转译成"手机里发生的事"。.
animation-vocabulary
Reverse-lookup glossary that turns a vague description of a web animation or motion effect into its exact term ("the bouncy thing when a popover opens" → Pop in; "the iOS rubber-band scroll" → Rubber-banding). Use when the user asks "what's it called when…", or describes a motion effect without knowing its name and…
qa-mobile-testing
当需要测试 iOS/Android 原生 App、H5 页面或小程序的移动端专项场景时使用此技能。移动端的坑主要不在功能逻辑上——中断(电话/通知/低电量)、弱网/断网/网络切换、前后台切换、系统权限管理、多机型适配和各种系统版本兼容才是重灾区。不要只测功能流程,移动端的 Bug 有一半以上是中断和兼容性相关的。输出按中断/网络/权限/兼容/性能分类的测试要点清单。.
fluencyloop
FluencyLoop — stay fluent in code as AI writes it. Router/overview for the per-feature loop (design → build+teach → review), the optional up-front planning stage for large chunks, the woven-in constitution that grows from decisions, plus post-merge backfill. Use when the user mentions FluencyLoop, "fluency", the…
expo-app-design
Build beautiful cross-platform mobile apps with Expo Router, NativeWind, and React Native.
expo-deployment
Deploy Expo apps to iOS App Store, Android Play Store, and web.