Agent skill

Scaffold

by team-attention in team-attention/hoyeon

Greenfield project architecture + harness scaffolding for AI Agent productivity.

MITAuto-check: notesDevelopment

Install Scaffold

skills CLI
$ npx skills add team-attention/hoyeon --skill scaffold -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install team-attention/hoyeon scaffold --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
scaffold
GitHub stars
173
Token cost
~6.9k tokens
SKILL.md length
2,080 words
Files
1
Skills in repo
36
Repo updated
First seen
Licence
MIT

At a glance

Greenfield project architecture + harness scaffolding for AI Agent productivity.

  • Works in 3 steps: Checkpoint Generation → Derive Requirements → Harness Intent (no task generation)
  • Tasks that involve Project scaffolding
  • SKILL.md covers Core Identity, Core Rules, Layer Flow and L0: Goal, plus 3 more sections
  • Calls docker, node and python3

What it does

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.

When your agent uses it

  • Tasks that involve Project scaffolding
  • Tasks that involve Backend development
  • Tasks that involve Agent instruction files

Example prompts

  • “/scaffold”
  • “scaffold”
  • “new project”
  • “/scaffold”

Requirements

  • Python 3
  • Docker
  • Pre-approved tools (allowed-tools): Read, Grep, Glob, Task, Bash, Write, AskUserQuestion

Workflow steps

3 steps, taken from the step headings in SKILL.md.

  1. Checkpoint Generation
  2. Derive Requirements
  3. Harness Intent (no task generation)

What it can do on your machine

Read from SKILL.md and the folder at commit 7cff032. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Grep
    • Glob
    • Task
    • Bash
    • Write
    • AskUserQuestion

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • docker
    • node
    • python3
    • go
    • git
    • tsc
    • prettier
    • eslint
    • ruff

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    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.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~138
When it runs · the whole SKILL.md, loaded when a task matches
~6.9k

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.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:395
    | .env files will exist | Block Edit/Write to `.env*` | PreToolUse |
  • NoteMentions a .env fileSKILL.md:497
    R10.2: "PreToolUse protection hooks for .env and lock files (if applicable)"
  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Read, Grep, Glob, Task, Bash, Write, AskUserQuestion

Automated 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.

SKILL.md

The full file from team-attention/hoyeon at commit 7cff032, republished under its MIT licence (© team-attention). 2,080 words, ~6,854 tokens.

