소스 정보
- 저장소
- TentacleOpera/switchboard
- 최근 소스 활동
- 2026년 9월 1일 12:13
- 감지된 SKILL.md 언어
- 영어
- 스타
- 214
- 포크
- 23
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/TentacleOpera/switchboard --skill switchboard명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
Remote Connections & Remote Control — drive plans via Linear, Notion, or external AI surfaces (side-by-side or away from desk)
Move kanban cards and query kanban state via scripts — most verbs require the Switchboard extension (LocalApiServer) running; move-card.js has a direct-DB fallback.
Read kanban board state via LocalApiServer read endpoints (primary) or local kanban.db SQL (fallback). Requires the extension running or a local kanban.db; unavailable in cloud or tracker-only sessions.
SKILL.md 표시 중
| name | switchboard |
| description | Start the Switchboard board and the orchestration agent — a two-step launcher |
| allowed-tools | Bash, Read, Write, Glob, Grep |
/switchboard does two things:
npx switchboard if it is not already running.Everything else — browsing the board, moving cards, managing features, improving plans, running passes — belongs to the board (open it in a browser) and the skills that own each concern. This skill is a launcher, not a console.
A port file is not liveness. .switchboard/api-server-port.txt survives a crashed
extension, and every workspace's port file holds the same port, so its presence
proves nothing about this workspace. Read the port, call GET /health, and treat
only a 200 as "a board is running".
ROOT="$PWD"
PORT_FILE="$ROOT/.switchboard/api-server-port.txt"
if [ -f "$PORT_FILE" ]; then
PORT=$(tr -d '[:space:]' < "$PORT_FILE")
HEALTH=$(curl -s -o /dev/null -w "%{http_code}" "http://127.0.0.1:$PORT/health" 2>/dev/null)
else
HEALTH="000"
PORT=""
fi
if [ "$HEALTH" = "200" ]; then
echo "Switchboard is already running (port $PORT). Using the existing board."
elif [ -n "$PORT" ]; then
# curl could not confirm liveness (returned $HEALTH), but a port file
# exists — the board may be running but unreachable from this sandbox
# (loopback blocked), or the port file may be stale (board crashed).
# FAIL SAFE: do NOT spawn a second server. Spawning overwrites the port
# file and hijacks the active session if the board IS alive. The cost of
# not spawning when the board is actually dead is recoverable (delete the
# port file and re-run); the cost of spawning when the board is alive is
# destructive (session hijack).
echo "Health check returned $HEALTH for port $PORT, but a port file exists."
echo "The board may be running but unreachable from this sandbox (loopback blocked),"
echo "or the port file may be stale (board crashed without cleanup)."
echo "Using the existing port. If the board is NOT running, delete"
echo " $PORT_FILE"
echo "and re-run /switchboard."
else
# No port file — no board was ever started (or was cleaned up). Launch.
echo "No board answering. Starting npx switchboard..."
npx switchboard &
for i in 1 2 3 4 5 6 7 8 9 10; do
sleep 1
if [ -f "$PORT_FILE" ]; then
PORT=$(tr -d '[:space:]' < "$PORT_FILE")
HEALTH=$(curl -s -o /dev/null -w "%{http_code}" "http://127.0.0.1:$PORT/health" 2>/dev/null)
if [ "$HEALTH" = "200" ]; then
echo "Switchboard is up (port $PORT). Board URL: http://127.0.0.1:$PORT"
break
fi
fi
done
if [ "$HEALTH" != "200" ]; then
echo "Switchboard did not come up within 10s. Check npx output above."
fi
fi
You are the orchestrator. Not a terminal you start — this one. Adopt the seat and run the pre-flight here, in this conversation.
PORT=$(cat "$ROOT/.switchboard/api-server-port.txt")
BASE="http://127.0.0.1:$PORT"
# SWITCHBOARD_TERMINAL is set for Switchboard-managed fleet seats. Unset elsewhere —
# send it empty rather than guessing a name.
curl -s -X POST "$BASE/mission-control/adopt" -H "Content-Type: application/json" \
-d "{\"terminalName\": \"${SWITCHBOARD_TERMINAL:-}\"}"
The response carries prompt — the pre-flight instruction. Follow it in this
session: read .agents/protocols/switchboard-mission-control/SKILL.md, run the pre-flight,
report what you find, propose a goal, and wait for the user to answer here.
POST /mission-control/adopt does not arm and seats no terminal. On the user's
confirmation, write .switchboard/orchestrator/session.md and call
POST /orchestration/confirm — that is the only call that arms.
If the response carries a note, relay it in one line: it means live turn-end notices
will arrive in .switchboard/orchestrator/reports/ rather than as prompts in this
terminal. Read that directory on each pass.
Never call POST /orchestration/start from here — that door creates a separate
Orchestrator terminal, which is the opposite of what /switchboard is for.
When asked to send a question, instruction, or relayed message to a team lead or seat:
Call POST /terminals/verb/ptySendPrompt with "kind": "message". Relaying a message to a lead is a message, not a dispatch — setting "kind": "message" suppresses the standing-orders block, seat directive block, and dispatch directives, delivering a lean message.
# Send a question or message to a lead/seat (message kind delivers text alone)
curl -s -X POST "$BASE/terminals/verb/ptySendPrompt" -H "Content-Type: application/json" \
-d "{\"name\": \"<seat>\", \"data\": \"<message>\", \"clearBeforePrompt\": false, \"kind\": \"message\"}"
When asked to clear a terminal or team terminals (e.g. "clear the team's terminals"):
Call POST /terminals/clear. Do NOT send "/clear" via ptySendPrompt (bare slash commands cannot be sent as prompt data and will be rejected).
# Clear a team's terminals (excludes caller and lead automatically; defers busy seats)
curl -s -X POST "$BASE/terminals/clear" -H "Content-Type: application/json" \
-d "{\"team\": \"<head terminal name or teamId>\", \"from\": \"${SWITCHBOARD_TERMINAL:-console}\"}"
# Clear a single seat
curl -s -X POST "$BASE/terminals/clear" -H "Content-Type: application/json" \
-d "{\"name\": \"<seat>\", \"from\": \"${SWITCHBOARD_TERMINAL:-console}\"}"
switchboard-orchestration skill documents every endpoint,
verb, and payload field. Read it for the complete contract.switchboard-contracts skill answers how the system
behaves (cards move on coding start, completion = plan-file mtime advance, etc.).