coldpass

siphon-project/pipecat-siphon

GitHub ↗ · How this check works

Per-setup public labels: Linux / Haiku: Works · Linux / Luna: Works

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

creative

Works

The recorded run passed on 2 setups.

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

Tested on Linux
PlatformHaikuLuna
Linuxyesyes

Linux / Haiku 5.5: yes · Oct 27, 2026 · 725f3f6fc757 · claude-code / 2.1.310 (Claude Code)
Recorded operation: <guest-path> examples/probe.py ws://127.0.0.1:9002/stream --seconds 6

Linux / Luna: yes · Oct 27, 2026 · 725f3f6fc757 · codex / codex-cli 0.164.0
Recorded operation: /tmp/siphon-venv/bin/python examples/probe.py ws://127.0.0.1:9001/stream --seconds 2

Does what it says
1 of 1 claims checked out
  • The echo example returns caller audio to the WebSocket client.: Real input produced the expected result: first audio frame after

    Source: `examples/echo_bot.py` is the minimum that proves the path: a WebSocket server, this serializer, and a processor that echoes the caller's audio back into the call.

    Input: The documented WebSocket probe sends a start envelope and silence to the echo server.

    Expected: The probe receives audio frames.

    Command: /tmp/siphon-venv/bin/python examples/probe.py ws://127.0.0.1:9001/stream --seconds 2

    Observed: first audio frame after 204 ms 2.0 s elapsed: 19 audio frames in, 1800 ms of audio, 0 control messages 2026-10-27 15:24:14.849 | INFO | pipecat:<module>:54 - ᓚᘏᗢ Pipecat 1.14.0 (Python 3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]) ᓚᘏᗢ

MCP
No
Local or hosted
local
Local: runs on your machine
Needs keys or browser
None seen
Maintained
Slow
slow: last commit 0 days ago; 44 commits and 35 merged PRs in 90 days; 0 open issues, 1 open PRs; 0 of 12 recent threads got a maintainer reply; latest release 2026-10-27

Last commit Oct 27, 2026

Setup time
8 min 42 s
8 min 42 s to a working result
Issue
none found in recorded check
Examples
1 of 1 ran as expected
  • Run the documented echo bot probe against the echo server.: command completed successfully

    Source: README.md, Example

    Input: ws://127.0.0.1:9001/stream; 2 seconds

    Expected: Audio frames returned by the echo bot.

    Command: /tmp/siphon-venv/bin/python examples/probe.py ws://127.0.0.1:9001/stream --seconds 2

    Observed: start sent: stream probe-1, 16000 Hz, 20 ms ptime first audio frame after 203 ms 2.0 s elapsed: 19 audio frames in, 1800 ms of audio, 0 control messages 2026-10-27 15:24:18.695 | INFO | pipecat:<module>:54 - ᓚᘏᗢ Pipecat 1.14.0 (Python 3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]) ᓚᘏᗢ

Evidence
README behavior checked
Agent interfaces
CLI
CLI

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

Tested with
Codex / Luna
  • Linux: Codex / Luna · agent codex-cli 0.164.0 · Checked operation passed · Oct 27, 2026 on 725f3f6fc757

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. 4 static matches retained as context.

Reviewed as expected for a test run: attempted writes that failed, so nothing was written.

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

Repair history and test corrections
Current diagnosis: test · harness_fix_required

<host-path> api repos/siphon-project/pipecat-siphon/commits/HEAD --jq.sha exited 1: r help, please include the request ID 9A84:1DD836:2E4ED7B:98F7A90:6AE0A6C6 and timestamp 2026-10-27 13:27:34 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) (HTTP 403)

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

Failed run: siphon-project/pipecat-siphon · Oct 27, 2026 · Our test failed; no repo verdict.

Run details

Haiku 5.5

Native agent · Checked operation passed

Checked operation <guest-path> examples/probe.py ws://127.0.0.1:9002/stream --seconds 6

Agent-reported scope: Install pipecat-siphon from the source checkout, run the echo bot WebSocket server, and stream audio to it with the documented probe client; run the documented offline test suite and lint/type checks

Run details
run
siphon-project--pipecat-siphon-claude-haiku-5-5-1793109358355778535
date
Oct 27, 2026
time to working
464.3s
product hosting / execution
Local command in the guest
recorded operation scope
product operation
model
claude-haiku-5-5
agent / version
claude-code / 2.1.310 (Claude Code)
platform
linux
reported cost
$0.016954
Recorded source
https://github.com/siphon-project/pipecat-siphon
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "725f3f6fc757dde55553e78ff224eee312f1b6bb", "url": "https://github.com/siphon-project/pipecat-siphon"}
Test version
readme-d5b140d3c0f8b95c2dd6fe6fc381a303cacb92679582c22317d8e78b572f0cf2
revision
725f3f6fc757dde55553e78ff224eee312f1b6bb
Whose fault: not assigned · resolved

