scaffold

scaffold is a skill for Claude Code from openEHR/ai-plugins. It costs 54 tokens per session (2,688 once invoked), scanned A, original, Apache-2.0.

A setup skill that creates or upgrades a specification repository with a standard set of project files, such as guidance, configuration, a manifest, license, and README. A repository is a project folder managed with version control.

In plain words
What is it for?
Use it to start a new specification repository or bring an older one up to the current standard, including optional BMM schema support.
Why use it?
It removes repetitive manual setup and helps an existing specification project match the current file layout.

Skill for Claude Code

Written for Claude Code: allowed-tools in frontmatter. Also seen: reads .claude/ paths; mentions CLAUDE.md; mentions AGENTS.md.

Part of the openehr-specs plugin — 12 skills, 3 agents shipped together

Good fit Use it to start a new specification repository or bring an older one up to the current standard, including optional BMM schema support.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/openehr/ai-plugins/scaffold
Install

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.

Any agent
npx skills add openEHR/ai-plugins --skill scaffold
Clone the repo
git clone --depth 1 https://github.com/openEHR/ai-plugins

Made for: Claude Code.

Or install openehr-specs, the plugin that ships this one along with the rest of its 12 skills, 3 agents.

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

agentmods badge for scaffold

README.md
[![agentmods](https://agentmods.dev/badge/skills/openehr/ai-plugins/scaffold/github.svg)](https://agentmods.dev/skills/openehr/ai-plugins/scaffold)
Your own site
<a href="https://agentmods.dev/skills/openehr/ai-plugins/scaffold"><img src="https://agentmods.dev/badge/skills/openehr/ai-plugins/scaffold/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for scaffold

Your own site · 80×15
<a href="https://agentmods.dev/skills/openehr/ai-plugins/scaffold"><img src="https://agentmods.dev/badge/skills/openehr/ai-plugins/scaffold.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 54 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 2,688 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce invoked
Fable 5.1 $0.00054 $0.02688
Opus 5.5 $0.00022 $0.01075
Sonnet 5.5 $0.00011 $0.00538
Haiku 4.5 $0.00005 $0.00269

Measured 7d ago against content hash 2ad2beccab3f, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

scaffold 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 7d ago.

The scan reads SKILL.md. This mod also ships 1 executable file (scripts/scaffold.py), listed below but not scanned — reading those needs a real analyzer, not pattern matching.

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.

plugins/openehr-specs/skills/scaffold/SKILL.md · 136 lines

How it starts

The opening of the file, as written. The whole thing — 136 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Install or upgrade the standard file set in the repository at the current directory: a specifications-XX repo, or a new empty one. $ARGUMENTS may name the component. The file set, its variables and its revision history are in ${CLAUDE_SKILL_DIR}/assets/template-set.json; ${CLAUDE_SKILL_DIR}/scripts/scaffold.py (Python 3.8+, standard library only) performs the file operations. Let the script write the managed files; edit by hand only in the cases that steps 3 and 5 name. If python3 is missing, say so and stop. In a tool that does not expand ${CLAUDE_SKILL_DIR}, use the directory that holds this SKILL.md.

The set covers AsciiDoc specification repos, with an optional BMM schema. In an OpenAPI repo such as specifications-ITS-REST, pin agents, claude-md and asciidoctorconfig (step 4): they are AsciiDoc-specific. The script never offers a BMM schema to the ITS-XML, ITS-BMM, ITS-JSON and ITS-REST repos, which hold no model of their own, and rejects a bmm_schema_id there. Pin bmm in any other new repo that has no model.

The root README is README.md. A README.adoc in its place is planned as convert and rewritten as Markdown by hand (step 5), because the script cannot translate AsciiDoc.

A new repository (plan mode init) also gets computable/BMM/<bmm_schema_id>.bmm.json (file id bmm). The script asks the local ghcr.io/openehr/bmm-publisher image for the schemas it bundles and copies the highest version for the component. When the image bundles none, it writes an empty schema: one root package org.openehr.<name>, no classes, BASE included for other components, and rm_release equal to first_release. The check needs Docker and the image, and never pulls it. Existing repositories are not offered a schema.

Steps

  1. Plan. Run python3 ${CLAUDE_SKILL_DIR}/scripts/scaffold.py plan --repo ., adding --var component=<id> when $ARGUMENTS names one. It writes nothing and prints JSON: mode, repo, variables (each with its source), missing_variables, invalid_variables, files, migration_steps, warnings, todo_markers. Confirm that repo is the repository root the user means. The modes are init (none of the files exist yet), upgrade (some do: recorded_revision is null when the repo was never scaffolded, otherwise it is older than latest_revision and migration_path lists the revisions to apply, in order) and current. If the output is {"error": ...}, show the message and stop; do not edit .claude/scaffold.json to get past it (for example "update the openehr-specs plugin" means a newer plugin scaffolded this repo).
  2. Variables. When status is needs_input, ask for each missing or invalid variable, then plan again with --var name=value. A variable whose source is default or starts with inferred is a guess. Ask the user to confirm the ones that matter (license, jira_project, bmm_schema_id, bmm_dependencies, default_branch, published_url, and first_release only when the plan creates manifest.json or a new empty BMM schema, the files that use it) and list the rest in one line. In a new repository, bmm_schema_id comes from inferred: bmm-publisher image or inferred: new empty schema. Never invent a title, a Jira key or a filter id. Values the user confirmed earlier are recorded in .claude/scaffold.json and kept; a recorded default is not, so a BMM schema added later shows up as a new guess to confirm. --overwrite and --pin accept only the file ids and agents:<region> ids that files lists; anything else is an error.
  3. Review. Summarise the files by action and ask before applying. Show the detail of every merge, conflict and exists entry (a LICENSE that differs from the standard text) and every warnings entry.
    • create, merge, update: the script writes. For .claude/settings.json, say what it grants: the openehr marketplace, four enabled plugins, pre-approved git add, git commit and git diff, WebFetch on specifications.openehr.org, and three read-only Atlassian MCP calls. If the user wants the git add and git commit rules gone, remove them from the file after applying: later runs leave out what the user removed, and add only what a newer revision introduces.
    • create for bmm: say from its detail whether the schema is copied from the image or new and empty.
    • blocked (only bmm): the image could not be checked, and detail says why. Offer to start Docker, or to run docker pull ghcr.io/openehr/bmm-publisher (a large download; ask first), and plan again. Or create the empty schema the detail names with --var bmm_schema_id=<id>. Applying anyway writes the other files without a schema; --overwrite bmm adds one later.
    • convert (only readme): the convert_from file (README.adoc) stands where README.md belongs. Say that step 5 rewrites it as Markdown, or merges it into the existing README.md when detail says so, and ask.
    • exists, exists-alternative (for example README.rst), unchanged, pinned, skipped (no BMM schema for an existing repository, where --overwrite bmm asks for one, nor for an ITS repository): nothing to do. A conflict whose detail says the file is a symbolic link cannot be resolved with --overwrite: the user has to replace the link first.
    • conflict: detail says whether the file was edited since it was scaffolded or simply differs. Show the difference with diff --repo . --file <id> (repeat the --var options), then ask: keep it, take the template (--overwrite <id>), or leave it alone for good (--pin <id>). In AGENTS.md, each entry of files[].regions has its own action and id: use it as --overwrite agents:<region> or --pin agents:<region>. Regions marked update or add are written even when another region conflicts; removed means the user deleted the region, and nothing is done.
    • upgrade-manual: AGENTS.md exists without scaffold regions. Print the template with render --repo . --file agents (repeat the --var options), compare it with the file, and offer to edit the file so the shared sections sit between the <!-- openehr-scaffold:begin <id> --> markers, or to pin it.
    • migration_steps: show them, with each note as a manual step. The file actions shown are for the tree as it is now; apply re-plans after running the steps and returns each step's result.
    • Nothing but unchanged, exists, exists-alternative, pinned and skipped, and no migration_steps: report "up to date" and stop.
    • A directory that is not a git repository: offer git init -b <default_branch>; if git itself is missing, say so.
  4. Apply. Run the same command with apply, repeating the --var options and adding the --overwrite and --pin options the user chose. Check that the output has applied: true; status: needs_input means nothing was written. The script never changes an existing seed file (manifest.json, LICENSE, README.md, a BMM schema), never rewrites a hand-edited file or region without --overwrite, and records the revision, variables and file hashes in .claude/scaffold.json.
  5. Finish. List written. For each todo_markers entry (a TODO(scaffold) comment in AGENTS.md), offer to fill it from the repo's content and delete the comment once it is filled. When manifest.json was created, point out that its specifications list starts empty (skill openehr-specs:authoring). When an empty BMM schema was created, point out that classes go into it (skill openehr-specs:bmm-authoring, which also checks it) and the class tables are generated from it (skill openehr-specs:class-generation); until then bmm-publisher warns about the empty package. For a convert the user agreed to, run git mv README.adoc README.md (a plain rename outside git), then rewrite the file as GitHub Markdown by ${CLAUDE_SKILL_DIR}/references/readme-markdown.md, keeping all of its content. When README.md already existed, merge the AsciiDoc file's content into it instead, and delete the AsciiDoc file. Show git diff -M, then plan again: README.md is now exists. Do not commit; if the user asks for a commit message, follow the Conventions section of the repo's AGENTS.md.

Read the full file on GitHub · 136 lines

Changes

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.

  1. 7d ago Changed · +34 lines · +12 tokens per session 2ad2beccab3f
  2. 8d ago Changed · +4 lines f522f47a2521
  3. 9d ago First seen · 98 lines · 42 tokens per session scan A bc08ce48cae5

Subscribe to this mod's changes

scaffold is a skill published in the GitHub repository openEHR/ai-plugins (3 stars, last pushed yesterday), licensed Apache-2.0. It adds 54 tokens to every session and 2,688 once invoked, about $0.0002 per session on Opus 5.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-10-08.

Related

Other skills, from other repositories

chief-operating-officer

Owns execution: how work actually gets done across the organization, including process, program management, capacity, vendors, supply chain, and service delivery. Use this when execution is the problem rather than strategy, to design or fix a process, to resolve cross-functional handoff failures, to plan capacity, to…

cbrock84/headcount · 0 tokens

chief-product-officer

Owns what gets built and why: product strategy, roadmap, discovery, user experience, and the definition of success for each release. Use this to decide what to build next, to cut scope, to turn a business goal into a product bet, to judge whether a feature is worth its cost, or when engineering and go-to-market…

cbrock84/headcount · 0 tokens

chief-technology-officer

Owns architecture, engineering delivery, infrastructure, data platform, and internal systems. Use this for build-versus-buy calls, technology selection, architectural direction, engineering capacity and delivery risk, technical debt tradeoffs, platform and tooling decisions, or when a technical choice has business…

cbrock84/headcount · 84 tokens

customer-success-management

Runs the ongoing relationship with accounts after the sale — segmenting coverage against account value, building a health score that predicts rather than describes, running reviews customers find worth attending, forecasting renewals honestly, and finding expansion that follows usage instead of quota. Use this to…

cbrock84/headcount · 85 tokens

chief-information-officer

The CIO's remit — running the technology the company works on, service quality, IT spend, and the boundary with product engineering. Use this to set IT priorities, decide what IT owns versus engineering, structure IT spend or an IT roadmap, judge whether to build, buy or outsource, or work out why IT is seen as a cost…

cbrock84/headcount · 79 tokens

service-desk

Runs the IT service desk — intake, triage, prioritization, escalation, knowledge, and the metrics that improve service rather than distort it. Use this to set up or fix a service desk, design ticket priority and escalation, reduce repeat contacts, structure a knowledge base, or work out why a desk hitting its targets…

cbrock84/headcount · 73 tokens