agentsclimarketplace

Profiles and credentials

Skill tuannv14/claude-team-toolkit/skills/profiles-and-credentials

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.From its SKILL.md

Install
npx -y skills add tuannv14/claude-team-toolkit --skill profiles-and-credentials

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • reads credentialsReads from 1 credential source: `~/.<service>/credentials`.
  • 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.

SKILL.md

4.3 KB, ~1.1k tokens by cl100k_base, 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>_PROFILE env → ~/.<service>/active_profile[default]
  • Helper sourced from lib/credentials.sh populates CTT_<KEY> env vars
  • Destructive ops gated by ctt_confirm from lib/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)

FunctionPurpose
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 awk instead of ctt_load_creds → bypasses perm validation
  • Logging full credential values instead of ctt_mask → secrets leak to terminal/CI logs
  • Using eval to set vars from credentials → injection risk. Helper uses printf -v for 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=1 in 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.

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.