coldpass

kaelorlabs/smitline

GitHub ↗ · How this check works

Per-setup public labels: Linux / Haiku: Works

Static status badge · SVG · read-only JSON. Embed with ![Coldpass status](https://coldpass.dev/badge/kaelorlabs--smitline.svg).

mcp-server

Works

The recorded run passed on 1 setup.

Answers apply to each recorded setup, revision and operation. Earlier observations remain in Run details.

Tested on Linux
PlatformHaikuLuna
Linuxyes

Linux / Haiku 5.5: yes · Oct 24, 2026 · 32da3f17659f · claude-code / 2.1.300 (Claude Code)
Recorded operation: sudo -n docker exec -i smitline smitline mcp · local stdio MCP start + initialize + tools/list

Does what it says
2 of 2 claims checked out
  • Smitline exposes call tools to MCP-capable agents such as Claude Desktop: Real input produced the expected result: marin

    Source: **Works with your agent.** Claude Code, Codex, Cursor, Claude Desktop, OpenClaw, Hermes, and anything that can use MCP, a CLI or a REST API.

    Input: {"tool": "list_voices", "arguments": {}}

    Expected: the GPT-Live voice list, default marin

    Command: sudo -n docker exec -i smitline smitline mcp tools/call {"tool": "list_voices", "arguments": {}}

    Observed: marin\",\"voices\":[\"marin\",\"vesper\",\"quartz\",\"ripple\",\"willow\",\"stone\",\"gleam\",\"meridian\",\"bossa\",\"tempo\",\"beacon\",\"delta\",\"cinder\"]}"}], "structuredContent": {"default": "marin", "voices": ["marin", "vesper", "quartz", "ripple", "willow", "stone", "gleam", "meridian", "bossa", "tempo", "beacon", "delta", "cinder"]}, "isError": false}

  • Calls need your own OpenAI key; without it the brief check reports the missing key: Real input produced the expected result: openai is not configured

    Source: **Runs on your computer.** One Docker container, your own OpenAI and phone keys, open source under Apache-2.0.

    Input: {"tool": "check_call_brief", "arguments": {"channel": "phone", "to": "+14155550142", "objective": "Book a table for 4 at 7pm", "onBehalfOf": "Sam"}}

    Expected: ok false with problem 'openai is not configured'

    Command: sudo -n docker exec -i smitline smitline mcp tools/call {"tool": "check_call_brief", "arguments": {"channel": "phone", "to": "+14155550142", "objective": "Book a table for 4 at 7pm", "onBehalfOf": "Sam"}}

    Observed: openai is not configured: set OPENAI_API_KEY\"],\"carried\":0}"}], "structuredContent": {"ok": false, "brief": {"channel": "phone", "to": "+14155550142", "onBehalfOf": "Sam", "objective": "Book a table for 4 at 7pm", "mayAgreeTo": [], "mustNotShare": [], "maxMinutes": 10, "rehearsal": false}, "problems": ["Smitline calls people between 8:00 AM and 9:00 PM their time. It is 9:10 PM for +14155550142 (America/Los_Angeles). Try again later, or set afterHours to true if the user confirms this person expects a call now.", "openai is not configured: set OPENAI_API_KEY"], "carried": 0}, "isError": fal

MCP
Yes, observed
Local or hosted
local
Local: runs on your machine
Maintained
Maintained
actively maintained: last commit 2 days ago; 301 commits and 43 merged PRs in 90 days; 2 open issues, 3 open PRs; 2 of 2 recent threads got a maintainer reply, median first reply 148.2h; latest release 2026-10-22

Last commit Oct 23, 2026

Issue
none found in recorded check
Examples
1 of 1 ran as expected
  • The smitline CLI lists GPT-Live voices inside the running container: command completed successfully

    Source: README.md Prefer to set it up yourself? / docs/agents.md CLI

    Input: voices

    Expected: JSON with default marin

    Command: sudo -n docker exec smitline smitline voices

    Observed: { "default": "marin", "voices": [ "marin", "vesper", "quartz", "ripple", "willow", "stone", "gleam", "meridian", "bossa", "tempo", "beacon", "delta", "cinder" ] }

Evidence
README behavior checked
Agent interfaces
MCP
MCP

Observed interfaces were exercised by the checker. Documentation alone does not confirm compatibility.

