Connect to Conductor (agent one-shot)¶
Public instructions for agents with lab access (Bitwarden/bws, secret-gate, or SSH to konstant).
Never put the auth token value in chat, commits, or vault notes.
Live page: https://conductor-konstant.hectorsanchez.eu/connect
Raw markdown: https://conductor-konstant.hectorsanchez.eu/connect.md
What this is¶
Conductor is a governed instruction compiler on konstant-server.
It compiles guardrail packs from a multi-line org corpus (Portfolio, Product, Software, Editorial, Services, Operate) using workflow × inventory × role. See repo docs/org-map-model.md.
Agents call it before planning or performing work. Consult tools return a versioned conversation-response envelope.
Preflight tools (deterministic — call before consult):
list_business_lines()— in-scope lineslist_stages(business_line)— stages + inventory nameslist_inventories(business_line, stage)— option ids to bindlist_roles(business_line?)— roles + toolingdescribe_handoffs()— cross-line handoffsvalidate_consult_request(...)— gate; usesuggested_messagewhenok: true
text
list_* / describe_handoffs → fill bindings
validate_consult_request → ok:true
start_conversation(suggested_message)
Consult tools (read-only corpus):
start_conversation(message)— open a threadfollow_up(thread_id, message)— continue a thread
Proposal tools (corpus changes only, GitHub-gated):
submit_proposal(...)— open aconductor-proposalissue onhector-sanchez-eu/conductor(no corpus write)get_proposal_status(issue_or_prop)— open/closed, approval evidence, linked PRsimplement_approved_proposal(issue_or_prop, patch_plan_json, ...)— after approval, apply allowlisted paths and open a PR (never merges)
OpenCode Go and the GitHub token stay server-side. Clients only need the MCP auth token.
No Platform Control mutation tools in this eval slice. Workspace/AGENTS.md outside this repo are out of scope.
Corpus change sequence¶
text
1. submit_proposal → GitHub issue (label conductor-proposal, PROP-…)
2. Hector comments exactly one line on that issue:
Conductor-Approval: approve
3. implement_approved_proposal with patch_plan_json
→ branch proposal/PROP-… + PR (Fixes #N). No auto-merge.
Labels or body edits alone are not approval. Only the exact comment line from an allowlisted GitHub login (CONDUCTOR_APPROVER_GITHUB_LOGINS, default sdhector).
patch_plan_json is a JSON array of {"path":"corpus/...","content":"..."}. Paths must stay under corpus/ (schemas/ only if allow_schemas=true and the proposal acceptance covers it).
Endpoints¶
| Purpose | URL |
|---|---|
| MCP | https://conductor-konstant.hectorsanchez.eu/mcp |
| Health | https://conductor-konstant.hectorsanchez.eu/health |
| Docs (MkDocs) | https://conductor-docs.hectorsanchez.eu |
| This guide | https://conductor-konstant.hectorsanchez.eu/connect |
| Raw markdown | https://conductor-konstant.hectorsanchez.eu/connect.md |
Auth on /mcp: Authorization: Bearer <token> or ?key=<token>.
/health, /connect, and /connect.md are unauthenticated.
Secret¶
- Bitwarden Secrets Manager key name:
CONDUCTOR_MCP_AUTH_TOKEN - Host file (fallback):
/srv/apps/conductor/shared/.envon konstant (CONDUCTOR_MCP_AUTH_TOKEN=…)
Do not echo the value into agent transcripts when avoidable; use it only to configure the client or a local env var.
Retrieve the secret (first that works)¶
A — Windows PowerShell + secret-gate (this lab PC)¶
powershell
. "D:\Workspace\_repos\tools\secret-gate\secret-gate.ps1"
$token = ((bws secret list | ConvertFrom-Json) | Where-Object { $_.key -eq "CONDUCTOR_MCP_AUTH_TOKEN" }).value
if (-not $token) { throw "CONDUCTOR_MCP_AUTH_TOKEN not found" }
Write-Host "got CONDUCTOR_MCP_AUTH_TOKEN (len=$($token.Length))"
Cached session path: $env:LOCALAPPDATA\secret-gate\session.json (BW_SESSION, BWS_ACCESS_TOKEN).
B — Linux bws (EliteBook / VPS-style)¶
bash
export PATH="$HOME/.local/bin:$PATH"
source ~/.local/state/secret-gate/session.env 2>/dev/null || true
KEY=$(bws secret list -o json | python3 -c '
import json,sys
wanted="CONDUCTOR_MCP_AUTH_TOKEN"
for s in json.load(sys.stdin):
if s.get("key")==wanted:
print(s.get("value",""))
break
')
test -n "$KEY" && echo "got CONDUCTOR_MCP_AUTH_TOKEN (len=${#KEY})"
If the session is cold, run secret-gate / Bitwarden unlock first (see konstant-server runbooks/02-bitwarden.md), then retry B.
C — SSH fallback (konstant)¶
bash
KEY=$(ssh konstant-deploy 'grep ^CONDUCTOR_MCP_AUTH_TOKEN= /srv/apps/conductor/shared/.env | cut -d= -f2-')
test -n "$KEY" && echo "got key via ssh (len=${#KEY})"
Requires ssh konstant-deploy (Tailscale 100.80.164.32, user deploy). See konstant-server runbooks/00-connect-from-any-machine.md.
If Bitwarden secret missing¶
- Read value via SSH (C) once.
- Create/update SM secret named
CONDUCTOR_MCP_AUTH_TOKEN. - Prefer Bitwarden going forward — do not commit the value.
Configure clients¶
Cursor / opencode (Bearer or query key)¶
json
{
"mcpServers": {
"conductor": {
"url": "https://conductor-konstant.hectorsanchez.eu/mcp",
"headers": {
"Authorization": "Bearer <CONDUCTOR_MCP_AUTH_TOKEN>"
}
}
}
}
ChatGPT-style query auth (no custom headers):
text
https://conductor-konstant.hectorsanchez.eu/mcp?key=<CONDUCTOR_MCP_AUTH_TOKEN>
Smoke (must pass)¶
```bash export MCP_BASE="https://conductor-konstant.hectorsanchez.eu"
KEY from A/B/C above — do not paste into chat¶
curl -fsS "$MCP_BASE/health" curl -fsS "$MCP_BASE/connect.md" | head curl -sS -o /dev/null -w "%{http_code}\n" "$MCP_BASE/mcp" # expect 401 without auth curl -sS -X POST "$MCP_BASE/mcp" \ -H "Authorization: Bearer $KEY" \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -H "MCP-Protocol-Version: 2025-03-26" \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"connect-smoke","version":"0.0.1"}}}' ```
Expect: initialize instructions mention /connect, preflight tools, consult tools, and proposal tools; then tools/list shows list_business_lines, list_stages, list_inventories, list_roles, describe_handoffs, validate_consult_request, start_conversation, follow_up, submit_proposal, get_proposal_status, implement_approved_proposal.
If public DNS fails on the agent host, use Tailscale Funnel with Host header:
bash
curl -fsS -H 'Host: conductor-konstant.hectorsanchez.eu' \
https://konstant-server.tail64860f.ts.net/health
After connect¶
- Preflight:
list_*/validate_consult_requestuntilok: true. - Call
start_conversationwithsuggested_message(or a clear work intent). - Continue with
follow_upusing the returnedthread.id. - Treat consult envelopes as guidance only: do not treat LLM output as mutation authority.
- For corpus feedback:
submit_proposal→ wait for Hector's approval comment →implement_approved_proposal.
Docs site¶
Evaluate the org model and full corpus mirror at https://conductor-docs.hectorsanchez.eu (MkDocs on konstant). Deploy: deploy/install-conductor-docs-konstant.sh. DNS/TLS one-time steps in deploy/README.md.
References¶
| Ref | Where |
|---|---|
| Source repo | https://github.com/hector-sanchez-eu/conductor (private) |
| Tracking issue | https://github.com/hector-sanchez-eu/conductor/issues/1 |
| Konstant runbook | https://github.com/hector-sanchez-eu/konstant-server → runbooks/12-conductor-konstant.md |
| SSH handoff | konstant-server runbooks/00-connect-from-any-machine.md |
| Bitwarden | konstant-server runbooks/02-bitwarden.md |
| Workspace secret-gate | D:\Workspace\_repos\tools\secret-gate\secret-gate.ps1 |