gsd-surface
GitHub管理运行时技能表面,无需重装即可应用配置、列出或禁用集群。支持list/status查看状态,profile切换配置,enable/disable控制集群显隐,reset恢复默认。通过读写配置文件并重新应用实现动态调整。
Trigger Scenarios
Install
npx skills add AjayIrkal23/agentic-mercy-10x --skill gsd-surface -g -y
SKILL.md
Frontmatter
{
"name": "gsd-surface",
"description": "Toggle which skills are surfaced — apply a profile, list, or disable a cluster without reinstall",
"allowed-tools": [
"Read",
"Write",
"Bash"
],
"argument-hint": "[list|status|profile <name>|disable <cluster>|enable <cluster>|reset]"
}
Sub-commands: list · status · profile · disable · enable · reset
Sub-command routing
Parse the first token of $ARGUMENTS:
| Token | Action |
|---|---|
list |
Show enabled + disabled clusters and skills |
status |
Alias for list plus token cost summary |
profile <name> |
Write baseProfile and re-stage |
profile <n1>,<n2> |
Composed profiles (comma-separated, no spaces) |
disable <cluster> |
Add cluster to disabledClusters, re-stage |
enable <cluster> |
Remove cluster from disabledClusters, re-stage |
reset |
Delete .gsd-surface.json, return to install-time profile |
| (none) | Treat as list |
list / status
Call listSurface(runtimeConfigDir, manifest, CLUSTERS) from
get-shit-done/bin/lib/surface.cjs. Display:
Enabled (N skills, ~T tokens):
core_loop: new-project discuss-phase plan-phase execute-phase help update
audit_review: …
…
Disabled:
utility: health stats settings …
Token cost: ~T (budget cap ~500 tokens for 200k context @ 1%)
For status also append:
Base profile: standard (from .gsd-surface.json)
Install profile: standard (from .gsd-profile)
profile <name>
- Read current surface:
readSurface(runtimeConfigDir)→ if null, seed fromreadActiveProfile(runtimeConfigDir). - Set
surfaceState.baseProfile = name. writeSurface(runtimeConfigDir, surfaceState).- Resolve and re-apply:
applySurface(runtimeConfigDir, commandsDir, agentsDir, manifest, CLUSTERS). - Confirm: "Surface updated to profile
<name>. N skills enabled."
disable <cluster>
Valid cluster names: core_loop, audit_review, milestone, research_ideate,
workspace_state, docs, ui, ai_eval, ns_meta, utility.
- Validate cluster name against
Object.keys(CLUSTERS). - Read or initialize surface state.
- Add cluster to
surfaceState.disabledClusters(deduplicate). writeSurface→applySurface.- Confirm: "Disabled cluster
<cluster>. N skills removed from surface."
enable <cluster>
- Read surface state; if null, nothing to enable — print "No surface delta active."
- Remove cluster from
surfaceState.disabledClusters. writeSurface→applySurface.- Confirm: "Enabled cluster
<cluster>. N skills added back to surface."
reset
- Check if
.gsd-surface.jsonexists. - Delete it.
- Re-apply using only
readActiveProfile(runtimeConfigDir)(install-time profile). - Confirm: "Surface reset to install-time profile
<name>."
runtimeConfigDir resolution
# Claude Code
RUNTIME_CONFIG_DIR=$HOME/.claude/skills
# Resolve commandsDir and agentsDir
COMMANDS_DIR=$HOME/.claude/commands/gsd
AGENTS_DIR=$HOME/.claude/agents
All paths can be overridden by reading the CLAUDE_CONFIG_DIR env var if set.
Error handling
- Unknown cluster name → list valid cluster names, exit without writing.
- Unknown profile name → list known profiles (
core,standard,full), exit. - Missing
surface.cjs→ prompt: "Runnpm i -g get-shit-doneto reinstall GSD."
<execution_context>
Surface state file: $HOME/.claude/skills/.gsd-surface.json
Install profile marker: $HOME/.claude/skills/.gsd-profile
Engine module: $HOME/.claude/get-shit-done/bin/lib/surface.cjs
Cluster definitions: $HOME/.claude/get-shit-done/bin/lib/clusters.cjs
</execution_context>
Version History
- 581d130 Current 2026-07-19 09:11