Double-checks failed run: siphon-project/pipecat-siphon · Oct 27, 2026.

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

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

Reviewed as expected for a test run: attempted writes that failed, so nothing was written.

2 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
  • The echo bot accepts a media WebSocket and echoes the caller's audio back: Real input produced the expected result: audio frames in

    Source: `examples/echo_bot.py` is the minimum that proves the path: a WebSocket server, this serializer,

    Input: 6 seconds of silence streamed to ws://127.0.0.1:9002/stream by examples/probe.py

    Expected: audio frames returned by the bot

    Command: <guest-path> examples/probe.py ws://127.0.0.1:9002/stream --seconds 6

    Observed: audio frames in, 5874 ms of audio, 0 control messages 2026-10-27 14:03:06.765 | INFO | pipecat:<module>:54 - ᓚᘏᗢ Pipecat 1.14.0 (Python 3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]) ᓚᘏᗢ

Examples

  • Offline test suite from the Development section: command completed successfully

    Source: README.md Development

    Input: pytest over the whole suite

    Expected: all tests pass

    Command: <guest-path> -m pytest -q

    Observed: er` instead. from pipecat.adapters.services.open_ai_adapter import OpenAILLMInvocationParams tests/test_conversation_call_events.py: 10 warnings <guest-path> DeprecationWarning: path is deprecated. Use files() instead. Refer to https://importlib-resources.readthedocs.io/en/latest/using.html#migrating-from-legacy for migration advice. with impresources.path(package_path, model_name) as f: -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html 842 passed, 22 warnings in 39.02s

  • Lint check from the Development section: command completed successfully

    Source: README.md Development

    Input: ruff check on the repository

    Expected: no lint findings

    Command: <guest-path> check .

    Observed: All checks passed!

  • Type check from the Development section: command completed successfully

    Source: README.md Development

    Input: mypy with the project configuration

    Expected: no type errors

    Command: <guest-path>

    Observed: Success: no issues found in 59 source files

  • Echo bot example with probe client: command completed successfully

    Source: README.md Example

    Input: examples/probe.py against the running echo bot

    Expected: audio frames returned

    Command: <guest-path> examples/probe.py ws://127.0.0.1:9002/stream --seconds 6

    Observed: start sent: stream probe-1, 16000 Hz, 20 ms ptime first audio frame after 203 ms 6.0 s elapsed: 62 audio frames in, 5874 ms of audio, 0 control messages 2026-10-27 14:04:07.797 | INFO | pipecat:<module>:54 - ᓚᘏᗢ Pipecat 1.14.0 (Python 3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]) ᓚᘏᗢ

  • Integration harness: needs Docker (docker not installed in this guest); not run

    Source: README.md Integration harness

    Expected: documented command completes successfully

    Observed: needs Docker (docker not installed in this guest); not run

  • Quickstart with a real phone number: needs Docker Compose and three API keys plus a SIP account; not run

    Source: README.md Quickstart: a real phone number

    Expected: documented command completes successfully

    Observed: needs Docker Compose and three API keys plus a SIP account; not run

  • agent_bot example with STT/LLM/TTS: needs three vendor API keys and the pipecat vendor extras; not run

    Source: README.md Example

    Expected: documented command completes successfully

    Observed: needs three vendor API keys and the pipecat vendor extras; not run

Local or hosted: local

What the agent did

Install pipecat-siphon from the source checkout, run the echo bot WebSocket server, and stream audio to it with the documented probe client; run the documented offline test suite and lint/type checks

cd <guest-path> && pwd && ls -la && id -u && python3 --version && git status 2>&1 | head -3 && cat README.md | head -c 6000
cd <guest-path> && grep -n '^#' README.md | head -80; grep -n -i 'pytest\|make \|python -m\|uv \|pip install\|run' README.md | head -60
cd <guest-path> && sed -n 334,386p README.md; sed -n 536,610p README.md
cd <guest-path> && ls .coldpass examples tests src/*; python3 -m venv --help >/dev/null 2>&1 && echo VENV_OK || echo NO_VENV; which uv; echo $CDP_URL; sed -n 1,20p pyproject.toml
cd <guest-path> && python3 -m venv <guest-path> && <guest-path> -m pip install -q --upgrade pip 2>&1 | tail -3; cd <guest-path> && timeout 900 <guest-path> -m pip install -e ".[dev]" 2>&1 | tail -5
cd <guest-path> && cat examples/echo_bot.py | head -120; echo ----; head -40 examples/probe.py
cd <guest-path> && sed -n 120,200p examples/echo_bot.py; echo ----; grep -n 'add_argument\|def main\|sys.exit\|return 1\|argparse' examples/probe.py | head -30
mkdir -p <guest-path> && cd <guest-path> && (nohup <guest-path> examples/echo_bot.py --host 127.0.0.1 --port 9002 > <guest-path> 2>&1 &) ; sleep 8; cat <guest-path> | head -30; (ss -ltnp 2>/dev/null || netstat -ltnp) | grep 9002
cd <guest-path> && timeout 60 <guest-path> examples/probe.py ws://127.0.0.1:9002/stream --seconds 6 2>&1 | tail -20; echo "rc=${PIPESTATUS[0]}"
cd <guest-path> && timeout 900 <guest-path> -m pytest -q 2>&1 | tail -15; echo "pytest rc=${PIPESTATUS[0]}"
cd <guest-path> && <guest-path> check . 2>&1 | tail -3; echo "ruff rc=$?"; <guest-path> format --check . 2>&1 | tail -2; timeout 600 <guest-path> 2>&1 | tail -2; which docker || echo NO_DOCKER; grep -rn -i 'cron\|schedul\|--once\|--now\|while True\|loop' README.md examples/*.py src/pipecat_siphon/*.py | head -15; sed -n 1,25p <guest-path> | head -5
cd <guest-path> && cat > probe.json <<'EOF'
{"kind":"cli","argv":["<guest-path>","examples/probe.py","ws://127.0.0.1:9002/stream","--seconds","6"],"cwd":"<guest-path>","expected_text":"audio frames in"}
EOF
cat > claims.json <<'EOF'
[{"kind":"claim","claim":"The echo bot accepts a media WebSocket and echoes the caller's audio back","source":"`examples/echo_bot.py` is the minimum that proves the path: a WebSocket server, this serializer,","input":"6 seconds of silence streamed to ws://127.0.0.1:9002/stream by examples/probe.py","expected":"audio frames returned by the bot","probe_kind":"cli","argv":["<guest-path>","examples/probe.py","ws://127.0.0.1:9002/stream","--seconds","6"],"expected_text":"audio frames in","cwd":"<guest-path>","env":{}}]
EOF
cat > examples.json <<'EOF'
[{"kind":"example","claim":"Offline test suite from the Development section","source":"README.md Development","input":"pytest over the whole suite","expected":"all tests pass","argv":["<guest-path>","-m","pytest","-q"],"cwd":"<guest-path>","env":{},"expected_text":"842 passed"},
{"kind":"example","claim":"Lint check from the Development section","source":"README.md Development","input":"ruff check on the repository","expected":"no lint findings","argv":["<guest-path>","check","."],"cwd":"<guest-path>","env":{},"expected_text":"All checks passed!"},
{"kind":"example","claim":"Type check from the Development section","source":"README.md Development","input":"mypy with the project configuration","expected":"no type errors","argv":["<guest-path>"],"cwd":"<guest-path>","env":{},"expected_text":"Success: no issues found"},
{"kind":"example","claim":"Echo bot example with probe client","source":"README.md Example","input":"examples/probe.py against the running echo bot","expected":"audio frames returned","argv":["<guest-path>","examples/probe.py","ws://127.0.0.1:9002/stream","--seconds","6"],"cwd":"<guest-path>","env":{},"expected_text":"audio frames in"},
{"kind":"example","claim":"Integration harness","source":"README.md Integration harness","reason":"needs Docker (docker not installed in this guest); not run"},
{"kind":"example","claim":"Quickstart with a real phone number","source":"README.md Quickstart: a real phone number","reason":"needs Docker Compose and three API keys plus a SIP account; not run"},
{"kind":"example","claim":"agent_bot example with STT/LLM/TTS","source":"README.md Example","reason":"needs three vendor API keys and the pipecat vendor extras; not run"}]
EOF
cat > cycles.json <<'EOF'
{"detected":false,"reason":"Entry points inspected: examples/echo_bot.py, examples/probe.py, examples/agent_bot.py, src/pipecat_siphon/*. The package has no cron, scheduler, --once/--now flag or webhook loop. The echo bot is a long-running WebSocket server that waits for engine dials, which is idle waiting, not a product cycle. agent_bot's while-loops and scheduled callbacks need vendor API keys and were not run.","checks":[]}
EOF
ls -la <guest-path> /inputs/ 2>&1 | head; for f in probe claims examples cycles; do <guest-path> -I -c 'import json,sys;json.load(open(sys.argv[1]));print("ok")' $f.json; done
cd <guest-path> && <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | tail -60; echo "rc=${PIPESTATUS[0]}"
cd <guest-path> && cat > report.json <<'EOF'
{"outcome":"working","fault_owner":null,"operation":"Install pipecat-siphon from the source checkout, run the echo bot WebSocket server, and stream audio to it with the documented probe client; run the documented offline test suite and lint/type checks","operation_scope":"Linux guest, Python 3.12.3 (README requires 3.11+; CI tests 3.13 via uv, not used here), pipecat-ai 1.14.0 resolved by pip. No Docker, no SIP engine, no vendor API keys. Verified: serializer/bot path via echo bot + probe client, and the 842-test offline suite. Not verified: a live SIPhon engine call, the Docker integration harness, the quickstart, and the agent_bot LLM/STT/TTS chain.","steps":["python3 -m venv <guest-path>","<guest-path> -m pip install -e \".[dev]\" (in the workspace)","<guest-path> examples/echo_bot.py --host 127.0.0.1 --port 9002 (kept running as backend)","<guest-path> examples/probe.py ws://127.0.0.1:9002/stream --seconds 6 -> 62 audio frames in, 0 errors, exit 0","<guest-path> -m pytest -q -> 842 passed","<guest-path> check . -> All checks passed!","<guest-path> -> Success: no issues found in 59 source files"],"deviations":["Used a python3 -m venv at <guest-path> (Python 3.12.3) with pip install -e \".[dev]\" instead of the README's uv venv --python 3.13 .venv, because uv would need to fetch Python 3.13; the package requires only >=3.11. Invoked the venv's python -m pytest, ruff and mypy directly.","Ran echo_bot.py on port 9002 by hand as a backend service (the README example uses 9001) and left it running until guest teardown; the probe and claim replay depend on it. The checker does not start it.","integration/run.sh (README Integration harness) not run: Docker is not installed in the guest. Quickstart (docker compose) and agent_bot (needs three vendor API keys) also not run.","No browser or CDP endpoint was needed; the product is not browser-based."],"stuck_step":null,"main_blocker":null,"plain_failure":null,"suggested_fix":null}
EOF
<guest-path> -I -c 'import json;json.load(open("report.json"));print("report ok")'; ls -la <guest-path>
Earlier attempts (1)

Luna

Native agent · Checked operation passed

Checked operation /tmp/siphon-venv/bin/python examples/probe.py ws://127.0.0.1:9001/stream --seconds 2

Agent-reported scope: Run the documented echo bot and probe its WebSocket audio response

Run details
run
siphon-project--pipecat-siphon-gpt-6-luna-1793114116903031296
date
Oct 27, 2026
time to working
522.3s
product hosting / execution
Local command in the guest
recorded operation scope
product operation
model
gpt-6-luna
agent / version
codex / codex-cli 0.164.0
platform
linux
reported cost
not reported (not assumed free)
Recorded source
https://github.com/siphon-project/pipecat-siphon
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "725f3f6fc757dde55553e78ff224eee312f1b6bb", "url": "https://github.com/siphon-project/pipecat-siphon"}
Test version
readme-38e6b13f3b13804effb95797e3466b1a1334da7a232d897cbc8965867f802605
revision
725f3f6fc757dde55553e78ff224eee312f1b6bb
Whose fault: not assigned · resolved

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

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

Reviewed as expected for a test run: attempted writes that failed, so nothing was written.

2 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
  • The echo example returns caller audio to the WebSocket client.: Real input produced the expected result: first audio frame after

    Source: `examples/echo_bot.py` is the minimum that proves the path: a WebSocket server, this serializer, and a processor that echoes the caller's audio back into the call.

    Input: The documented WebSocket probe sends a start envelope and silence to the echo server.

    Expected: The probe receives audio frames.

    Command: /tmp/siphon-venv/bin/python examples/probe.py ws://127.0.0.1:9001/stream --seconds 2

    Observed: first audio frame after 204 ms 2.0 s elapsed: 19 audio frames in, 1800 ms of audio, 0 control messages 2026-10-27 15:24:14.849 | INFO | pipecat:<module>:54 - ᓚᘏᗢ Pipecat 1.14.0 (Python 3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]) ᓚᘏᗢ

Examples

  • Run the documented echo bot probe against the echo server.: command completed successfully

    Source: README.md, Example

    Input: ws://127.0.0.1:9001/stream; 2 seconds

    Expected: Audio frames returned by the echo bot.

    Command: /tmp/siphon-venv/bin/python examples/probe.py ws://127.0.0.1:9001/stream --seconds 2

    Observed: start sent: stream probe-1, 16000 Hz, 20 ms ptime first audio frame after 203 ms 2.0 s elapsed: 19 audio frames in, 1800 ms of audio, 0 control messages 2026-10-27 15:24:18.695 | INFO | pipecat:<module>:54 - ᓚᘏᗢ Pipecat 1.14.0 (Python 3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]) ᓚᘏᗢ

Local or hosted: local

What the agent did

Run the documented echo bot and probe its WebSocket audio response

pwd; id -u; python3 --version; rg --files -g 'README*' -g 'pyproject.toml' -g 'package.json' -g 'Makefile' -g 'AGENTS.md' -g '.github/workflows/**' | head -80
ls -la; find . -maxdepth 3 -type f | head -100
sed -n '1,240p' README.md
sed -n '240,520p' README.md
tail -80 README.md; cat pyproject.toml; python3 -m pip --version; python3 -m venv --help >/dev/null; ls -la .coldpass
python3 -m venv /tmp/siphon-venv && /tmp/siphon-venv/bin/pip install -e '.[dev]'
sed -n '1,100p' examples/probe.py; sed -n '1,100p' examples/echo_bot.py; sed -n '1,100p' .github/workflows/ci.yaml
sed -n '100,220p' examples/probe.py; sed -n '100,240p' examples/echo_bot.py
cd <guest-path> && /tmp/siphon-venv/bin/python examples/echo_bot.py --host 127.0.0.1 --port 9001
cd <guest-path> && nohup /tmp/siphon-venv/bin/python examples/echo_bot.py --host 127.0.0.1 --port 9001 >/tmp/siphon-echo.log 2>&1 </dev/null &
cd <guest-path> && /tmp/siphon-venv/bin/python examples/probe.py ws://127.0.0.1:9001/stream --seconds 2
mkdir -p .coldpass; cat > .coldpass/probe.json <<'EOF'
{"kind":"cli","argv":["/tmp/siphon-venv/bin/python","examples/probe.py","ws://127.0.0.1:9001/stream","--seconds","2"],"cwd":"<guest-path>","expected_text":"first audio frame after"}
EOF
cat > .coldpass/claims.json <<'EOF'
[{"kind":"claim","claim":"The echo example returns caller audio to the WebSocket client.","source":"`examples/echo_bot.py` is the minimum that proves the path: a WebSocket server, this serializer,\nand a processor that echoes the caller's audio back into the call.","input":"The documented WebSocket probe sends a start envelope and silence to the echo server.","expected":"The probe receives audio frames.","probe_kind":"cli","argv":["/tmp/siphon-venv/bin/python","examples/probe.py","ws://127.0.0.1:9001/stream","--seconds","2"],"expected_text":"first audio frame after","cwd":"<guest-path>"}]
EOF
cat > .coldpass/examples.json <<'EOF'
[{"kind":"example","claim":"Run the documented echo bot probe against the echo server.","source":"README.md, Example","input":"ws://127.0.0.1:9001/stream; 2 seconds","expected":"Audio frames returned by the echo bot.","argv":["/tmp/siphon-venv/bin/python","examples/probe.py","ws://127.0.0.1:9001/stream","--seconds","2"],"cwd":"<guest-path>","expected_text":"first audio frame after"}]
EOF
cat > .coldpass/cycles.json <<'EOF'
{"detected":false,"reason":"README and examples inspected: this package is a WebSocket serializer and the echo example is event driven; it documents no scheduler or recurring cycle.","checks":[]}
EOF
<env-var>=<guest-path> python3 -I <guest-path> --validate --replay
cat > .coldpass/report.json <<'EOF'
{"outcome":"working","fault_owner":null,"operation":"Run the documented echo bot and probe its WebSocket audio response","operation_scope":"Python 3.12.3 with the README-supported Python >=3.11; editable install with the documented development dependencies","steps":["Created /tmp/siphon-venv and installed the project with pip install -e '.[dev]'.","Started examples/echo_bot.py on 127.0.0.1:9001.","Ran examples/probe.py against ws://127.0.0.1:9001/stream for 2 seconds; received audio starting after about 203 ms, with 19 audio frames."],"deviations":["The echo server is long-running and exceeded the exec attempt ceiling when invoked in the foreground, so it was started with nohup for finite client probes."],"stuck_step":null,"main_blocker":null,"plain_failure":null,"suggested_fix":null}
EOF

No product verdict. Run record.