Define and wire OAuth2 token provisioning for the non-library, non-claude.ai harnesses so they can call the capture MCP relay / REST endpoint: Crush, Pi, LLM Council (Open WebUI). claude.ai is already done (rides the existing Dex/oauth/token connector; its subject resolves to us-nexus).
Context
capture shipped with the relay live for claude.ai via the existing /mcp OAuth connector. The other non-library harnesses need their own credential path to reach it. This is the "bounded per-harness quirk" flagged in #49 and #55 — deferred deliberately so the epic could close on the claude.ai path.
Each harness needs a credential whose authenticated principal resolves correctly through the server-derived origin logic (a control input, not caller-asserted) and lands in the right trust zone:
Crush / Pi run locally on sovereign hardware → should resolve sovereign (allowlisted in BRAIN_CAPTURE_SOVEREIGN_PRINCIPALS), so confidential capture is permitted.
LLM Council (Open WebUI) → resolve per where it runs; default us-nexus unless explicitly sovereign-allowlisted.
What to do (per harness — may split into sub-issues)
Crush: client-credential / token path; add its principal to the sovereign allowlist if appropriate.
Pi: same.
LLM Council / Open WebUI: token path via its MCP support (Open WebUI supports MCP); determine its trust zone.
Acceptance
Crush can call capture with a valid principal; trust zone correct
Pi can call capture with a valid principal; trust zone correct
LLM Council can call capture; trust zone determined + documented
Each harness's principal → origin → trust-zone mapping verified (confidential refused where us-nexus, allowed where sovereign)
BRAIN_CAPTURE_SOVEREIGN_PRINCIPALS updated for the sovereign-resident harnesses
Secret-handling respected (tokens via env/1P, never argv/logs)
**Parent epic:** #49 (capture, complete, v0.11.0) · deferred follow-up
## Scope
Define and wire OAuth2 token provisioning for the non-library, non-claude.ai harnesses so they can call the `capture` MCP relay / REST endpoint: **Crush, Pi, LLM Council (Open WebUI)**. claude.ai is already done (rides the existing Dex/`oauth/token` connector; its subject resolves to us-nexus).
## Context
`capture` shipped with the relay live for claude.ai via the existing `/mcp` OAuth connector. The other non-library harnesses need their own credential path to reach it. This is the "bounded per-harness quirk" flagged in #49 and #55 — deferred deliberately so the epic could close on the claude.ai path.
Each harness needs a credential whose authenticated principal resolves correctly through the **server-derived origin** logic (a control input, not caller-asserted) and lands in the right trust zone:
- Crush / Pi run locally on sovereign hardware → should resolve **sovereign** (allowlisted in `BRAIN_CAPTURE_SOVEREIGN_PRINCIPALS`), so confidential capture is permitted.
- LLM Council (Open WebUI) → resolve per where it runs; default us-nexus unless explicitly sovereign-allowlisted.
## What to do (per harness — may split into sub-issues)
- **Crush:** client-credential / token path; add its principal to the sovereign allowlist if appropriate.
- **Pi:** same.
- **LLM Council / Open WebUI:** token path via its MCP support (Open WebUI supports MCP); determine its trust zone.
## Acceptance
- [ ] Crush can call `capture` with a valid principal; trust zone correct
- [ ] Pi can call `capture` with a valid principal; trust zone correct
- [ ] LLM Council can call `capture`; trust zone determined + documented
- [ ] Each harness's principal → origin → trust-zone mapping verified (confidential refused where us-nexus, allowed where sovereign)
- [ ] `BRAIN_CAPTURE_SOVEREIGN_PRINCIPALS` updated for the sovereign-resident harnesses
- [ ] Secret-handling respected (tokens via env/1P, never argv/logs)
## Related
- #49 (capture epic), #55 (relay), `specs/capture-implementation-report.md` (env reference: `BRAIN_CAPTURE_SOVEREIGN_PRINCIPALS`)
- brain `decisions/gate-on-server-derived-signals-fail-safe`
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Parent epic: #49 (capture, complete, v0.11.0) · deferred follow-up
Scope
Define and wire OAuth2 token provisioning for the non-library, non-claude.ai harnesses so they can call the
captureMCP relay / REST endpoint: Crush, Pi, LLM Council (Open WebUI). claude.ai is already done (rides the existing Dex/oauth/tokenconnector; its subject resolves to us-nexus).Context
captureshipped with the relay live for claude.ai via the existing/mcpOAuth connector. The other non-library harnesses need their own credential path to reach it. This is the "bounded per-harness quirk" flagged in #49 and #55 — deferred deliberately so the epic could close on the claude.ai path.Each harness needs a credential whose authenticated principal resolves correctly through the server-derived origin logic (a control input, not caller-asserted) and lands in the right trust zone:
BRAIN_CAPTURE_SOVEREIGN_PRINCIPALS), so confidential capture is permitted.What to do (per harness — may split into sub-issues)
Acceptance
capturewith a valid principal; trust zone correctcapturewith a valid principal; trust zone correctcapture; trust zone determined + documentedBRAIN_CAPTURE_SOVEREIGN_PRINCIPALSupdated for the sovereign-resident harnessesRelated
specs/capture-implementation-report.md(env reference:BRAIN_CAPTURE_SOVEREIGN_PRINCIPALS)decisions/gate-on-server-derived-signals-fail-safe