Releases: Lifecycle-Innovations-Limited/claude-ops
claude-ops v2.1.3
Patch release — bin/ops-external and bin/ops-marketing-dash are now preferences-aware and surface real Shopify, Klaviyo, Meta, Instagram, and GSC data per project. /ops:ops-yolo always archives prior session reports to force a fresh-state run.
Fixed
bin/ops-externalnow readspreferences.json(Shopify stores in.ecom.projectsand.partner_registry.shopify_admin.stores, marketing channels in.marketing.projects,.integrations) instead of returning[]when onlyregistry.jsonis empty. Resolves credential references using a shared grammar (env:VAR/doppler:project/config/SECRET/ inline). Probes Shopify Admin API for livehealthy / auth_expired / not_found / unreachablestatus. Adds-g(globoff) to all curl calls so bracketed query params (fields[shop]=…) don't get mangled. Guards against the BSDseq 0 -1quirk that previously emitted spuriousalias: nullentries when the registry selection was empty.bin/ops-marketing-dashis now project-aware. Readsmarketing.default_projectfrompreferences.json(overridable via--project <name>arg orOPS_MARKETING_PROJECTenv). Resolves nested cred refs (env:AB_KLAVIYO_TOKEN,doppler:hueman/prd/BRIGHT_KLAVIYO_TOKEN, etc.) before falling back to the legacy flat env /claude plugin config get/ bare-Doppler chain. Adds-gand--max-time 5to every curl. Output now includes aprojectfield so downstream surfaces know which project's data they're seeing.
Added
bin/ops-dashsurfaces marketing health + Shopify count in the header status block (marketing N/100 Status (project) | shopify N/N), backgrounded against the existing probes so render time is unchanged./ops:ops-goPhase-1 pre-gather now invokesops-marketing-dashso the briefing's MARKETING section actually has data instead of falling through to(marketing not configured)./ops:ops-yoloPhase 0 archives any prior/tmp/yolo-*/to~/.claude/yolo-archive/<session>-<epoch>/and allocates a freshSESSION_DIRon every run. C-suite agent prompts now include a verbatim "fresh-state" directive forbidding reuse of cached reports.ops-marketing-dashadded to Phase-1 data.
claude-ops v2.1.2
Patch release — second pass on YOLO false-fire suppression. Adds an inline annotation so C-suite agents can short-circuit on projects whose tracking is intentionally delegated to a workspace-level coordinator.
Changed
bin/ops-gsd-statesannotates SUBORDINATE projects (PR #204). When a GSD project's.planning/STATE.mdfrontmatter hasstatus: subordinate_to_workspace, its phase tracking is intentionally delegated to a workspace-level coordinator (e.g.healify-apiandhealify-agentcoreboth delegate tohealify-workspace). Prior to this fix, the C-suite YOLO agents treated these as independent projects and flagged them as "stalled" when their phase progress was static — but the staticness is correct: the workspace owns the schedule. Now the script appends[SUBORDINATE — tracking delegated to workspace; do NOT flag as stalled]to the project header, giving C-suite agents an inline short-circuit. Pairs with the CLAIM VERIFICATION GUARDRAIL shipped in 2.1.1. Concrete case from 2026-05-01 YOLO session: COO claimedhealify-api v3.1 Phase 1 stalled 6d on closed PR #3217. Reality: PR #3217 was intentionally closed and superseded by #3222, which merged 2026-04-25. The workspace-level STATE.md correctly reflects this withstatus: subordinate_to_workspace; the YOLO scan would have surfaced that status if the script annotated it. Implementation uses a small awk frontmatter scalar parser; activates only on the literal valuesubordinate_to_workspace; all other status values stay silent.
claude-ops v2.1.1
Patch release — /ops:ops-yolo reliability fixes. Restores Phase 1 data-gathering after a regression, and adds a verification guardrail to the C-suite agents so they stop reporting false fires.
Fixed
/ops:ops-yoloPhase 1 silent abort (PR #201). The inline!shell block inskills/ops-yolo/SKILL.mdused the bash-only parameter expansion${d/#\~/$HOME}for tilde substitution. Claude Code's!block executor runs undersh/dash, so the expansion was a syntax error and the GSD-state aggregation step silently aborted — taking the rest of YOLO data-gathering down with it. Extracted the loop tobin/ops-gsd-stateswith an explicit#!/usr/bin/env bashshebang. Same convention as every other Phase 1 block, which are all thin shims aroundbin/scripts. Output format unchanged:=== <basename> ===header + STATE.md body +---separator.
Changed
- YOLO C-suite agents now require claim verification (PR #202). The 2026-05-01 YOLO session produced multiple false-positive fires: agents flagged
CLERK_AUTHORIZED_PARTIESas missing on a stagery-api Doppler config that already had it set; flaggedhealify-langgraphs-proddesired=0 as a fire when the most recent commit waschore(decomm): disable prod deploy workflow per phase 19.4 Stage 2; and referenced a Dopplerstgconfig that does not exist on stagery-api. Root cause: agent prompts told them to be "brutally honest" but did not require them to verify external state before asserting it. Stale STATE.md notes were promoted to P0 claims. Added a## CLAIM VERIFICATION GUARDRAILsection to all four agents (yolo-ceo,yolo-cto,yolo-cfo,yolo-coo). Identical block in each, placed before the existingDESTRUCTIVE ACTION GUARDRAIL. Mandates concrete verification commands per claim type (doppler secrets get --plain,aws secretsmanager get-secret-value,git log --grep decomm), distinguishes "set to empty" from "unset", and requiresUNVERIFIEDlabeling when verification is impossible (rate limit, missing creds). Forbidden output patterns include "X is missing in production" without a corresponding read, and any P0/CRITICAL label on state that is the result of a documented planned change.
claude-ops v2.1.0
Minor release — consolidates the feature work from the v2.0.5–v2.0.9 patch series into a single coherent version. No breaking changes; drop-in replacement for v2.0.x.
Added
- Multi-workspace Slack support (was v2.0.9 / PR #195). Single ops install can now connect to multiple Slack workspaces simultaneously and route messages by workspace context. Adds
bin/ops-slack-workspacesfor inspection. /ops:credentialsaudit skill (was v2.0.6 / PR #184). On-demand audit of which integration credentials are configured, expiring soon (<7d), or stale (>180d). Plugin.jsonuserConfignow carries field hints so the audit can tell users which env var or vault key holds each credential.- ops-ci current-state filter (was v2.0.9 / PR #196).
bin/ops-cinow emits ONLY workflows whose latest run on a tracked branch (main/dev/master) is currently failing — not "any failure in the last 24h". Eliminates the false-fire cascade in/ops-firesand/ops-gowhere stale failures triggered fix-agent dispatch on already-resolved CI. Smoke test on a real 38-repo portfolio: 14 → 6 entries (57% noise reduction). BehindOPS_CI_MODE=currentdefault;OPS_CI_MODE=legacyreverts. - MANDATORY pre-dispatch staleness check in ops-fires SKILL (was v2.0.9 / PR #196). Defense-in-depth gate —
gh run list --workflow X --branch Y --limit 1— before spawning any fix agent. Catches cache races where a fix landed in the seconds since the CI cache was written. - Telegram preflight + keychain fallback (was v2.0.7 / PR #185). SSE/user-config detection runs before Telegram MCP auth; macOS keychain is the fallback secret store when Doppler is unconfigured.
- userConfig schema upgrades (was v2.0.5 / PR #182).
enumvalues,sensitiveflags, and per-integration toggles for fine-grained capability gating.
Fixed
- userConfig
enumrejection by Claude Code stable (was v2.0.8 / PR #190). Removed unsupportedenumkeys fromfix_model,max_fixes_per_hour,watcher_timeout_seconds,notify_channel,task_reminder_threshold,aws_region,doppler_config. Field descriptions retain the valid value lists. - Cross-OS macOS keychain guard in
/ops:credentials(was v2.0.6 hotfix). - Plugin.json Prettier formatting (was v2.0.5 hotfix).
Notes
- Plugin v2.1.0 ships 35 skills, 18 agents.
- Marketplace pin must be bumped to
2.1.0— see follow-up PR. - Local plugin cache: clear old
ops/2.0.*cache directories and re-install via marketplace refresh after merge.
claude-ops v2.0.9
Added
- Multi-workspace Slack support.
preferences.jsonnow accepts aslack_workspacesarray so ops briefings, inbox scans, and comms reads iterate ALL configured Slack workspaces instead of stopping at one. Each entry carriesname,token_env(the env var holding the token — never stored in prefs), andkind(bot_token|user_token). Backwards-compatible: configs with noslack_workspacesfall back to legacySLACK_MCP_ENABLED=truesingle-workspace path. bin/ops-slack-workspaceshelper. Lists every configured workspace, resolves token env vars, and callsslack.com/api/auth.testfor each. Outputs a table or--jsonfor machine consumers. Exit code is non-zero if any token is missing or invalid.- Setup wizard multi-workspace loop. Step 3d now persists each workspace into
slack_workspaces[]and asks "Add another workspace?" until done. Running/ops:setup slacka second time appends to the array without overwriting existing entries. - Updated
ops-go,ops-inbox,ops-comms,ops-dashSKILL.md docs to describe multi-workspace iteration, per-workspace labelling, and the MCP-bound-token fallback path (direct curl for non-primary workspaces).
claude-ops v2.0.8
Fixed
- Hotfix: remove unsupported
enumkeys from plugin.jsonuserConfig. Claude Code's plugin manifest validator rejectsenumon userConfig fields ("Unrecognized key"), which broke plugin loading on the latest stable. Removedenumfromfix_model,max_fixes_per_hour,watcher_timeout_seconds,notify_channel,task_reminder_threshold,aws_region, anddoppler_config. Field descriptions retain the valid value lists so users still know what's allowed. Restores plugin install on Claude Code stable.
claude-ops v2.0.7
Fixed
- Telegram MCP server: macOS Keychain fallback at startup. The plugin's
.mcp.jsoninjectsTELEGRAM_API_ID/HASH/SESSION/PHONEvia${user_config.telegram_*}placeholders. When users configure Telegram via/ops:setup(which writes to Keychain) instead of pasting into the plugin settings UI, those placeholders resolve to empty strings and the MCP server fails — a working keychain integration appeared "not configured".telegram-server/index.jsnow falls back tosecurity find-generic-password -s telegram-{api-id,api-hash,session,phone} -wwhen each env var is empty. macOS-only fallback; Linux/Windows continue to use env vars or the settings UI. - Preflight: detect SSE-router + user-config.json credential sources. Adds two new credential scout sources to the setup preflight: SSE router config and
${CLAUDE_PLUGIN_DATA_DIR}/user-config.json. Tightensbin/ops-setup-detectto handle the SSE/user-config presence map. New test intests/test-preflight-sse-userconfig.sh.
PR: #185
claude-ops v2.0.6
Added
/ops:credentialsskill +bin/ops-credentialsaudit CLI. Scans shell env, opspreferences.json, Doppler (resolvesdoppler:KEYreferences live), macOS Keychain, and Dashlane to report which integration credentials are configured vs missing. Output formats: human table (default), JSON (--json), single-service filter (--service stripe). Values masked asfirst6•••last4; never prints raw secrets. Auto-switches to compact one-line-per-cred format on SSH/mobile (per Rule 7).- Credential field hints in plugin.json descriptions. All 22 sensitive credential fields now include "If already configured via /ops:setup or stored in keychain/Doppler, leave blank — runtime resolves automatically".
PR: #184
v2.0.5 — userConfig enums + sensitive flags + per-integration toggles
Fixed
- Plugin settings UI: enums + sensitive flags + opt-in toggles. Three fixes to
userConfig:- Added
enumto finite-value fields:fix_model,notify_channel,aws_region(16 regions),max_fixes_per_hour,task_reminder_threshold,watcher_timeout_seconds,doppler_config. - Marked 22 credential fields
sensitive: trueso the UI masks them: Telegram api_hash/session, Klaviyo, Meta Ads, Shopify admin, ShipBob, Bland AI, ElevenLabs, Groq, Stripe, RevenueCat, Datadog, New Relic, Pushover, Discord bot/webhook, Doppler token, DPD password, UPS+FedEx client secrets. - Added 25 per-integration
*_enabledboolean toggles so users explicitly opt in to each integration. Same pattern asdeploy_fix_enabled. Covers: telegram, discord, pushover, ntfy, sentry, linear, datadog, newrelic, otel, doppler, klaviyo, meta_ads, ga4, gsc, shopify, shipbob, bland_ai, elevenlabs, groq, stripe, revenuecat, postnl, dpd, ups, fedex.
- Added
PR: #182
v2.0.4 — registry path canonicalization
Fixed
- Registry path resolution: survive plugin updates. Bin scripts read
registry.jsonfrom\$PLUGIN_ROOT/scripts/registry.json(the cache path), which is wiped on every plugin upgrade. Symptom: after a version bump,/ops:ops-dashand friends report "No project registry found" until the user manually re-runs/ops:setup, even though their data-dir registry is intact. - New
lib/registry-path.shhelper resolvesOPS_DATA_DIRandREGISTRYwith precedence: data-dir → caller-supplied legacy fallback →\$PLUGIN_ROOT/scripts→ canonical default. - Patched 9 bin scripts and the daemon's
prefetch_project_health.bin/ops-projectsalready followed this pattern; this brings the rest of the surface in line.