MCP context
14 tools · about 5,508 tokens
14 tools · about 5,508 tokens

Largest returned tools/list page in these observations. Compact UTF-8 definition bytes ÷ 4, rounded up; approximate, excluding client framing and tool results. This is context size, not proof that every tool works.

Measured on linux with Haiku 5.5 · Oct 24, 2026 on 32da3f17659f

Tested with
Claude Code / Haiku 5.5
  • Linux: Claude Code / Haiku 5.5 · agent 2.1.300 (Claude Code) · Recorded pass invalidated · setup-only proof · Oct 24, 2026 on 32da3f17659f

Each entry describes its recorded operation and source revision.

Safety
No unexpected network or file activity found in these checks

No problems traced to this repository code in these checks; a short run cannot prove safety. 1 static matches retained as context.

Full event, path and process lists for each observed setup:

Repair history and test corrections
Current diagnosis: unknown · pending

native agent CLI failed: 2026-10-24T04:30:05.269948Z ERROR codex_core::mcp_tool_call: failed to parse tool call arguments: EOF while parsing an object at line 39160 column 1

Repair record fix-cd308573d2cbfb71c154 · current status JSON. Original run outcomes remain unchanged.

Run details

Haiku 5.5

Native agent · Recorded pass invalidated · setup-only proof

Operation / attempted scope sudo -n docker exec -i smitline smitline mcp · local stdio MCP start + initialize + tools/list

Agent-reported scope: Run the Smitline container from the README and call its MCP tools (list_voices works; placing a phone call needs an OpenAI key)

MCP server returned: smitline · version 0.3.0.

MCP tools returned: start_call, check_call_brief, wait_for_call, get_call, list_calls, save_call_note, list_contacts, send_call_instruction, reply_to_call_request, end_call, transfer_call_to_me, list_voices, get_profile, update_profile. Tool listing does not establish authenticated tool-call success.

Run details
run
kaelorlabs--smitline-claude-haiku-5-5-1792814787192125279
date
Oct 24, 2026
time to working
198.3s (historical recorded time; operation proof invalidated)
product hosting / execution
Local stdio MCP server in the guest
recorded operation scope
product operation
model
claude-haiku-5-5
agent / version
claude-code / 2.1.300 (Claude Code)
platform
linux
reported cost
$0.018242
Recorded source
https://github.com/kaelorlabs/smitline
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "32da3f17659fdc204b9a65c673a7335cc5af76e0", "url": "https://github.com/kaelorlabs/smitline"}
Test version
readme-bdc1b9b3c0d2673aef87e076d14084a8123ddcf09d520c1ee2e364a37c3f4bb9
revision
32da3f17659fdc204b9a65c673a7335cc5af76e0
Whose fault: prerequisite · diagnosed

No OpenAI API key (and no SignalWire/Twilio phone account) is available in this disposable guest, and I was not given credentials.

The run recorded a missing prerequisite and where it got stuck, so the pass did not exercise the product's real operations.

Recorded blocker / warning

Step: Placing a call: the brief check fails with 'openai is not configured: set OPENAI_API_KEY'

Safety: No problems traced to this repository code in these checks. 1 static matches retained as context.

No problems traced to this repository code in these checks. 1 static matches retained as context.

1 hardcoded secret matches retained as context; full list in the evidence.

OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.

A short run cannot establish that code is safe.

Connections show IP addresses; proxies can hide the final hostname.

Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.

Full safety evidence →

