claude-code-plugin-ref…
Explain plugin, skill, command, agent, and hook mechanics used here. Use when authoring or debugging plugins. Do not use for ops; use night-market-operations.
Reports which delegation CLIs are installed and authenticated, installs missing ones, and stores the result. Use before delegating or when a provider errors.
$ npx -y skills add athola/claude-night-market --skill provider-setup --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/provider-setupContext preview
The summary Claude sees to decide when to auto-load this skill.
Reports which delegation CLIs are installed and authenticated, installs missing ones, and stores the result. Use before delegating or when a provider errors.
name: provider-setup description: Reports which delegation CLIs are installed and authenticated, installs missing ones, and stores the result. Use before delegating or when a provider errors. alwaysApply: false category: delegation-infrastructure tags: - setup - providers - authentication - installation dependencies: - delegation-core
An operator should be able to ask what this machine can delegate to, get a truthful answer, install what is missing, and have that answer remembered. Before this skill existed, an unconfigured provider surfaced only as a failed delegation, and every call re-derived the same facts by spawning up to sixteen subprocesses.
the binary, the credential, or the model
(`Skill(conjure:delegation-core)` routes)
`scripts/delegation_setup.py` probes each registered service and prints a table: binary, version, installed, authenticated, and the fix for each unhealthy row.
python3 scripts/delegation_setup.py --status python3 scripts/delegation_setup.py --doctor python3 scripts/delegation_setup.py --available
`--available` is the short answer: the providers confirmed ready to take work right now.
Installs come from the provenance map in `delegation_executor`, which is the only source of install commands. A binary with no recorded provenance raises instead of falling back to a guess, because #655 shipped a service naming a binary that an unaffiliated package publishes.
python3 scripts/delegation_setup.py --install gemini python3 scripts/delegation_setup.py --all
Every install asks first. Declining is a recorded outcome, not a failure, so `--all` on a machine where two of eight CLIs are wanted still exits 0.
`plugins/conjure/scripts/provider_ledger.py` writes `~/.claude/hooks/delegation/provider-state.json`. What it stores is asymmetric on purpose:
| Fact | Cached | Why | |------|--------|-----| | Installed, version | Yes, under a 6-hour TTL | Cheap to re-derive, stable between runs | | Confirmed credential | As a timestamp, never a boolean | A token expires without touching the binary | | A recorded failure | Clears the confirmation immediately | A stale success must not outlive the credential |
A provider whose credentials live inside its CLI reports `auth_checked: false`, and that never becomes a confirmation. "We did not look" and "it works" are different claims, and the table keeps them apart.
The file is a cache. A truncated or unreadable ledger loads as empty and costs one round of probes.
Routing still probes live. `Delegator.verify_service` spawns the version and auth probes on the delegation path as it always did, and the ledger does not short-circuit it.
That is a deliberate boundary, not an unfinished edge. Reading a cached success into the router would send work to a provider whose token expired since the probe, and reading a cached failure into the router would disable a provider for the rest of the TTL after one transient error. The ledger answers an operator's question, "what is set up on this machine", where a six-hour-old answer is useful and a wrong one costs a re-run. The router answers "can this call succeed now", where a wrong answer costs the call.
Wiring the ledger into `verify_service` needs a failure taxonomy that separates a transient refusal from a revoked credential. That does not exist yet.
per registered service with its installed and authenticated state
confirmed credential, are inside the TTL, and have no recorded failure
probe and parses as JSON with `"version": 1`
`UnverifiedBinaryError` instead of running a guessed command
provider that starts refusing work leaves `--available`
services generally
A plugin marketplace for Claude Code. Install only the plugins you need to run git workflows, code review, spec-driven development, and autonomous agents from inside your Claude Code session.
Explain plugin, skill, command, agent, and hook mechanics used here. Use when authoring or debugging plugins. Do not use for ops; use night-market-operations.
States load-bearing decisions, invariants, and weak points. Use when judging a design change. Do not use for gating; use night-market-change-control.
Rebuild the dev environment: uv, Python tiers, pins, traps. Use when onboarding or toolchain breaks. Do not use for daily commands; use night-market-operations.
Classify, gate, and review changes. Use when landing a PR, releasing, or amending rules. Do not use for failure triage; use night-market-debugging-playbook.
Search and record project memory (Discussions, journal, ADRs). Use before re-investigating anything. Do not use for settled battles; see failure-archaeology.
Bind loop 'done' to unfakeable gates. Use to harden egregore/herald loops or promote completion_integrity. Not for QA gates; use night-market-validation-and-qa.