Claude-ops ops-settings
Post-setup credential manager. Shows current integration status (configured/missing/expired) and lets you update individual credentials without re-running the full setup wizard. Runs a smoke test after each update.
install
source · Clone the upstream repo
git clone https://github.com/Lifecycle-Innovations-Limited/claude-ops
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/Lifecycle-Innovations-Limited/claude-ops "$T" && mkdir -p ~/.claude/skills && cp -r "$T/claude-ops/skills/ops-settings" ~/.claude/skills/lifecycle-innovations-limited-claude-ops-ops-settings && rm -rf "$T"
manifest:
claude-ops/skills/ops-settings/SKILL.mdsource content
Runtime Context
PREFS="${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json" cat "$PREFS" 2>/dev/null || echo '{}'
OPS ► SETTINGS
Manage credentials and integration config after initial setup.
Parse arguments
or empty → show full credential status dashboard--status
→ jump directly to updating that integration (e.g.<integration-name>
)/ops:settings stripe
→ show status of one integration only--status <integration-name>
Credential Status Dashboard
Read
preferences.json. For each known integration, check whether the key exists and is non-empty. Also probe liveness where possible.
Display as a table:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ OPS ► SETTINGS — Integration Status ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Integration Status Last Updated ─────────────────── ──────────── ───────────── GitHub (gh cli) ✅ active (always active if gh auth status) Stripe ✅ configured 2026-04-14 RevenueCat ✅ configured 2026-04-14 Telegram ✅ configured 2026-04-13 Slack ⚠️ missing — Linear ✅ configured 2026-04-11 Sentry ⚠️ missing — AWS ✅ active (always active if aws sts works) Shopify ⚠️ missing — Klaviyo ⚠️ missing — Meta Ads ⚠️ missing — GA4 ⚠️ missing — ElevenLabs ⚠️ missing — Datadog ⚠️ missing — New Relic ⚠️ missing — ... ✅ N configured ⚠️ N missing ──────────────────────────────────────────────────────
Probe liveness
For integrations with a cheap health check, run it to distinguish "configured but expired" from "configured and active":
| Integration | Probe | Active signal |
|---|---|---|
| Stripe | | 200 |
| GitHub | | "Logged in" |
| AWS | | exits 0 |
| Linear | `cat "$PREFS" | jq -r .linear_team` |
| Doppler MCP | Check if DOPPLER_TOKEN is set and valid | Token present and MCP server responds |
Show
🔴 expired if probe fails for a previously-configured key.
Update an integration
When a specific integration is selected (via argument or user pick from dashboard):
- Show current value (masked):
(last 4 chars visible)sk_live_•••••••••••••••• - Use AskUserQuestion to confirm the update action:
[Enter new value] [Test current value] [Clear this credential] [Back to dashboard] - For "Enter new value": prompt with
text inputAskUserQuestion - Write new value to
viapreferences.json
update:jqtmp=$(mktemp) jq --arg v "$NEW_VALUE" --arg k "$KEY_NAME" '.[$k] = $v' "$PREFS" > "$tmp" && mv "$tmp" "$PREFS" - Run smoke test immediately after update (see Smoke Tests section)
- Report:
or✅ Stripe key updated — smoke test passed⚠️ Key saved but smoke test failed: <reason>
Smoke Tests
| Integration | Smoke test command |
|---|---|
| Stripe | → must be "balance" |
| RevenueCat | → non-zero |
| Telegram | → "healthy" |
| Slack | → true |
| Shopify | → non-null |
| Klaviyo | → non-null |
| Datadog | → true |
| New Relic | `curl -s -H "Api-Key: ${new_key}" https://api.newrelic.com/v2/applications.json | jq '.applications |
| Doppler MCP | with DOPPLER_TOKEN set |
CLI/API Reference
| Command | Purpose |
|---|---|
| List all configured keys |
| Update a single key |
| Verify GitHub CLI auth |
| Verify AWS auth |