Answers recorded for this run
  • Smitline exposes call tools to MCP-capable agents such as Claude Desktop: Real input produced the expected result: marin

    Source: **Works with your agent.** Claude Code, Codex, Cursor, Claude Desktop, OpenClaw, Hermes, and anything that can use MCP, a CLI or a REST API.

    Input: {"tool": "list_voices", "arguments": {}}

    Expected: the GPT-Live voice list, default marin

    Command: sudo -n docker exec -i smitline smitline mcp tools/call {"tool": "list_voices", "arguments": {}}

    Observed: marin\",\"voices\":[\"marin\",\"vesper\",\"quartz\",\"ripple\",\"willow\",\"stone\",\"gleam\",\"meridian\",\"bossa\",\"tempo\",\"beacon\",\"delta\",\"cinder\"]}"}], "structuredContent": {"default": "marin", "voices": ["marin", "vesper", "quartz", "ripple", "willow", "stone", "gleam", "meridian", "bossa", "tempo", "beacon", "delta", "cinder"]}, "isError": false}

  • Calls need your own OpenAI key; without it the brief check reports the missing key: Real input produced the expected result: openai is not configured

    Source: **Runs on your computer.** One Docker container, your own OpenAI and phone keys, open source under Apache-2.0.

    Input: {"tool": "check_call_brief", "arguments": {"channel": "phone", "to": "+14155550142", "objective": "Book a table for 4 at 7pm", "onBehalfOf": "Sam"}}

    Expected: ok false with problem 'openai is not configured'

    Command: sudo -n docker exec -i smitline smitline mcp tools/call {"tool": "check_call_brief", "arguments": {"channel": "phone", "to": "+14155550142", "objective": "Book a table for 4 at 7pm", "onBehalfOf": "Sam"}}

    Observed: openai is not configured: set OPENAI_API_KEY\"],\"carried\":0}"}], "structuredContent": {"ok": false, "brief": {"channel": "phone", "to": "+14155550142", "onBehalfOf": "Sam", "objective": "Book a table for 4 at 7pm", "mayAgreeTo": [], "mustNotShare": [], "maxMinutes": 10, "rehearsal": false}, "problems": ["Smitline calls people between 8:00 AM and 9:00 PM their time. It is 9:10 PM for +14155550142 (America/Los_Angeles). Try again later, or set afterHours to true if the user confirms this person expects a call now.", "openai is not configured: set OPENAI_API_KEY"], "carried": 0}, "isError": fal

Examples

  • The smitline CLI lists GPT-Live voices inside the running container: command completed successfully

    Source: README.md Prefer to set it up yourself? / docs/agents.md CLI

    Input: voices

    Expected: JSON with default marin

    Command: sudo -n docker exec smitline smitline voices

    Observed: { "default": "marin", "voices": [ "marin", "vesper", "quartz", "ripple", "willow", "stone", "gleam", "meridian", "bossa", "tempo", "beacon", "delta", "cinder" ] }

Local or hosted: local

What the agent did

Run the Smitline container from the README and call its MCP tools (list_voices works; placing a phone call needs an OpenAI key)

