Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add commands/cloudnative-co/claude-code-starter-kit/update-kit-dry-rungit clone --depth 1 https://github.com/cloudnative-co/claude-code-starter-kitWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00000 | $0.02096 |
| Opus 5 | $0.00000 | $0.01048 |
| Sonnet 5 | $0.00000 | $0.00419 |
| Haiku 4.5 | $0.00000 | $0.00210 |
Grade A, and why
update-kit-dry-run scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 189 lines — stays where its author put it; the contents beside it link to each section on GitHub.
/update-kit-dry-run - Preview Update Changes
Preview what /update-kit would change without actually deploying.
Instructions
Run the following block as one Bash invocation. It uses the same strict,
non-evaluating manifest/config lookup as /update-kit: a current non-MDM
manifest binds the checkout to the exact config used at install time, while a
legacy or MDM manifest uses ~/.claude-starter-kit.conf. A legacy config with
no KIT_REPO key falls back to ~/.claude-starter-kit. An invalid explicit
binding, key, or repository stops the preview instead of silently using another
path.
set -euo pipefail
default_config_file="$HOME/.claude-starter-kit.conf"
config_file="$default_config_file"
default_kit_repo="$HOME/.claude-starter-kit"
kit_repo="$default_kit_repo"
manifest_file="$HOME/.claude/.starter-kit-manifest.json"
manifest_bound=false
if [ -e "$manifest_file" ] || [ -L "$manifest_file" ]; then
if [ -L "$manifest_file" ] || [ ! -f "$manifest_file" ]; then
printf '%s\n' "Invalid starter-kit manifest: $manifest_file" >&2
exit 1
fi
manifest_binding="$(jq -cse '
if length == 1 and (.[0] | type == "object") then
.[0]
| if (has("kit_repo") or has("config_file")) then
if (has("kit_repo") and has("config_file")
and (.mdm_managed == false)
and ((.kit_repo | type) == "string")
and ((.config_file | type) == "string")
and (.kit_repo | startswith("/"))
and (.config_file | startswith("/"))
and ((.kit_repo | test("[\\x00-\\x1f\\x7f]")) | not)
and ((.config_file | test("[\\x00-\\x1f\\x7f]")) | not))
then [.kit_repo, .config_file]
else error("invalid runtime binding")
end
else []
end
else error("invalid manifest")
end
' "$manifest_file" 2>/dev/null)" || {
printf '%s\n' "Invalid starter-kit manifest binding" >&2
exit 1
}
if [ "$manifest_binding" != "[]" ]; then
kit_repo="$(printf '%s' "$manifest_binding" | jq -r '.[0]')" || exit 1
config_file="$(printf '%s' "$manifest_binding" | jq -r '.[1]')" || exit 1
manifest_bound=true
fi
fi
if [ -e "$config_file" ] || [ -L "$config_file" ]; then
if [ -L "$config_file" ] || [ ! -f "$config_file" ] \
|| [ ! -r "$config_file" ]; then
printf '%s\n' "Invalid starter-kit config: $config_file" >&2
exit 1
fi
kit_repo_count="$(awk '
/^[[:space:]]*KIT_REPO[[:space:]]*=/ { count++ }
END { print count + 0 }
' "$config_file")" || {
printf '%s\n' "Could not read starter-kit config" >&2
exit 1
}
if [ "$kit_repo_count" -gt 1 ]; then
printf '%s\n' "Multiple KIT_REPO entries in starter-kit config" >&2
exit 1
fi
if [ "$kit_repo_count" -eq 1 ]; then
kit_repo_line="$(awk '
/^[[:space:]]*KIT_REPO[[:space:]]*=/ { print }
' "$config_file")" || exit 1
if [ "${kit_repo_line#KIT_REPO=\"}" = "$kit_repo_line" ] \
|| [ "${kit_repo_line%\"}" = "$kit_repo_line" ]; then
printf '%s\n' "Invalid KIT_REPO entry in starter-kit config" >&2
exit 1
fi
config_kit_repo="${kit_repo_line#KIT_REPO=\"}"
config_kit_repo="${config_kit_repo%\"}"
case "$config_kit_repo" in
/*) ;;
*)
printf '%s\n' "Invalid KIT_REPO entry in starter-kit config" >&2
exit 1
;;
esac
case "$config_kit_repo" in
*'"'*)
printf '%s\n' "Invalid KIT_REPO entry in starter-kit config" >&2
exit 1
;;
esac
if printf '%s' "$config_kit_repo" | LC_ALL=C grep -q '[[:cntrl:]]'; then
printf '%s\n' "Invalid KIT_REPO entry in starter-kit config" >&2
exit 1
fi
if [ "$manifest_bound" = true ] && [ "$config_kit_repo" != "$kit_repo" ]; then
printf '%s\n' "Manifest binding does not match starter-kit config" >&2
exit 1
fi
kit_repo="$config_kit_repo"
elif [ "$manifest_bound" = true ]; then
printf '%s\n' "Manifest-bound config has no KIT_REPO entry" >&2
exit 1
fi
elif [ "$manifest_bound" = true ]; then
printf '%s\n' "Manifest-bound config not found: $config_file" >&2
exit 1
fi
kit_repo_physical="$(cd "$kit_repo" 2>/dev/null && pwd -P)" || {
printf '%s\n' "Starter-kit checkout not found: $kit_repo" >&2
exit 1
}
repo_top="$(git -C "$kit_repo_physical" rev-parse --show-toplevel 2>/dev/null)" || {
printf '%s\n' "Not a Git checkout: $kit_repo_physical" >&2
exit 1
}
repo_top_physical="$(cd "$repo_top" 2>/dev/null && pwd -P)" || exit 1
if [ "$kit_repo_physical" != "$repo_top_physical" ] \
|| [ ! -e "$kit_repo_physical/.git" ] \
|| [ ! -f "$kit_repo_physical/setup.sh" ] \
|| [ ! -f "$kit_repo_physical/lib/features.sh" ] \
|| [ ! -f "$kit_repo_physical/config/plugins.json" ]; then
printf '%s\n' "KIT_REPO is not a starter-kit repository root" >&2
exit 1
fi
printf 'Resolved kit repo: %s\n' "$kit_repo_physical"
printf 'Resolved config file: %s\n' "$config_file"
repo_status="$(git -C "$kit_repo_physical" status --porcelain)" || {
printf '%s\n' "Could not inspect starter-kit checkout" >&2
exit 1
}
if [ -n "$repo_status" ]; then
printf '%s\n' "Local changes found; review them before previewing" >&2
exit 1
fi
git -C "$kit_repo_physical" fetch --tags
git -C "$kit_repo_physical" pull --ff-only
setup_args=(--update --dry-run)
if [ "$manifest_bound" = true ]; then
setup_args+=("--config=$config_file")
fi
(cd "$kit_repo_physical" && bash setup.sh "${setup_args[@]}")
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 189 lines · 0 tokens per session scan A 5fcee89c4f67
update-kit-dry-run is a command published in the GitHub repository cloudnative-co/claude-code-starter-kit (147 stars, last pushed 9d ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 2,096 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other commands, from other repositories
git
Git operations with intelligent commit messages and workflow optimization.
checklist
Generate a custom checklist for the current feature based on user requirements.
clarify
Identify underspecified areas in the current feature spec by asking up to 5 highly targeted clarification questions and encoding answers back into the spec.
specify
Create or update the feature specification from a natural language feature description.
analyze
Perform a non-destructive cross-artifact consistency and quality analysis across spec.md, plan.md, and tasks.md after task generation.
constitution
Create or update the project constitution from interactive or provided principle inputs.