Files
claude-foundations/best-practices/skills-development.md
Paul O'Reilly e0f8e6471c Add best-practices library, knowledge distillation pipeline settings, and first session log
- best-practices/: 11 topic files + INDEX.md extracted from cluster-bootstrap
  and custom-claude-skills (validation, k8s, helm, ansible, secrets, debugging, etc.)
- settings.yaml: pipeline config (log retention, tracked projects, max logs per run)
- CLAUDE.md: updated with best-practices loading and pipeline documentation
- memory/log/: first session log demonstrating the format

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 23:39:06 +13:00

1.4 KiB

Claude Code Skills

Skill Structure

  • Each skill lives in skills/<skill-name>/SKILL.md
  • Skills should be project-agnostic where possible — use dynamic context injection to adapt
  • After adding a new skill, run the install script to register it
  • Skills only useful for one project should live in that project's .claude/skills/ instead

Authoring Guidelines

  • Inline by default — only use context: fork if the skill genuinely doesn't need conversation history
  • Pre-fetch context with !command`` injection to reduce tool calls during execution
  • Restrict tools with allowed-tools to the minimum needed — reduces permission prompts
  • Use $ARGUMENTS for user input, $0, $1 etc. for positional args
  • Dynamic commands in !command`` run at skill load time, not during Claude's execution

!command`` Gotchas

  • No $() command substitution — the permission checker rejects commands containing $()
  • No complex shell pipelines relying on subshells — keep commands simple and self-contained
  • allowed-tools patterns must match the command binary — each binary used in !command`` blocks needs its own pattern
  • Prefer specific tool patterns over broad onesBash(git log *) is safer than Bash(git *)
  • Fallback to tool instructions for dynamic paths — if a command needs $ARGUMENTS to compute a path, use a plain-text instruction telling Claude to use the Read tool instead