7.2 KiB
Configure mode — force-trigger Go skills in a project
This workflow writes two independent things to the project's agent config file:
- An always-load directive for
golang-how-toitself — a single sentence, unconditional, no user confirmation needed. - An optional
## Required Go skillsblock that force-triggers a specific, user-confirmed set of secondary skills.
When to use
- Any new Go project should get the always-load directive (see below) — this is the common case.
- The project additionally has a hard requirement on specific skills (e.g.,
golang-securitymust always apply, not just when the user mentions "security"). - The team has agreed on a fixed set of Go standards to enforce on every AI interaction.
- A company skill overrides a community default (⚙️ skills) and must always win.
Always-load directive
Every Go project should carry a one-line directive telling any coding agent — Claude Code, Codex, Cursor, Copilot — to load the samber/cc-skills-golang@golang-how-to orchestrator skill before starting Go work, so it in turn routes to whichever other Go skills the task actually needs. Unlike the ## Required Go skills block below, this directive needs no AskUserQuestion confirmation: it costs one skill description (~100 tokens) and is never wrong, since golang-how-to only routes to other skills — it does not impose project-specific choices.
Template
Before any Go coding, review, debugging, troubleshooting, or setup task, load the `samber/cc-skills-golang@golang-how-to` skill first — it routes to whichever other Go skills the task needs.
When it gets written
- At project creation — the
samber/cc-skills-golang@golang-project-layoutskill writes this directive automatically as part of its Initialization Checklist, without asking the user. - On demand — running
/golang-how-to configurewrites it too (if missing), in addition to any## Required Go skillsblock confirmed in Step 3 below.
Insertion point
- If a
## Required Go skillsblock already exists or is being created in the same pass, insert the directive as its own line directly above that heading, separated by a blank line. - Otherwise, append it under a
## Go developmentheading (create the heading if the file has no such section).
Idempotency
Grep for the exact sentence before writing:
grep -n 'load the `samber/cc-skills-golang@golang-how-to` skill first' CLAUDE.md
Skip writing if already present.
Step 1 — Detect the project config file
Check in this precedence order:
1. CLAUDE.md (Claude Code)
2. AGENTS.md (OpenAI Codex, OpenCode, multi-agent)
3. .cursor/rules (Cursor)
4. .github/copilot-instructions.md (GitHub Copilot)
Use Glob to detect which files exist at the project root. If multiple exist, use all of them (different tools read different files). If none exist, ask the user which one to create with AskUserQuestion.
Step 2 — Idempotency check
Before writing, grep each file for the always-load directive and an existing ## Required Go skills block:
grep -n 'load the `samber/cc-skills-golang@golang-how-to` skill first' CLAUDE.md
grep -n "## Required Go skills" CLAUDE.md
Write the always-load directive if it's missing, regardless of what Step 3 decides. If the ## Required Go skills block already exists, read it and confirm with the user whether to update it in place (replace the existing list) or skip.
Step 3 — Confirm the skill set with the user
Use AskUserQuestion to confirm which skills to always load. Present the ⭐️ recommended skills as the default selection. Remind the user of the token budget (each always-loaded skill adds its description tokens to every session — the 11 recommended skills add ~1,100 tokens at startup).
Recommended ⭐️ set for most projects:
golang-code-style
golang-data-structures
golang-design-patterns
golang-documentation
golang-error-handling
golang-modernize
golang-naming
golang-safety
golang-security
golang-testing
golang-troubleshooting
Additional skills to suggest based on codebase context:
- Database layer detected (
sql,gorm,sqlc) → suggestgolang-database - CI config detected (
.github/workflows/) → suggestgolang-continuous-integration - Cobra imports detected → suggest
golang-spf13-cobra - Viper imports detected → suggest
golang-spf13-viper - samber/lo imports detected → suggest
golang-samber-lo - Any other library-specific import → suggest the matching library skill
Step 4 — Write the block
Template
Before any Go coding, review, debugging, troubleshooting, or setup task, load the `samber/cc-skills-golang@golang-how-to` skill first — it routes to whichever other Go skills the task needs.
## Required Go skills
The following Go skills from `samber/cc-skills-golang` MUST always be applied when working on this project. Load them at the start of every Go-related task, regardless of whether the user explicitly mentions them.
- `samber/cc-skills-golang@golang-error-handling`
- `samber/cc-skills-golang@golang-security`
- `samber/cc-skills-golang@golang-testing`
Replace the skill list with the confirmed set from Step 3. Use the fully-qualified samber/cc-skills-golang@<name> identifier for each skill. If Step 2 found the always-load directive already present elsewhere in the file, don't duplicate it — write only the ## Required Go skills block.
Insertion point
- If the file is empty: write the block at the top.
- If the file has existing content: append after the last section, separated by a blank line.
- If a
## Required Go skillsblock already exists: replace only the bullet list inside it, preserving surrounding content.
Edit the file
Use the Edit tool (preferred over a bash script) to apply the change. For append operations:
# Conceptually: read the file, find the insertion point, apply Edit
Perform an idempotency check after writing: re-read the file and verify the block appears exactly once.
Step 5 — Confirm to the user
After writing, summarize:
- Which file(s) were updated
- Whether the always-load directive for
golang-how-towas added or was already present - Which skills were added to the always-load list
- Approximate startup token cost (number of skills × ~100 tokens per description)
- Note: skills marked ⚙️ (overridable) will be superseded if a company skill explicitly declares the override in its body
Notes on company overrides (⚙️ skills)
Skills marked ⚙️ in the README support company overrides. If the project has a company skill that supersedes a community default (e.g., acme/cc-skills@golang-error-handling-acme supersedes samber/cc-skills-golang@golang-error-handling), use the company skill FQN in the block instead — do NOT list both.
To declare an override in a company skill body, add near the top:
> This skill supersedes `samber/cc-skills-golang@golang-error-handling` for [Company] projects.
Overridable skills: golang-code-style, golang-concurrency, golang-context, golang-database, golang-dependency-injection, golang-design-patterns, golang-documentation, golang-error-handling, golang-naming, golang-observability, golang-structs-interfaces, golang-testing.