Profiles and credentials
Skill tuannv14/claude-team-toolkit/skills/profiles-and-credentials
Team-ready Claude Code skill pack: 15 multi-account integrations for Rails + React Native + e-commerce. Trello, Azure DevOps, Heroku, Shopify, Firebase, Sentry, Slack, Postgres, Maestro, Fastlane + 5 more. Real value: multi-account profiles, audit logging, safety gates, xlsx-testcases unique workflow.
npx -y skills add tuannv14/claude-team-toolkit --skill profiles-and-credentialsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use when authoring or modifying any claude-team-toolkit skill that loads credentials, switches between accounts/orgs/environments, or needs confirmation for destructive operations. Reference for the shared profile + ctt_* helper pattern used by all credential-bearing skills.
SKILL.md
4.3 KB, as published. Nobody here has run it
Profiles & Credentials — shared pattern reference
Reference skill describing the credential / profile / confirmation pattern used by all claude-team-toolkit skills (azure-devops, fastlane, firebase, heroku, k6, maestro, postgres, rspec, sentry, shopify, slack, trello, etc.). Implementation lives in lib/credentials.sh and lib/confirm.sh.
Overview
All credential-bearing skills share a uniform pattern:
- INI credentials at
~/.<service>/credentials(mode 600) - Multiple
[profile]sections per file (e.g.,[default],[work],[prod]) - Resolution order:
--profile <name>flag →<SERVICE>_PROFILEenv →~/.<service>/active_profile→[default] - Helper sourced from
lib/credentials.shpopulatesCTT_<KEY>env vars - Destructive ops gated by
ctt_confirmfromlib/confirm.sh - Actions audit-logged to
~/.claude-team-toolkit/audit.log(key NAMES only, never values)
When to Use
- Authoring a NEW skill that needs per-account/per-org/per-env switching
- Modifying credential loading in an existing skill
- Adding destructive operations that need typed confirmation
- Debugging why a skill picks the wrong profile
- Reviewing security posture of a skill
When NOT to Use
- One-off scripts not meant for reuse → just hardcode and move on
- Skills with no credentials (e.g.,
react-native,rails-security) → nothing to load - Cross-cloud unified credential systems → use the cloud's native config (
~/.aws/credentials, etc.) instead of reinventing
Profile file shape
# ~/.<service>/credentials (mode 600)
[default]
field_a = value
field_b = secret
[other-profile]
field_a = different
require_confirm = true # gate every mutation in this profile
After ctt_load_creds <service> [profile]:
CTT_PROFILE=<resolved>(e.g.,default)CTT_FIELD_A=<value>,CTT_FIELD_B=<secret>(uppercased, hyphens → underscores)
Helper API (from lib/credentials.sh)
| Function | Purpose |
|---|---|
ctt_load_creds <svc> [profile] | Resolve + load profile into CTT_* env |
ctt_save_profile <svc> <profile> <k=v>... | Atomic INI section write |
ctt_list_profiles <svc> | List sections, mark active with * |
ctt_use_profile <svc> <profile> | Set active profile pointer |
ctt_active_profile <svc> | Print resolved active profile |
ctt_remove_profile <svc> <profile> | Refuses to remove last profile |
ctt_mask <value> | Returns ****<last4> for safe logging |
ctt_validate_perms <file> | Refuses non-600/400 mode (POSIX only) |
ctt_audit_log <svc> <action> | Append timestamp + profile + action |
Confirmation API (from lib/confirm.sh)
ctt_confirm "Delete app foo?" || return 1 # y/N prompt
ctt_confirm "Drop table users?" "DELETE" || return 1 # typed phrase
ctt_warn_destructive "Action description" # noisy stderr banner
CTT_NONINTERACTIVE=1 auto-denies all confirmations (CI safety).
Common Mistakes
- Reading credentials directly with
awkinstead ofctt_load_creds→ bypasses perm validation - Logging full credential values instead of
ctt_mask→ secrets leak to terminal/CI logs - Using
evalto set vars from credentials → injection risk. Helper usesprintf -vfor safety. - Audit log records values not just key names → audit log itself becomes a secret store
- Confirmation without typed phrase for irreversible ops → "y" is too easy a typo
- Service name with uppercase or special chars → helper validates
^[a-z0-9-]+$
Security defaults
- Credentials directory:
chmod 700. File:chmod 600. Helper refuses to load otherwise (POSIX). - Windows: best-effort (NTFS ACLs not enforced by helper) — document in skill's safety section.
CTT_NONINTERACTIVE=1in CI → auto-deny destructive ops (no surprise mutations).- Audit log at
~/.claude-team-toolkit/audit.log(mode 600). Records: timestamp, service, profile, action. - Never write credentials into git, chat output, or any file outside
~/.<service>/credentials.