kastelldev/kastell/kastell-scaffold
Claude Code and agent skill by kastelldev/kastell
- community
Checking that the SKILL.md file is still in the repository.
Generate new Kastell components from templates. Creates boilerplate for CLI commands, audit checks, providers, and MCP tools following current architecture (commands thin, core fat, adapters dispatch).
Install
npx vskill@latest install kastelldev/kastell/kastell-scaffoldSemi-extensibleMentions customization, but needs skill-specific knowledge. Read the extensible skills standard
SKILL.md
Kastell Scaffold
Purpose
Generate boilerplate files for new Kastell components. Each template follows the post-P63/P64 architecture: commands are thin wrappers, business logic lives in core/, providers handle cloud API, adapters abstract platform ops.
Usage
$ARGUMENTS[0] is the component type. $ARGUMENTS[1] is the component name.
Architecture Rules
These rules apply in every generated file. The forked subagent does not automatically have kastell-ops context — enforce these rules explicitly.
| Layer | Path | Rule | |
|---|---|---|---|
| Commands | src/commands/ | Parse args + delegate. ZERO business logic. | |
| Core | src/core/ | ALL business logic. No chalk/ora/UI imports. | |
| Providers | src/providers/ | Cloud API per provider. Extends BaseProvider. | |
| Adapters | src/adapters/ | Platform ops via PlatformAdapter. Access via getAdapter(). | |
| MCP | src/mcp/tools/ | Zod schema + handler. Delegates to core. |
Critical: Never import CoolifyAdapter or DokployAdapter directly. Always use getAdapter(platform) from src/adapters/factory.ts.
ESM: "type": "module" — use import, not require. All imports use .js extension.
Existing Components
Commands: !node -e "import('fs').then(f=>console.log(f.readdirSync('src/commands').filter(x=>x.endsWith('.ts')).map(x=>x.replace('.ts','')).join(', '))).catch(()=>console.log('commands dir not found'))" Providers: !node -e "import('fs').then(f=>console.log(f.readdirSync('src/providers').filter(x=>x.endsWith('.ts')&&x!=='base.ts').map(x=>x.replace('.ts','')).join(', '))).catch(()=>console.log('providers dir not found'))" MCP tools: !node -e "import('fs').then(f=>console.log(f.readdirSync('src/mcp/tools').filter(x=>x.endsWith('.ts')).map(x=>x.replace('.ts','')).join(', '))).catch(()=>console.log('mcp/tools dir not found'))" Audit categories: !node -e "import('fs').then(f=>console.log(f.readdirSync('src/core/audit',{withFileTypes:true}).filter(d=>d.isDirectory()).map(d=>d.name).join(', '))).catch(()=>console.log('audit dir not found'))"
Script (Deterministic)
Run the scaffold script to generate boilerplate files:
The script reads .tpl templates from templates/, replaces __NAME__/__NAME_PASCAL__/__NAME_CAMEL__/__NAME_UPPER__ placeholders, and creates files in the project. Add --dry-run to preview without writing.
Files generated per type:
command→ 3 files:src/commands/,src/core/,src/__tests__/core/check→ 2 files:src/core/audit/checks/,src/__tests__/core/audit/checks/provider→ 2 files:src/providers/,src/__tests__/providers/mcp-tool→ 2 files:src/mcp/tools/,src/__tests__/mcp/
Template Reference (Context for LLM)
After running the script, read the matching reference for registration details:
| Type | Reference File | |
|---|---|---|
command | references/template-command.md | |
check | references/template-audit-check.md | |
provider | references/template-provider.md | |
mcp-tool | references/template-mcp-tool.md |
After Generation
Perform these steps after creating the boilerplate files:
- [ ] Write tests first (TDD preferred — test core, not command)
- [ ] Register the component:
- Commands: add import in
src/index.ts - MCP tools:
registerTool()insrc/mcp/server.ts - Providers: add to
PROVIDER_REGISTRYinsrc/constants.ts - Audit checks: add entry to
src/core/audit/catalog.ts - [ ] Run
npm run build && npm test && npm run lint - [ ] Update README.md
Skill/Agent Oluşturma Kuralları (Yeni skill/agent scaffold ediliyorsa)
Yeni skill veya agent oluşturulurken aşağıdaki koşullar ZORUNLU:
- [ ] Ersin kriteri: scripts/ klasörü oluştur — deterministik iş LLM'e bırakılmayacak
- [ ] Progressive disclosure: SKILL.md < 500 satır, detaylar references/ klasöründe
- [ ] Frontmatter:
effort+allowed-toolsekle (minimum zorunlu) - [ ] Yan etki varsa:
disable-model-invocation: trueekle - [ ] Agent ise:
maxTurnsbelirle,memoryscope tanımla - [ ] Script dili: Shell (sh/bash) tercih et — Node.js ekosistemiyle uyumlu
- [ ] Evaluation: Gerçek task'ta test et, struggle noktalarını gözlemle
Security
- Security scanPassed, 90 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 repositoryCheckingkastell-plugin/skills/kastell-scaffold/SKILL.md
Popularity
- 7-day trend score
- 0
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/kastelldev/kastell/kastell-scaffold)