Download SKILL.mdSave it as .claude/skills/scaffold/SKILL.md (or your agent's skills folder).
name
scaffold
description
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 project", "프로젝트 세팅", "초기 구조"
allowed-tools
Read, Grep, Glob, Task, Bash, Write, AskUserQuestion

/scaffold — Greenfield Architecture Scaffolding

Generate a scaffold requirements.md through an architecture-focused derivation chain. Produces a complete development foundation that AI agents can extend consistently.


Core Identity

scaffold is specify's architecture variant. Same requirements.md format, different weight center.

specifyscaffold
FocusWhat to build (features)How to structure (architecture + harness)
L2 weightModerate (feature decisions)Heavy (tech stack, patterns, infra)
L3Requirements (behavioral)Harness (domain, team, skills, hooks, rules)
L4Verification journeysRequirements + Harness Decisions (no tasks — /execute writes plan.json)
TasksFeature implementationProject initialization + exemplar + harness
OutputCode changesComplete development environment + AI harness
WhenFeature on existing codebaseGreenfield or major restructure

Core Rules

  1. CLI creates the spec dir — hoyeon-cli req init to create the spec directory and stub requirements.md. Then Write/Edit requirements.md directly.
  2. Direct markdown editing — Write requirements.md content using Write or Edit tools. No JSON merge protocol needed.
  3. No schema validation — requirements.md is freeform markdown. No spec validate or spec guide commands.
  4. Revision Protocol — When user selects "Revise" at an approval gate:
    • Use Edit tool to modify, add, or remove sections in requirements.md directly.
    • No merge flags needed — just edit the markdown.

Layer Flow

LayerWhatGate
L0Mirror → confirmed_goal, non_goalsUser confirms mirror
L1Environment scan (greenfield detection)Auto-advance
L2Architecture interview → decisions + constraints (HEAVY)User approval
L3Harness setup → domain, team, rules, skills, hooksUser approval
L4Requirements + Harness Decisions → requirements (with GWT sub-reqs) + harness decisionsUser 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.

Session Init (before L0)
bash
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.

bash
SESSION_ID="[from UserPromptSubmit hook]"
hoyeon-cli session set --sid $SESSION_ID --key spec_dir --value "$SPEC_DIR"

L0: Goal

Output: Goal, Non-Goals, Confirmed Goal sections in requirements.md

Mirror Protocol

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."

Write to requirements.md

Use the Edit tool to write the Goal, Non-Goals, and Confirmed Goal sections into ${SPEC_DIR}/requirements.md.

Gate

User confirms mirror → advance to L1.


L1: Environment Scan

Output: Research section in requirements.md

Unlike specify's L1 (which scans existing code), scaffold's L1 scans the environment:

Scan Targets
TargetHowWhy
Working directoryls -la, check for existing filesGreenfield confirmation
Package managerswhich npm, which yarn, which pnpm, which bunAvailable tooling
Runtime versionsnode -v, python3 --version, go version, etc.Compatibility constraints
Dockerdocker --version, docker compose versionInfra capability
Gitgit statusRepo state
OS/platformuname -aPlatform constraints
Write to requirements.md

Use the Edit tool to add a Research/Context section to ${SPEC_DIR}/requirements.md with the environment scan findings.

Gate

Auto-advance to L2 (no user approval needed).


L2: Architecture Decisions (HEAVY)

Output: Decisions, Constraints, Known Gaps sections in requirements.md

This is scaffold's core. The interview determines the entire project architecture.

Step 0: Checkpoint Generation

Read L1 environment scan + confirmed_goal, then generate checkpoints per architecture dimension.

Complexity classification — based on confirmed goal:

SignalExamples
Client-server boundaryweb app, mobile + API, microservices
Multiple data storesDB + cache + queue
Real-time communicationWebSocket, SSE, polling
External service integrationpayment, auth provider, AI API
Multi-environment deploymentdev/staging/prod, Docker
Background processingworkers, cron, queues
  • Simple (0-1 signals) → 2-3 per dimension
  • Medium (2-3 signals) → 4-5 per dimension
  • Complex (4+ signals) → 6-8 per dimension
Architecture Dimensions
#DimensionWeightExample Checkpoints
1Tech Stack25%Language/runtime, framework, package manager
2Communication20%Client-server protocol, API style, type safety strategy
3Data & State20%Database choice, ORM/query builder, migration strategy, caching
4Testing15%Test framework, test patterns, coverage strategy
5DevOps & Environment20%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.

Interview Loop (score-driven)

Same mechanics as specify's L2 but with architecture-specific question framing.

Each round:

  1. Score — coverage per dimension
  2. Target — lowest-scoring dimension(s)
  3. Ask — 2 scenario questions targeting those checkpoints
  4. Resolve — mark covered, merge decisions
  5. Scan — detect cross-decision tensions
  6. Display — scoreboard

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:

  1. L1 environment capabilities
  2. Decisions already made (consistency)
  3. Project complexity (simpler for simple projects)
  4. Agent productivity criteria (prefer type-safe, convention-over-config)

Record as decision with assumed: true.

Agent Productivity Bias

When making or recommending decisions, bias toward the 4 quality criteria:

CriteriaBias
Agent extensibilityPrefer convention-over-config, clear naming, predictable patterns
TestabilityPrefer dependency injection, pure functions, mockable boundaries
Drift resistancePrefer strict linting, type checking, boundary enforcement
Type-safe communicationPrefer code-gen over manual types, schema-first over code-first
Conditional Extension Detection

During the interview, detect which conditional extensions to activate:

Signal from InterviewExtension Activated
Client-server boundary detectedType Contracts (OpenAPI/tRPC/GraphQL schema)
Database mentioned or impliedData Layer (migrations, connection, seed)
Docker available + multi-serviceDocker/Infra (compose, Dockerfile)
Long-running server processRuntime 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"
Termination

Composite score uses weighted average across dimensions (weights from the table above). Terminate when: composite >= 0.80, every dimension >= 0.60, unknowns == 0.

Inversion Probe

Two architecture-specific questions:

  1. Inversion: "Given these architecture decisions, what scenario would cause a complete restructure even if every component works individually?"
  2. Implication: "You chose [most impactful decision]. Does that also mean [architectural consequence]?"

If the probe reveals a critical issue (e.g., contradictory decisions, missing dimension coverage):

  • Merge the issue as a known_gap via --append
  • Re-enter the interview loop targeting the affected dimension(s)
  • Continue until termination criteria are met again
L2 Approval

Present 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.
""")
L2 Gate

Use Edit tool to write all decisions, constraints, and known gaps into the Decisions section of ${SPEC_DIR}/requirements.md.


L3: Harness Setup

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.

3-1. Domain Context (interactive)
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).

3-2. Team Context (interactive)
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).

3-3. Constraints → Rules (auto + confirm)

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]"

3-4. Skills Detection (auto-suggest + ask)

Scan L2 decisions for recurring task patterns and suggest project-specific skills:

L2 Decision SignalAuto-Suggested SkillDescription
DB + ORM (Prisma, Drizzle, SQLAlchemy)/migrateRun migration + regenerate types
DB detected/seed-dataGenerate development seed data
Docker / docker-compose/deployBuild, push, run with health check
API server (REST, GraphQL, tRPC)/api-testTest endpoint with curl/httpie
Async workers (Celery, BullMQ)/worker-testDispatch test task + verify result
CLI binary (Rust, Go)/releaseVersion bump + build + tag + publish
Frontend framework/new-componentScaffold component + test + story
Payment integration (Stripe, etc.)/test-webhookForward + 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 outcome
  • disable-model-invocation: true (all domain skills have side effects)
Show full SKILL.md (851 more words)Show less
3-5. Hooks Detection (auto + confirm)

Auto-detect hooks from L2 tech stack decisions:

L2 DecisionAuto-Detected HookType
TypeScript (tsconfig.json)tsc --noEmit on Edit/Write to .tsPostToolUse
Prettier configuredprettier --write on Edit/WritePostToolUse
ESLint configuredeslint --fix on Edit/WritePostToolUse
Ruff / Black (Python)ruff format on Edit/WritePostToolUse
rustfmt (Rust)rustfmt on Edit/WritePostToolUse
gofmt (Go)gofmt -w on Edit/WritePostToolUse
.env files will existBlock Edit/Write to .env*PreToolUse
Lock files will existBlock Edit/Write to lock filesPreToolUse

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]"

L3 Write to requirements.md

Use Edit tool to append all harness decisions to the Decisions section in ${SPEC_DIR}/requirements.md:

  • D_H1: Domain context (if user provided)
  • D_H2: Team conventions (if user provided)
  • D_H3: Rules to convert from constraints
  • D_H4: Skills to generate
  • D_H5: Hooks to configure

Only include D_H1/D_H2 if user provided content. Omit if "None yet" or "Solo project".

L3 Gate

Present harness summary → AskUserQuestion (Approve/Revise/Abort).


L4: Requirements + Harness Decisions

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).

Step 1: Derive Requirements

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).

Step 2: Harness Intent (no task generation)

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:

  • R1 (Code Structure) must include the vertical slice exemplar as a sub-requirement with full GWT.
  • R3 (Guard Rails) CLAUDE.md sub-req must spell out domain context (D_H1), team conventions (D_H2), available skills (D_H4), and active hooks (D_H5).
  • R8 / R9 / R10 (harness) must be present whenever D_H3 / D_H4 / D_H5 fired in L3.
  • Conditional extensions R4-R7 must be present whenever the matching D_EXT fired in L2.
Task Shape Guidance for /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 R1
  • T2 Guard Rails + CLAUDE.md + rules → fulfills R3 (+ R8 when present), depends on T1
  • T4 Test infrastructure → fulfills R2, depends on T1
  • T3 Vertical slice exemplar (highest-value task) → fulfills R1, depends on T2, T4
  • Conditional extension tasks for any of R4/R5/R6/R7 that exist
  • Harness tasks for R9 (skills) and R10 (hooks) when present
  • A final verification task covering agent-extensibility + harness checks

Keep this as guidance; the actual task records are /execute's responsibility.

Vertical Slice Exemplar (R1 sub-requirement)

The exemplar is the scaffold's highest-value output. Its GWT sub-requirement must demand:

  1. The complete flow — from entry point to data layer and back
  2. Importable utilities — lib/logger.ts, lib/config.ts, lib/errors.ts (not inline)
  3. The naming convention — how files, functions, and variables are named
  4. The test pattern — how to test this flow (test lives alongside the exemplar)
  5. Error handling — how errors propagate through layers
  6. Type safety — how types flow across boundaries

The exemplar answers: "If an agent reads only this one feature, can it build the next feature correctly?"

Domain Skills (R9 sub-requirements)

Each generated skill must reference actual tools/commands from L2 decisions:

  • disable-model-invocation: true for all domain skills (they have side effects)
  • Include scripts/validate.sh when the task has a checkable outcome
  • Use project-specific commands (e.g., "npx prisma migrate dev" not "run migration")
L4 Approval — Plan Summary
requirements.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.


User Approval Protocol

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" }
  ]
)

Checklist Before Stopping

  • requirements.md at .hoyeon/specs/{name}/requirements.md
  • Confirmed Goal is architecture-framed (not feature-framed)
  • Non-Goals includes "feature implementation" or similar
  • L2: Decisions cover all 5 architecture dimensions
  • L2: Conditional extensions detected and recorded as decisions
  • L3: Applicable harness decisions (D_H1-D_H5, skip if user opted out) written to Decisions section
  • L3: Constraints → rules conversion offered to user
  • L3: Skills auto-suggested from tech stack + user input
  • L3: Hooks auto-detected from formatter/linter choices
  • L4: Requirements include Code (R1-R3) + Conditional (R4-R7) + Harness (R8-R10)
  • L4: Every sub-requirement has given, when, then (mandatory)
  • L4: No tasks written to requirements.md (/execute writes plan.json)
  • R1 includes mandatory vertical slice exemplar sub-requirement with full GWT
  • Exemplar sub-req requires importable utilities (logger, config, errors)
  • R3.1 CLAUDE.md includes domain context (D_H1), team conventions (D_H2), available skills (D_H4), and active hooks (D_H5)
  • R9 sub-reqs require project-specific commands (not generic placeholders)
  • R10 sub-reqs require hooks matching actual L2 tooling decisions
  • Plan Summary includes Harness section and states tasks come from /execute
  • Plan Summary presented to user

© 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

Files

Just SKILL.md in skills/scaffold of team-attention/hoyeon.

Open the folder on GitHubat commit 7cff032

Compare with similar skills

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.

Scaffold compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Scaffold this skillteam-attention/hoyeon173—~6.9kAutomated safety check: NotesMIT
Dx Harnesspproenca/dot-skills215—~1.5kAutomated safety check: PassMIT
Agents Generatorsickn33/agentic-awesome-skills47k1 repos~2.3kAutomated safety check: NotesMIT
Repo Scaffoldmajiayu000/spellbook287—~651Automated safety check: PassMIT
SetupAlexZio00/sovereign-skills140—~9.9kAutomated safety check: PassMIT
Infer Conventionsanonaddy/anonaddy4.9k5 repos~3.1kAutomated safety check: PassMIT

Similar skills

  • Dx Harness

    pproenca/dot-skills

    Developer-experience friction auditing and fixing — slow onboarding, repeated manual setup steps, missing bootstrap/reset/seed scripts, undiscoverable conventions.

    215 GitHub stars~1.5k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed
  • Agents Generator

    sickn33/agentic-awesome-skills

    Generate project-specific AGENTS.md and companion rules by analyzing a codebase.

    47k GitHub starsUsed in 1 repo~2.3k tokens
    DevelopmentAuto-check: notes
  • Repo Scaffold

    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.

    287 GitHub stars~651 tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Setup

    AlexZio00/sovereign-skills

    Claude Code infrastructure + agent team setup — rules, hooks, memory, routing, and agent installation from a guided interview.

    140 GitHub stars~9.9k tokensUpdated today
    DevelopmentAuto-check passed
  • Infer Conventions

    anonaddy/anonaddy

    A skill your agent uses to analyze how a Laravel application is actually written and record its conventions as shared rules.

    4.9k GitHub starsUsed in 5 repos~3.1k tokens
    Backend & APIsAuto-check passed
  • Add Remote Endpoint

    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…

    106 GitHub stars~1.1k tokensUpdated today
    Agent WorkflowsAuto-check passed

More from team-attention/hoyeon

All 36 skills in this repo
  • Skill Session Analyzer

    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…

    173 GitHub stars~1.9k tokensUpdated 4 mo ago
    Auto-check: notes
  • Browser Work

    team-attention/hoyeon

    Recon-first browser automation. An agent skill from team-attention/hoyeon.

    173 GitHub stars~1.9k tokensUpdated 4 mo ago
    Auto-check passed
  • Check

    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.

    173 GitHub stars~1.8k tokensUpdated 4 mo ago
    Auto-check: notes
  • Compound

    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.

    173 GitHub stars~1.1k tokensUpdated 4 mo ago
    Auto-check: notes
  • QA

    team-attention/hoyeon

    Systematically QA test any application — web apps, native macOS apps, Electron apps, CLI tools, interactive REPLs, or anything on screen.

    173 GitHub stars~2.6k tokensUpdated 4 mo ago
    Auto-check: notes
  • Tech Decision

    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"…

    173 GitHub stars~1.4k tokensUpdated 4 mo ago
    Auto-check passed

Questions about Scaffold

What does Scaffold do?

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.

When should I use Scaffold?

Scaffold fits situations like: tasks that involve Project scaffolding; tasks that involve Backend development; tasks that involve Agent instruction files.

How do I install Scaffold in Claude Code?

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.

How do I install Scaffold in Codex?

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.

Can I use Scaffold in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Scaffold need to run?

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.

Does Scaffold access the network?

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.

Is Scaffold safe to install?

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.

What licence does Scaffold use?

Scaffold is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Scaffold use?

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.

What are the alternatives to Scaffold?

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.

Who maintains Scaffold?

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.