awizemann/scarf/scarf-template-author
Claude Code and agent skill by awizemann/scarf
- community
Checking that the SKILL.md file is still in the repository.
Scaffold a new Scarf project OR enrich an existing one after a Scarf "Upgrade Project" — dashboard, optional configuration schema, optional cron job, AGENTS.md, and (via the scarf-miniapp-author skill) a starter mini-app — from a short conversational interview. Output is immediately usable locally and cleanly exportable as a .scarftemplate bundle.
Install
npx vskill@latest install awizemann/scarf/scarf-template-authorSKILL.md
Scarf Template Author
Scaffold a new Scarf-compatible project from a conversational interview. The output is both (a) a working project on disk the user can register with Scarf and use immediately, and (b) correctly shaped to be exported as a .scarftemplate bundle via Scarf's Export flow later.
READ THIS FIRST — use the scarf-projects tools, don't hand-edit Scarf's files
Scarf ships an MCP server called `scarf-projects`. When you can see its tools, they are the only way you register a project, write a dashboard, add a slash command, or check a project's health. They are not a convenience wrapper — they are the same code Scarf's own UI runs, so a write that goes through them cannot produce a shape Scarf can't read.
| What you want to do | Tool | Required arguments | |
|---|---|---|---|
| See every project on this machine | project_list | (none) — optional includeArchived (bool, default true) | |
| Inspect one project in full | project_get | project | |
| Register an existing directory as a Scarf project | project_register | name, path | |
Write or replace .scarf/dashboard.json | project_update_dashboard | project, dashboard | |
Add a /command to a project | project_add_slash_command | project, name, description, body | |
| Reconcile and report on project health | project_validate | (none) — optional project, repair |
Notes that save you a retry:
projectaccepts a display name or an absolute path.~is never expanded — pass the resolved path.dashboardtakes the complete document, as a JSON object or as a string containing one. It replaces the file, so if you are enriching rather than authoring from scratch, read the existing.scarf/dashboard.jsonfirst and send it back whole. (project_getreports whether a dashboard exists and parses, and where it lives — it does not hand you its contents; read the file for that.)project_add_slash_commandalso takes optionalargumentHint,model,tags(array of strings) andoverwrite(bool, default false).project_validatetakesrepair: trueto apply only the repairs Scarf considers safe.- A tool that refuses tells you why, by JSON path for a bad dashboard (
sections[0].widgets[0].type: unknown widget type), and writes nothing. Read the reason and fix your input — do not fall back to editing the file by hand because a tool said no. A refusal is the system working. - Read tools report the registry's health. If they say it is damaged, stop and run
project_validaterather than working around it.project_registerrefuses outright in that state, on purpose: rewriting a damaged registry would make the unreadable rows permanently lost. The project-local writes (dashboard, slash commands) aren't blocked, but they still resolve their target through the registry — so a project whose row is unreadable can't be addressed either way. "No projects found" from a damaged registry does not mean the user has no projects; never respond to it by re-registering everything.
There is no tool for configuration. .scarf/manifest.json and .scarf/config.json are still authored as files; see Config Schema Design below.
When the tools are absent
scarf-projects is registered for a local Hermes only. On a remote/SSH host you will not see these tools — and only then do you fall back to writing Scarf's files directly, using the file-format reference sections in this skill. The fallback is a last resort, not a shortcut: a hand-written registry row with a malformed field is how projects disappear from Scarf's sidebar. Check whether the tools exist before you decide.
When to invoke this skill
Activate when the user says things like:
- "Create a new Scarf project that watches / tracks / reports on …"
- "Scaffold a dashboard for …"
- "Set up a project that runs a daily check on …"
- "Help me author a Scarf template."
- "Build me a Scarf project to monitor …"
- "Upgrade this project to use Scarf's full feature set." (the upgrade/enrichment path — see below)
Do not activate for pure reference questions like "what widget types does Scarf support?" or "how does Scarf handle secrets?" — answer those inline from the reference sections below.
Also do not activate for a one-off "tweak this one widget" edit — that's a plain file edit, not a scaffold.
Upgrading / enriching an EXISTING project
Scarf hands off here right after a one-click "Upgrade Project" runs its deterministic structure pass on an existing project. By the time you're invoked, Scarf has already ensured: the stable id (.scarf/project.json), the AGENTS.md managed block (only on Hermes older than v0.16 — on v0.16+ Scarf passes a short project hint to chats instead and writes no block), a Kanban tenant (if the host has Kanban), and a placeholder .scarf/dashboard.json. Your job is to enrich it in place — do NOT re-scaffold and do NOT clobber the user's files:
- Read what's already there first — README, the project's source, existing
.scarf/files, the placeholder dashboard — so the enrichment fits THIS project. - Replace the placeholder dashboard (the single "Configure this project" text widget) with a real one tailored to the project, using the widget catalog below. Read the existing
.scarf/dashboard.jsonfirst, then send the complete new document withproject_update_dashboard— it replaces the file. If the dashboard already has real widgets, read-merge — never delete the user's widgets. - Add slash commands with
project_add_slash_commandand, where a recurring job fits, cron jobs (hermes cron create, created paused) — see the Cron section. - Build a starter mini-app or two — invoke the `scarf-miniapp-author` skill for the bridge contract +
.scarf/miniapps/<id>/format. A task board, an approval queue, or a status panel makes the upgrade tangible. Prefer non-sensitive bridge permissions so it runs immediately. - BOUNDED: the structure pass already wrote the safe scaffolding (identity, tenant, and on Hermes older than v0.16 the managed AGENTS.md block). Only ADD or REPLACE-THE-PLACEHOLDER; never write outside managed markers or overwrite user content.
Everything below (widget catalog, config schema, cron, file-writing rules) applies to both new scaffolds and upgrades.
How a Scarf project is shaped on disk
A Scarf project is a directory that Scarf knows about: it carries a canonical record at <project>/.scarf/project.json and a row in the registry at ~/.hermes/scarf/projects.json. project_register writes both halves in one call, with a stable id — that is why you never write either file yourself when the tools are there. For Scarf to render a useful dashboard and for the project to be exportable as a .scarftemplate, it needs these files at minimum:
If the project will have a scheduled job, ALSO register a cron entry via hermes cron create. For an exportable bundle, also author cron/jobs.json in the staging directory — that's where Scarf's exporter will pick jobs up from.
Secrets never land in dashboard.json or config.json. At install time, Scarf routes secret-type config values to the macOS Keychain; config.json stores keychain://service/account URIs. When scaffolding from scratch (no install), the user either manages secrets via the post-install Configuration editor after export, or stashes them in their ~/.hermes/config.yaml if they're Hermes-level secrets rather than project-level.
The interview
Ask these questions in order. Don't batch. Each answer shapes the next question.
1. Purpose and data source
- "In one sentence — what does this project do?"
- "Where does its data come from? Files, a URL, a shell command's output, an API call, a database, a spreadsheet?"
Goal: figure out whether the project is passive (user maintains some files, dashboard reflects them), pull-based (we fetch from an HTTP endpoint or CLI tool on a schedule), or push-based (something external writes to a file we watch).
2. Refresh cadence
- "How often should it refresh? Every hour? Daily? Weekly? Only when I ask?"
If "only when I ask" → no cron job; user invokes the agent manually. If any scheduled cadence → cron job.
Map to cron expressions:
- Every hour:
0 * * * * - Daily at 9 AM:
0 9 * * * - Weekly Monday 9 AM:
0 9 * * 1 - Every 15 minutes:
*/15 * * * *
3. What the dashboard shows
Explain the widget catalog (see Widget Catalog sections below) in plain English, then ask which ones feel right. Offer concrete suggestions based on the purpose:
- Counting things (open PRs, failing tests, up/down sites) →
statwidgets. Addsparkline: [Number](v2.7+) if you have a recent trend handy. - A list of items with status →
listwithtext+statusper item (≤8 items). 12+ items → usestatus_grid(v2.7+) for a denser layout. - Time-series data →
chartwithlineorbartype. - Rows × columns of heterogeneous data →
table. - A live URL (useful for monitoring a site) →
webview. Including a webview widget exposes a Site tab next to the Dashboard tab — worth noting to the user. - A static image / generated chart →
image(v2.7+; local file or remote URL). - A progress bar for something with a clear 0-to-N scale →
progress. - Static help / markdown →
textwithformat: "markdown". - A longer markdown report the cron job writes →
markdown_file(v2.7+; reads from a file under the project, refreshes when the cron job rewrites it). - The last N lines of a log/output file →
log_tail(v2.7+). - The state of one Hermes cron job (last run / next run / output) →
cron_status(v2.7+).
v2.7 file-reading widgets (markdown_file, log_tail, image-with-path) read files relative to the project root. By convention, write the underlying files inside `<project>/.scarf/` (e.g. .scarf/reports/weekly.md, .scarf/reports/run.log) so the project-wide directory watch picks up changes and the widgets refresh automatically. Files outside .scarf/ work too but only refresh when dashboard.json itself changes, so cron jobs writing outside .scarf/ should touch dashboard.json after each run.
4. Configuration needs
- "Does this project need anything configurable by the user — URLs to watch, API tokens, thresholds, a list of accounts?"
If yes → design a config schema. Fields map to seven types (see Config Schema Design below). Remember: secret fields never have defaults; that's a hard validator rule.
If no → skip .scarf/manifest.json; the project works but won't have a Configuration form.
5. Target agents
- "Which agents will operate this project? Just Claude Code? Also Cursor / Codex / Aider / other?"
For v1 just write AGENTS.md — every modern agent reads it, and if you need a specific shim (CLAUDE.md, GEMINI.md, .cursorrules), add it as a symlink to AGENTS.md so content stays in sync.
Widget Catalog (JSON shapes)
All widgets require type and title. Type-specific fields below.
project_update_dashboard validates every widget against this exact catalog before it writes anything, so a type or a missing required field that isn't in here comes back as a refusal rather than a broken dashboard. The accepted types are: stat, progress, text, table, chart, list, webview, markdown_file, log_tail, cron_status, image, status_grid, kanban_summary.
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingscarf/scarf/Resources/BuiltinSkills.bundle/scarf-template-author/SKILL.md
Popularity
- Repository stars
- 709
- Repository forks
- 43
- 7-day trend score
- 33
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/awizemann/scarf/scarf-template-author)