Dx Harness
pproenca/dot-skills
Developer-experience friction auditing and fixing — slow onboarding, repeated manual setup steps, missing bootstrap/reset/seed scripts, undiscoverable conventions.
Greenfield project architecture + harness scaffolding for AI Agent productivity.
$ npx skills add team-attention/hoyeon --skill scaffold -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install team-attention/hoyeon scaffold --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/team-attention/hoyeon.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/scaffold .claude/skills/scaffold && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "scaffold" agent skill from https://github.com/team-attention/hoyeon/tree/main/skills/scaffold into .claude/skills/scaffold/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "scaffold", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/team-attention/hoyeon/tree/main/skills/scaffoldType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add team-attention/hoyeon --skill scaffold -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install team-attention/hoyeon scaffold --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/team-attention/hoyeon.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/scaffold .agents/skills/scaffold && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "scaffold" agent skill from https://github.com/team-attention/hoyeon/tree/main/skills/scaffold into .agents/skills/scaffold/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "scaffold", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add team-attention/hoyeon --skill scaffold -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install team-attention/hoyeon scaffold --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/team-attention/hoyeon.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/scaffold .cursor/skills/scaffold && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "scaffold" agent skill from https://github.com/team-attention/hoyeon/tree/main/skills/scaffold into .cursor/skills/scaffold/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "scaffold", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/team-attention/hoyeon.git --path skills/scaffold--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add team-attention/hoyeon --skill scaffold -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install team-attention/hoyeon scaffold --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/team-attention/hoyeon.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/scaffold .gemini/skills/scaffold && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "scaffold" agent skill from https://github.com/team-attention/hoyeon/tree/main/skills/scaffold into .gemini/skills/scaffold/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "scaffold", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install team-attention/hoyeon scaffoldInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add team-attention/hoyeon --skill scaffold -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/team-attention/hoyeon.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/scaffold .github/skills/scaffold && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "scaffold" agent skill from https://github.com/team-attention/hoyeon/tree/main/skills/scaffold into .github/skills/scaffold/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "scaffold", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add team-attention/hoyeon --skill scaffold -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install team-attention/hoyeon scaffold --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/team-attention/hoyeon.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/scaffold .opencode/skills/scaffold && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "scaffold" agent skill from https://github.com/team-attention/hoyeon/tree/main/skills/scaffold into .opencode/skills/scaffold/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "scaffold", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
scaffoldGreenfield project architecture + harness scaffolding for AI Agent productivity.
Scaffold is an agent skill from team-attention/hoyeon. Greenfield project architecture + harness scaffolding for AI Agent productivity. Interview-driven decisions → requirements.md → execute. Produces: Code Structure (vertical slice exemplar), Test Infrastructure, Guard Rails, conditional extensions, AND Harness (CLAUDE.md with domain/team context, rules, skills, hooks). L2: architecture decisions, L3: harness setup, L4: requirements + harness decisions (tasks generated later by /execute into plan.json). Use when: "/scaffold", "scaffold", "new project", "set up…
Its SKILL.md is about 6.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Project scaffolding, Backend development and Agent instruction files. The repository describes itself as: Requirements-first Harness — derive, verify, execute. The licence is MIT.
3 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 7cff032. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadGrepGlobTaskBashWriteAskUserQuestionFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
dockernodepython3gogittscprettiereslintruffFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use docker and git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Scaffold loads about 6.9k tokens when it runs. Until then it costs about 138 tokens; SKILL.md has 2,080 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
| .env files will exist | Block Edit/Write to `.env*` | PreToolUse |R10.2: "PreToolUse protection hooks for .env and lock files (if applicable)"allowed-tools: Read, Grep, Glob, Task, Bash, Write, AskUserQuestionAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from team-attention/hoyeon at commit 7cff032, republished under its MIT licence (© team-attention). 2,080 words, ~6,854 tokens.
.claude/skills/scaffold/SKILL.md (or your agent's skills folder).Generate a scaffold requirements.md through an architecture-focused derivation chain. Produces a complete development foundation that AI agents can extend consistently.
scaffold is specify's architecture variant. Same requirements.md format, different weight center.
| specify | scaffold | |
|---|---|---|
| Focus | What to build (features) | How to structure (architecture + harness) |
| L2 weight | Moderate (feature decisions) | Heavy (tech stack, patterns, infra) |
| L3 | Requirements (behavioral) | Harness (domain, team, skills, hooks, rules) |
| L4 | Verification journeys | Requirements + Harness Decisions (no tasks — /execute writes plan.json) |
| Tasks | Feature implementation | Project initialization + exemplar + harness |
| Output | Code changes | Complete development environment + AI harness |
| When | Feature on existing codebase | Greenfield or major restructure |
hoyeon-cli req init to create the spec directory and stub requirements.md. Then Write/Edit requirements.md directly.spec validate or spec guide commands.| Layer | What | Gate |
|---|---|---|
| L0 | Mirror → confirmed_goal, non_goals | User confirms mirror |
| L1 | Environment scan (greenfield detection) | Auto-advance |
| L2 | Architecture interview → decisions + constraints (HEAVY) | User approval |
| L3 | Harness setup → domain, team, rules, skills, hooks | User approval |
| L4 | Requirements + Harness Decisions → requirements (with GWT sub-reqs) + harness decisions | User approval |
scaffold produces requirements.md only (no tasks). Task breakdown is handled later by /execute (via /blueprint or inline planning), which writes a sibling plan.json next to requirements.md.
SPEC_DIR=".hoyeon/specs/{name}"
hoyeon-cli req init $SPEC_DIR --type greenfield --goal "{goal}"This creates ${SPEC_DIR}/requirements.md with a stub template.
SESSION_ID="[from UserPromptSubmit hook]"
hoyeon-cli session set --sid $SESSION_ID --key spec_dir --value "$SPEC_DIR"Output: Goal, Non-Goals, Confirmed Goal sections in requirements.md
Mirror the user's goal with scaffold-specific framing:
"I understand you want to build [product/system].
Architecture scope: [what the scaffold will set up].
NOT in scaffold scope: [features, business logic — those come later via /specify].
Done when: [agent can extend the codebase consistently].
Does this match?"Key distinction: scaffold's goal is the foundation, not the product. If user says "I want to build a todo app", the scaffold goal is "Set up a web application foundation (server + client + DB) that an agent can extend to build features like a todo app."
Use the Edit tool to write the Goal, Non-Goals, and Confirmed Goal sections into ${SPEC_DIR}/requirements.md.
User confirms mirror → advance to L1.
Output: Research section in requirements.md
Unlike specify's L1 (which scans existing code), scaffold's L1 scans the environment:
| Target | How | Why |
|---|---|---|
| Working directory | ls -la, check for existing files | Greenfield confirmation |
| Package managers | which npm, which yarn, which pnpm, which bun | Available tooling |
| Runtime versions | node -v, python3 --version, go version, etc. | Compatibility constraints |
| Docker | docker --version, docker compose version | Infra capability |
| Git | git status | Repo state |
| OS/platform | uname -a | Platform constraints |
Use the Edit tool to add a Research/Context section to ${SPEC_DIR}/requirements.md with the environment scan findings.
Auto-advance to L2 (no user approval needed).
Output: Decisions, Constraints, Known Gaps sections in requirements.md
This is scaffold's core. The interview determines the entire project architecture.
Read L1 environment scan + confirmed_goal, then generate checkpoints per architecture dimension.
Complexity classification — based on confirmed goal:
| Signal | Examples |
|---|---|
| Client-server boundary | web app, mobile + API, microservices |
| Multiple data stores | DB + cache + queue |
| Real-time communication | WebSocket, SSE, polling |
| External service integration | payment, auth provider, AI API |
| Multi-environment deployment | dev/staging/prod, Docker |
| Background processing | workers, cron, queues |
| # | Dimension | Weight | Example Checkpoints |
|---|---|---|---|
| 1 | Tech Stack | 25% | Language/runtime, framework, package manager |
| 2 | Communication | 20% | Client-server protocol, API style, type safety strategy |
| 3 | Data & State | 20% | Database choice, ORM/query builder, migration strategy, caching |
| 4 | Testing | 15% | Test framework, test patterns, coverage strategy |
| 5 | DevOps & Environment | 20% | Containerization, CI/CD, env config, deployment target |
L1 Auto-Resolve: Check each checkpoint against environment scan. Node installed → resolve "runtime" checkpoint. Docker available → partially resolve containerization.
Same mechanics as specify's L2 but with architecture-specific question framing.
Each round:
Question format — RIGHT (concrete scenario):
AskUserQuestion(
question: "Your API needs to serve both a React frontend and a future mobile app. How should client-server communication work?",
options: [
{ label: "REST + OpenAPI + code-gen", description: "OpenAPI spec → Orval/openapi-typescript. Type-safe, well-tooled." },
{ label: "tRPC", description: "End-to-end type safety, no code-gen. TypeScript only." },
{ label: "GraphQL", description: "Flexible queries, schema-first. Higher complexity." },
{ label: "Agent decides", description: "Let scaffold choose based on project context" }
]
)Question format — WRONG (abstract):
AskUserQuestion(question: "What API style do you prefer?", ...)"Agent decides" handling: When user selects this, scaffold makes an opinionated choice based on:
Record as decision with assumed: true.
When making or recommending decisions, bias toward the 4 quality criteria:
| Criteria | Bias |
|---|---|
| Agent extensibility | Prefer convention-over-config, clear naming, predictable patterns |
| Testability | Prefer dependency injection, pure functions, mockable boundaries |
| Drift resistance | Prefer strict linting, type checking, boundary enforcement |
| Type-safe communication | Prefer code-gen over manual types, schema-first over code-first |
During the interview, detect which conditional extensions to activate:
| Signal from Interview | Extension Activated |
|---|---|
| Client-server boundary detected | Type Contracts (OpenAPI/tRPC/GraphQL schema) |
| Database mentioned or implied | Data Layer (migrations, connection, seed) |
| Docker available + multi-service | Docker/Infra (compose, Dockerfile) |
| Long-running server process | Runtime Patterns (health check, graceful shutdown) |
Record activated extensions as decisions:
D_EXT1: "Type Contracts extension activated — OpenAPI + Orval code-gen for client-server type safety"
D_EXT2: "Data Layer extension activated — PostgreSQL + Prisma migrations"Composite score uses weighted average across dimensions (weights from the table above). Terminate when: composite >= 0.80, every dimension >= 0.60, unknowns == 0.
Two architecture-specific questions:
If the probe reveals a critical issue (e.g., contradictory decisions, missing dimension coverage):
known_gap via --appendPresent all decisions + constraints + activated extensions. Spawn L2-reviewer:
Task(subagent_type="general-purpose", prompt="""
You are an L2 architecture reviewer for a scaffold spec. Given:
- All architecture decisions
- Activated conditional extensions
- The 4 quality criteria (agent extensibility, testability, drift resistance, type safety)
Check:
1. Do decisions form a coherent stack? (no contradictions)
2. Are the 4 quality criteria addressed?
3. Any activated extension missing its supporting decisions?
4. Any decision that agents will struggle to follow consistently?
Return: PASS or NEEDS_FIX with specific issues.
""")Use Edit tool to write all decisions, constraints, and known gaps into the Decisions section of ${SPEC_DIR}/requirements.md.
Output: Harness decisions added to Decisions section in requirements.md
L3 determines the AI work environment for this project. While L2 decides how the code is structured, L3 decides how Claude will work with that code across sessions.
AskUserQuestion(
question: "Does this project have domain-specific terms or business rules? For example, 'tenant = company-level customer' or 'credit balance must never go negative'.",
options: [
{ label: "Yes, I'll describe them", description: "You'll provide domain terms and key business rules" },
{ label: "None yet", description: "Skip — can add later to CLAUDE.md" },
{ label: "Agent decides", description: "Infer from project goal if possible" }
]
)If user provides domain terms → record as decision: D_H1: "Domain context: [terms and rules]"
These will be written into CLAUDE.md by the Guard Rails task (derived by /execute).
AskUserQuestion(
question: "Are there team conventions for commits, PRs, branching, or code review?",
options: [
{ label: "Conventional Commits + GitHub Flow", description: "feat/fix/chore prefixes, feature branches, squash merge" },
{ label: "Trunk-based development", description: "Short-lived branches, no long-running feature branches" },
{ label: "Custom — I'll describe", description: "You'll specify your team's rules" },
{ label: "Solo project, no conventions", description: "Skip team context" }
]
)If user provides team conventions → record as decision: D_H2: "Team conventions: [rules]"
These will be written into CLAUDE.md by the Guard Rails task (derived by /execute).
Scan L2 constraints[] and propose converting them to .claude/rules/ files:
L2 produced these constraints:
C1: "pnpm workspace — always use pnpm, never npm/yarn"
C3: "Dependency direction: shared → client/server only"
These can become auto-enforced rules in .claude/rules/.AskUserQuestion(
question: "Convert these constraints to .claude/rules/ for automatic enforcement?",
options: [
{ label: "Yes, all of them", description: "All constraints become rules files" },
{ label: "Let me pick", description: "Choose which constraints to enforce" },
{ label: "Skip", description: "Keep constraints in requirements.md only" }
]
)Record as decision: D_H3: "Rules: [list of constraints to convert]"
Scan L2 decisions for recurring task patterns and suggest project-specific skills:
| L2 Decision Signal | Auto-Suggested Skill | Description |
|---|---|---|
| DB + ORM (Prisma, Drizzle, SQLAlchemy) | /migrate | Run migration + regenerate types |
| DB detected | /seed-data | Generate development seed data |
| Docker / docker-compose | /deploy | Build, push, run with health check |
| API server (REST, GraphQL, tRPC) | /api-test | Test endpoint with curl/httpie |
| Async workers (Celery, BullMQ) | /worker-test | Dispatch test task + verify result |
| CLI binary (Rust, Go) | /release | Version bump + build + tag + publish |
| Frontend framework | /new-component | Scaffold component + test + story |
| Payment integration (Stripe, etc.) | /test-webhook | Forward + trigger webhook locally |
Present auto-suggestions, then ask:
AskUserQuestion(
question: "These skills will be scaffolded based on your tech stack. Any other tasks you'll repeat frequently?",
options: [
{ label: "These are enough", description: "Proceed with auto-suggested skills only" },
{ label: "Add more", description: "I'll describe additional recurring tasks" },
{ label: "Skip all skills", description: "Don't generate any project skills" }
]
)Record as decision: D_H4: "Skills: [list of skills to generate]"
Each generated skill will have:
SKILL.md with project-specific steps (using actual commands from L2 decisions)scripts/validate.sh when the task has a checkable outcomedisable-model-invocation: true (all domain skills have side effects)Auto-detect hooks from L2 tech stack decisions:
| L2 Decision | Auto-Detected Hook | Type |
|---|---|---|
| TypeScript (tsconfig.json) | tsc --noEmit on Edit/Write to .ts | PostToolUse |
| Prettier configured | prettier --write on Edit/Write | PostToolUse |
| ESLint configured | eslint --fix on Edit/Write | PostToolUse |
| Ruff / Black (Python) | ruff format on Edit/Write | PostToolUse |
| rustfmt (Rust) | rustfmt on Edit/Write | PostToolUse |
| gofmt (Go) | gofmt -w on Edit/Write | PostToolUse |
| .env files will exist | Block Edit/Write to .env* | PreToolUse |
| Lock files will exist | Block Edit/Write to lock files | PreToolUse |
Present the hook list:
AskUserQuestion(
question: "These hooks will be added to .claude/settings.json for automatic enforcement. Approve?",
options: [
{ label: "Approve all", description: "Add all detected hooks" },
{ label: "Let me pick", description: "Choose which hooks to enable" },
{ label: "Skip hooks", description: "Don't set up any hooks" }
]
)Record as decision: D_H5: "Hooks: [list of hooks to configure]"
Use Edit tool to append all harness decisions to the Decisions section in ${SPEC_DIR}/requirements.md:
Only include D_H1/D_H2 if user provided content. Omit if "None yet" or "Solo project".
Present harness summary → AskUserQuestion (Approve/Revise/Abort).
Output: Requirements section (with GWT sub-requirements) written to requirements.md
L4 does NOT produce tasks. Task breakdown is the job of /execute (via /blueprint or inline planning), which writes a sibling plan.json. L4's job is to finalize the what (requirements + harness intent) so /execute has a complete requirements.md to derive tasks from.
Requirements come from both L2 (architecture) and L3 (harness). Every sub-requirement MUST have given / when / then (GWT is mandatory).
Construct requirements from L2 decisions + L3 harness decisions, then write them into the Requirements section of ${SPEC_DIR}/requirements.md using the Edit tool.
Every sub-requirement must include given, when, then — behavior alone is not enough.
Code Requirements (from L2):
R1: "Code Structure — Project directories, base configs, and a complete vertical slice exemplar"
R1.1: "Directory structure follows [framework] conventions with clear layer separation"
R1.2: "Vertical slice exemplar implements one complete flow (route → service → data → test) with importable utilities (logger, config, errors)"
R1.3: "All exemplar utilities are importable modules, not inline code"
R2: "Test Infrastructure — Framework setup with patterns matching the exemplar"
R2.1: "[Test framework] configured with [runner] and example test matching exemplar flow"
R2.2: "Test directory structure mirrors source structure"
R3: "Guard Rails — CLAUDE.md + enforcement mechanisms for drift resistance"
R3.1: "CLAUDE.md with architectural rules, domain context, team conventions, dependency direction, file placement conventions, available project skills summary, and active hooks summary"
R3.2: "Linter + formatter configured with project-specific rules"
R3.3: "CI pipeline running lint + typecheck + test"
R3.4: ".env.example with all required environment variables documented"Conditional Code Extensions (from L2):
R4: "Type Contracts — Schema-driven type safety across client-server boundary" (if D_EXT1)
R4.1: "API schema or router defines all endpoints with typed request/response"
R4.2: "Client-side type bindings generated or inferred from the schema (no manual type duplication)"
R5: "Data Layer — Database connection, schema management, and seed data" (if D_EXT2)
R5.1: "ORM/query builder configured with typed models matching the domain"
R5.2: "Initial migration generated and seed script produces development data"
R5.3: "Database connection uses environment variable (DATABASE_URL or equivalent)"
R6: "Docker/Infra — Containerized local development environment" (if D_EXT3)
R6.1: "docker-compose.yml with required services (DB, cache, etc.) and persistent volumes"
R6.2: "README or CLAUDE.md documents how to start/stop the local environment"
R7: "Runtime Patterns — Production-readiness baseline for long-running server" (if D_EXT4)
R7.1: "Health check endpoint returns server status and dependency connectivity"
R7.2: "Graceful shutdown handler closes DB connections and in-flight requests"Harness Requirements (from L3):
R8: "Project Rules — Constraints converted to .claude/rules/ for automatic enforcement" (if D_H3)
R8.1: "Each selected constraint has a corresponding .claude/rules/{name}.md file"
R8.2: "Rule files contain clear, actionable directives (not vague guidelines)"
R9: "Domain Skills — Project-specific repeatable task recipes" (if D_H4)
R9.1: "Each skill has SKILL.md with project-specific commands (not generic placeholders)"
R9.2: "Skills with checkable outcomes include scripts/validate.sh"
R10: "Project Hooks — Automated code quality enforcement" (if D_H5)
R10.1: ".claude/settings.json with PostToolUse hooks for detected formatter/linter"
R10.2: "PreToolUse protection hooks for .env and lock files (if applicable)"Behavior Quality: Same rules as specify — trigger + observable outcome.
Note on fulfills[]: Use parent requirement IDs only (R1, R2, R3), NOT sub-requirement IDs (R1.1, R3.4).
Task derivation is handled by /execute (via /blueprint or inline planning). /execute reads requirements.md and writes plan.json next to it.
Ensure the requirements written in Step 1 carry enough harness detail that /execute can derive the right tasks:
/execute/execute will read requirements.md and derive plan.json tasks. The scaffold-specific shape it is expected to produce (documented here so reviewers know what "good" looks like):
T1 Project initialization → fulfills R1T2 Guard Rails + CLAUDE.md + rules → fulfills R3 (+ R8 when present), depends on T1T4 Test infrastructure → fulfills R2, depends on T1T3 Vertical slice exemplar (highest-value task) → fulfills R1, depends on T2, T4Keep this as guidance; the actual task records are /execute's responsibility.
The exemplar is the scaffold's highest-value output. Its GWT sub-requirement must demand:
lib/logger.ts, lib/config.ts, lib/errors.ts (not inline)The exemplar answers: "If an agent reads only this one feature, can it build the next feature correctly?"
Each generated skill must reference actual tools/commands from L2 decisions:
disable-model-invocation: true for all domain skills (they have side effects)scripts/validate.sh when the task has a checkable outcomerequirements.md ready! .hoyeon/specs/{name}/requirements.md
Goal
----------------------------------------
{confirmed_goal}
Architecture Decisions ({n} total)
----------------------------------------
D1: {tech stack decision}
D2: {communication decision}
...
Activated Extensions
----------------------------------------
[x] Type Contracts (OpenAPI + Orval)
[x] Data Layer (PostgreSQL + Prisma)
[ ] Docker/Infra (not needed)
[ ] Runtime Patterns (not needed)
Harness
----------------------------------------
CLAUDE.md: architecture + domain context + team conventions
Rules: {n} constraints → .claude/rules/
Skills: {list of skills}
Hooks: {list of hooks}
Task Derivation
----------------------------------------
(none in requirements.md — /execute will derive tasks into plan.json
next to requirements.md: project init, guard rails + rules, test infra, vertical slice exemplar,
conditional extensions, domain skills, project hooks, and a final scaffold verification.)
Quality Criteria
----------------------------------------
- Agent extensibility: vertical slice exemplar (T3)
- Testability: test infrastructure + exemplar tests (T4)
- Drift resistance: CLAUDE.md + rules + lint + CI (T2)
- Type safety: [type contract strategy from D_]
- Cross-session continuity: CLAUDE.md with domain/team context (T2)
- Task automation: domain skills (T_SKILL)
- Code quality enforcement: project hooks (T_HOOK)AskUserQuestion(
question: "Review the scaffold plan above.",
options: [
{ label: "/execute", description: "Start scaffolding" },
{ label: "Revise architecture (L2)", description: "Change architecture decisions" },
{ label: "Revise harness (L3)", description: "Change harness setup" },
{ label: "Revise plan (L4)", description: "Adjust requirements or harness decisions" },
{ label: "Abort", description: "Stop" }
]
)On approval, run /execute.
Three approval gates (L2, L3, L4). L2: architecture, L3: harness, L4: unified plan. Same pattern as specify:
AskUserQuestion(
question: "Review the {items} above. Ready to proceed?",
options: [
{ label: "Approve", description: "Looks good — proceed to next layer" },
{ label: "Revise", description: "I want to change something" },
{ label: "Abort", description: "Stop specification" }
]
).hoyeon/specs/{name}/requirements.mdgiven, when, then (mandatory)© team-attention, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/scaffold of team-attention/hoyeon.
Open the folder on GitHubat commit 7cff032
Scaffold next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Scaffold this skillteam-attention/hoyeon | 173 | — | ~6.9k | Automated safety check: Notes | MIT | |
| Dx Harnesspproenca/dot-skills | 215 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Agents Generatorsickn33/agentic-awesome-skills | 47k | 1 repos | ~2.3k | Automated safety check: Notes | MIT | |
| Repo Scaffoldmajiayu000/spellbook | 287 | — | ~651 | Automated safety check: Pass | MIT | |
| SetupAlexZio00/sovereign-skills | 140 | — | ~9.9k | Automated safety check: Pass | MIT | |
| Infer Conventionsanonaddy/anonaddy | 4.9k | 5 repos | ~3.1k | Automated safety check: Pass | MIT |
pproenca/dot-skills
Developer-experience friction auditing and fixing — slow onboarding, repeated manual setup steps, missing bootstrap/reset/seed scripts, undiscoverable conventions.
sickn33/agentic-awesome-skills
Generate project-specific AGENTS.md and companion rules by analyzing a codebase.
majiayu000/spellbook
Scaffold or standardize a production-ready repository structure with specs, source layout, tests, CI, agent context, config examples, release notes, and operational docs.
AlexZio00/sovereign-skills
Claude Code infrastructure + agent team setup — rules, hooks, memory, routing, and agent installation from a guided interview.
anonaddy/anonaddy
A skill your agent uses to analyze how a Laravel application is actually written and record its conventions as shared rules.
nextcloud/android-library
A skill your agent uses when adding a new remote/network endpoint (a RemoteOperation / OCSRemoteOperation) to this Nextcloud Android library, or when the user says "add an endpoint", "new remote…
team-attention/hoyeon
This skill should be used when the user asks to "analyze session", "evaluate skill execution", "check session logs", provides a session ID with a skill path, or wants to verify that a skill executed…
team-attention/hoyeon
Recon-first browser automation. An agent skill from team-attention/hoyeon.
team-attention/hoyeon
This skill should be used when the user wants to verify their changes before pushing, or update the project's rule checklists.
team-attention/hoyeon
This skill should be used when the user says "/compound", "compound this", "document learnings", "save what we learned", or after completing a PR.
team-attention/hoyeon
Systematically QA test any application — web apps, native macOS apps, Electron apps, CLI tools, interactive REPLs, or anything on screen.
team-attention/hoyeon
This skill should be used when the user asks about "technical decision", "what to use", "A vs B", "comparison analysis", "library selection", "architecture decision", "which one to use"…
Categories
Greenfield project architecture + harness scaffolding for AI Agent productivity. Scaffold is an agent skill from team-attention/hoyeon. Greenfield project architecture + harness scaffolding for AI Agent productivity.
Scaffold fits situations like: tasks that involve Project scaffolding; tasks that involve Backend development; tasks that involve Agent instruction files.
Run `npx skills add team-attention/hoyeon --skill scaffold -a claude-code`. Or copy the skill folder (skills/scaffold in team-attention/hoyeon) into .claude/skills/scaffold in your project. Claude Code loads it when a task matches its description.
Run `npx skills add team-attention/hoyeon --skill scaffold -a codex`. Or copy the skill folder (skills/scaffold in team-attention/hoyeon) into .agents/skills/scaffold in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add team-attention/hoyeon --skill scaffold -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/scaffold, .gemini/skills/scaffold, .github/skills/scaffold and .opencode/skills/scaffold in your project.
Going by SKILL.md and its folder, Scaffold needs the command-line tools its instructions call (docker, node, python3, go, git and tsc). Our summary lists: Python 3; Docker. Its frontmatter pre-approves these tools: Read, Grep, Glob, Task, Bash, Write, AskUserQuestion.
SKILL.md contains no URLs. Its commands use docker and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file; pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Scaffold is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.9k tokens (SKILL.md is roughly 27k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Scaffold: Dx Harness (pproenca/dot-skills, 215 stars), Agents Generator (sickn33/agentic-awesome-skills, 47k stars), Repo Scaffold (majiayu000/spellbook, 287 stars) and Setup (AlexZio00/sovereign-skills, 140 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
team-attention (a GitHub organization) maintains it in team-attention/hoyeon, which has 173 GitHub stars. The repository holds 36 skills in this directory. The repository was last updated on May 21, 2026.
Source: team-attention/hoyeon on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.