cd <guest-path> && pwd && ls -la && git status 2>&1 | head -3; id -u; python3 --version; cat README.md 2>/dev/null | head -200
cd <guest-path> && which docker node npm uv 2>&1; docker --version 2>&1; ls .coldpass; sed -n 1,80p docs/development.md; echo ----; sed -n 1,60p SETUP.md; echo; ls /inputs 2>&1; cat <guest-path> >/dev/null 2>&1 && echo checker-present
sudo -n true && echo SUDO_OK; cat /etc/os-release | head -2; (sudo -n apt-get update -qq 2>&1 | tail -3); sudo -n apt-get install -y -qq docker.io 2>&1 | tail -5; which docker && docker --version
sudo -n systemctl start docker 2>&1; sleep 3; sudo -n docker info 2>&1 | head -15; echo ---; curl -sS -m 20 -o /dev/null -w '%{http_code}\n' https://ghcr.io/v2/ 2>&1; echo env: $HTTPS_PROXY $https_proxy
sudo -n docker run -d --name smitline --restart unless-stopped --network host -v smitline:/data ghcr.io/kaelorlabs/smitline 2>&1 | tail -5; sleep 15; sudo -n docker ps -a --filter name=smitline 2>&1; sudo -n docker logs --tail 30 smitline 2>&1 | tail -30
cd <guest-path> && sed -n 1,120p docs/agents.md; echo ----; curl -fsS -m 10 -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8095/calls; sudo -n docker exec smitline smitline --help 2>&1 | head -40
mkdir -p <guest-path> && cat > <guest-path> <<'EOF'
import json, subprocess, sys
argv = json.loads(sys.argv[1]); tool = sys.argv[2] if len(sys.argv) > 2 else None
args = json.loads(sys.argv[3]) if len(sys.argv) > 3 else {}
p = subprocess.Popen(argv, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
def send(m): p.stdin.write(json.dumps(m)+"\n"); p.stdin.flush()
def recv():
    while True:
        line = p.stdout.readline()
        if not line: raise SystemExit("EOF; stderr=" + p.stderr.read())
        msg = json.loads(line)
        if "id" in msg: return msg
send({"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"h","version":"1"}}})
print(json.dumps(recv().get("result",{}).get("serverInfo")))
send({"jsonrpc":"2.0","method":"notifications/initialized"})
if tool is None:
    send({"jsonrpc":"2.0","id":2,"method":"tools/list"})
    for t in recv()["result"]["tools"]: print(t["name"])
else:
    send({"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":tool,"arguments":args}})
    print(json.dumps(recv(), indent=1)[:3000])
p.stdin.close(); p.wait(timeout=20)
EOF
cd <guest-path> && timeout 120 python3 -I mcpcall.py '["sudo","-n","docker","exec","-i","smitline","smitline","mcp"]' 2>&1 | head -60
cd <guest-path> && timeout 120 python3 -I mcpcall.py '["sudo","-n","docker","exec","-i","smitline","smitline","mcp"]' list_voices '{}' 2>&1 | head -40; echo ====; timeout 120 python3 -I mcpcall.py '["sudo","-n","docker","exec","-i","smitline","smitline","mcp"]' check_call_brief '{"channel":"phone","to":"+14155550142","objective":"Book a table for 4 at 7pm","onBehalfOf":"Sam"}' 2>&1 | head -60
cd <guest-path> && grep -rniE "setInterval|cron|--once|--now|schedule|setTimeout\(.*loop|while \(true\)|for await" --include=*.mjs --include=*.js --include=*.py --include=*.ts --include=*.sh meeting-runtime packages control-panel docker start-*.sh scripts 2>/dev/null | grep -v node_modules | head -30; echo ----; cat package.json; echo; sudo -n docker exec smitline smitline voices 2>&1 | head -5
cd <guest-path> && grep -n "Works with your agent" README.md; grep -n "MCP, a CLI or a REST API" README.md | cut -c1-300; grep -n "Smitline makes the call" README.md | cut -c1-200
cd <guest-path> && mkdir -p .coldpass && cat > .coldpass/probe.json <<'EOF'
{"kind":"mcp","argv":["sudo","-n","docker","exec","-i","smitline","smitline","mcp"],"cwd":"<guest-path>","tool":"list_voices","arguments":{},"expected_text":"marin"}
EOF
cat > .coldpass/claims.json <<'EOF'
[
 {"kind":"claim","claim":"Smitline exposes call tools to MCP-capable agents such as Claude Desktop","source":"**Works with your agent.** Claude Code, Codex, Cursor, Claude Desktop, OpenClaw, Hermes, and anything that can use MCP, a CLI or a REST API.","input":"list_voices with no arguments","expected":"the GPT-Live voice list, default marin","probe_kind":"mcp","argv":["sudo","-n","docker","exec","-i","smitline","smitline","mcp"],"tool":"list_voices","arguments":{},"expected_text":"marin","cwd":"<guest-path>"},
 {"kind":"claim","claim":"Calls need your own OpenAI key; without it the brief check reports the missing key","source":"**Runs on your computer.** One Docker container, your own OpenAI and phone keys, open source under Apache-2.0.","input":"check_call_brief for a phone call with no OPENAI_API_KEY set","expected":"ok false with problem 'openai is not configured'","probe_kind":"mcp","argv":["sudo","-n","docker","exec","-i","smitline","smitline","mcp"],"tool":"check_call_brief","arguments":{"channel":"phone","to":"+14155550142","objective":"Book a table for 4 at 7pm","onBehalfOf":"Sam"},"expected_text":"openai is not configured","cwd":"<guest-path>"}
]
EOF
cat > .coldpass/examples.json <<'EOF'
[
 {"kind":"example","claim":"The smitline CLI lists GPT-Live voices inside the running container","source":"README.md Prefer to set it up yourself? / docs/agents.md CLI","input":"voices","expected":"JSON with default marin","argv":["sudo","-n","docker","exec","smitline","smitline","voices"],"cwd":"<guest-path>","env":{},"expected_text":"marin"}
]
EOF
cat > .coldpass/cycles.json <<'EOF'
{"detected":false,"reason":"Entry points inspected (start-*.sh, Dockerfile, packages/cli, meeting-runtime, control-panel). No cron, --once/--now, or product scheduler loop was found. The only setInterval calls are console UI refresh timers in control-panel/app.js and calls.js. The daemon is a request-driven HTTP/MCP server; calls are placed on demand, not on a schedule.","checks":[]}
EOF
for f in probe claims examples cycles; do python3 -I -m json.tool .coldpass/$f.json >/dev/null && echo "$f ok"; done; <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | tail -40
cd <guest-path> && sudo -n docker stop smitline >/dev/null && sudo -n docker ps -a --filter name=smitline --format '{{.Names}} {{.Status}}'; mkdir -p .coldpass && cat > .coldpass/report.json <<'EOF'
{"outcome":"needs_credentials","fault_owner":"prerequisite","operation":"Run the Smitline container from the README and call its MCP tools (list_voices works; placing a phone call needs an OpenAI key)","operation_scope":"Linux Ubuntu 24.04 guest, Docker Engine 29.1.3 installed via apt (sudo), image ghcr.io/kaelorlabs/smitline pulled from GHCR, phone-only run (no Docker socket). Not tested: placing a real phone call (needs OpenAI key plus SignalWire/Twilio account), meetings, the Node 22 npm test suite, the meeting image build.","steps":["sudo apt-get install -y docker.io (Docker prerequisite from README 'What you need'; Docker was missing, installed 29.1.3)","sudo systemctl start docker","docker run -d --name smitline --restart unless-stopped --network host -v smitline:/data ghcr.io/kaelorlabs/smitline (README 'Prefer to set it up yourself?', phone-only variant)","curl http://127.0.0.1:8095/calls returned 200","smitline mcp over stdio: tools/call list_voices returned default marin and 13 voices","smitline mcp: tools/call check_call_brief returned ok false, problem 'openai is not configured: set OPENAI_API_KEY'","docker exec smitline smitline voices returned the voice list","docker stop smitline"],"deviations":["Docker was not installed in the guest; installed docker.io via apt with sudo (the README requires Docker but the guest lacked it).","Probes use 'sudo -n docker exec' because the ubuntu user is not in the docker group.","Used the README's phone-only docker run to avoid mounting the Docker socket; the meeting option was not exercised.","Node 22 and the documented npm test and meeting-image test suite were not run; they are repo tests, not product operations.","No OpenAI key or phone provider credentials are available in this guest, so no call was placed; the README says keys go on the local setup <email>:8095, which was not completed."],"stuck_step":"Placing a call: the brief check fails with 'openai is not configured: set OPENAI_API_KEY'","main_blocker":"No OpenAI API key (and no SignalWire/Twilio phone account) is available in this disposable guest, and I was not given credentials.","plain_failure":"The Smitline app starts and its agent tools respond, but it cannot place a phone call here because it has no OpenAI key or phone account. Adding those keys on its local setup page is needed to test calls.","suggested_fix":"Provide an OpenAI key with GPT-Live access and a SignalWire or Twilio account, enter them on the setup page at http://127.0.0.1:8095 (not in chat), then rerun the check_call_brief and a real call."}
EOF
python3 -I -m json.tool .coldpass/report.json >/dev/null && echo report ok; <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | python3 -I -c "import json,sys; d=json.load(sys.stdin); print(d['valid'], d['problems'], d['replay']['status'])"
cd <guest-path> && sudo -n docker start smitline >/dev/null && sleep 12 && curl -fsS -m 10 -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8095/calls; <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | python3 -I -c "import json,sys; d=json.load(sys.stdin); print(d['valid'], d['problems'], d['replay']['status'])"
cd <guest-path> && python3 -I - <<'EOF'
import json
p='.coldpass/report.json'
r=json.load(open(p))
r['deviations'].append("The smitline container is intentionally left RUNNING after the run: the probe, claims and examples call 'docker exec smitline smitline mcp/voices', which need it up for the checker replay. Stop it with: sudo docker rm -f smitline (the console on 127.0.0.1:8095 and the stdio MCP are the only processes; they are the product's own runtime, not background processes I spawned separately).")
r['steps'].append("docker stop smitline then docker start smitline were needed because the first stop broke the checker replay; final container state: running")
json.dump(r,open(p,'w'),indent=1)
EOF
python3 -I -m json.tool .coldpass/report.json >/dev/null && echo report ok; <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | python3 -I -c "import json,sys; d=json.load(sys.stdin); print(d['valid'], d['problems'], d['replay']['status'])"; sudo -n docker ps --filter name=smitline --format '{{.Names}} {{.Status}}'; ls -la .coldpass