coldpass

phenobarbital/ai-parrot

GitHub ↗ · How this check works

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

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

mcp-server

Works in specific setups

The recorded run passed on 1 setup. Other recorded outcomes appear below.

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

Tested on Linux
PlatformHaikuLuna
Linuxyesno

Linux / Haiku 5.5: yes · Oct 27, 2026 · 5f59e1b7b901 · claude-code / 2.1.310 (Claude Code)
Recorded operation: <guest-path> mcp --config server.yaml · local stdio MCP start + initialize + tools/list

Linux / Luna: no · Oct 27, 2026 · 5f59e1b7b901 · codex / codex-cli 0.164.0
Recorded operation: <guest-path> conf init

Does what it says
1 of 1 claims checked out
  • Start an MCP server from a YAML config: Real input produced the expected result: 'result': 5.0

    Source: parrot mcp --config server.yaml

    Input: {"tool": "CalculatorTool", "arguments": {"operation": "mean", "values": [2, 4, 9]}}

    Expected: tool result with 'result': 5.0

    Command: <guest-path> mcp --config server.yaml tools/call {"tool": "CalculatorTool", "arguments": {"operation": "mean", "values": [2, 4, 9]}}

    Observed: 'result': 5.0, 'operation': 'mean', 'metadata': {'available_operations': ['correlation', 'mean', 'median', 'std', 'derivative', 'integrate']}}"}], "isError": false}

MCP
Yes, observed
Local or hosted
local
Local: runs on your machine
Needs keys or browser
None seen
Maintained
Maintained
actively maintained: last commit 0 days ago; 13180 commits and 726 merged PRs in 90 days; 4 open issues, 10 open PRs; latest release 2026-10-27

Last commit Oct 27, 2026

Setup time
12 min 33 s
12 min 33 s to a working result
Issue
none found in confirmed setups
Examples
1 of 1 ran as expected
  • : command completed successfully

    Input: <guest-path> autonomous create --agent out/my_agent.py-checker-b6da0f48de064eadb1cfa80b57db3604

    Expected: documented command completes successfully

    Command: <guest-path> autonomous create --agent out/my_agent.py-checker-b6da0f48de064eadb1cfa80b57db3604

    Observed: deprecated and no longer needed (FEAT-462). # orchestrator.stop() flushes the final OTLP batch; an atexit hook is also # registered as a safety net for non-orchestrated exits. async def on_cleanup(_app: web.Application) -> None: await orchestrator.stop() app.on_cleanup.append(on_cleanup) return app # --------------------------------------------------------------------------- # Development entry-point # --------------------------------------------------------------------------- if __name__ == "__main__": web.run_app(create_app(), host="0.0.0.0", port=8080)

Evidence
README behavior checked
Agent interfaces
MCP, CLI (documented only)
MCP, CLI (documented only)

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

MCP context
1 tools · about 318 tokens
1 tools · about 318 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 27, 2026 on 5f59e1b7b901

Tested with
Claude Code / Haiku 5.5
  • Linux: Claude Code / Haiku 5.5 · agent 2.1.310 (Claude Code) · Checked operation passed · Oct 27, 2026 on 5f59e1b7b901

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. 224 listed items (named-host connections, static matches, dependency advisories) are below and do not change this verdict. 102 static matches retained as context.

Source contains download and execute; review its purpose. 2 distinct locations. 2 findings.

Gitleaks found a possible hardcoded secret; value withheld. 19 distinct locations. 33 findings.

OSV reports a known vulnerability in this dependency version. 16 distinct locations. 77 findings.

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
Repo repair in progress · fix-820aa0bea7c3175e5d7b

Reproduction fault owner=prerequisite: kardex executable missing

Before: phenobarbital/ai-parrot · Oct 27, 2026 · Recorded operation failed

No verified fix is published. The failed run, actual patch and fresh passing verification must be linked before a fix claim is made.

Run details

Haiku 5.5

Native agent · Checked operation passed

Checked operation <guest-path> mcp --config server.yaml · local stdio MCP start + initialize + tools/list

Agent-reported scope: Install ai-parrot from the pinned commit 5f59e1b7b9018f0075e1e7c720ac57d2aa1f3fe0 and run README CLI operations: parrot mcp --config server.yaml (MCP stdio tool call), parrot autonomous create --agent my_agent.py

MCP server returned: parrot-calc-mcp · version 1.0.0.

MCP tools returned: CalculatorTool. Tool listing does not establish authenticated tool-call success.

Run details
run
phenobarbital--ai-parrot-claude-haiku-5-5-1793145239215635606
date
Oct 27, 2026
time to working
753.0s
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.310 (Claude Code)
platform
linux
reported cost
$0.055890
Recorded source
https://github.com/phenobarbital/ai-parrot
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "5f59e1b7b9018f0075e1e7c720ac57d2aa1f3fe0", "url": "https://github.com/phenobarbital/ai-parrot"}
Test version
readme-9b11e017f7db97bd7176d7b7777c0ebe0d738342971577fffa3708ddf46e1dce
revision
5f59e1b7b9018f0075e1e7c720ac57d2aa1f3fe0
Whose fault: not assigned · pending

parrot conf init calls kardex create, which navconfig 3.0.0 (pinned in uv.lock) does not provide.

Additional warning

Step: parrot conf init (README Installation step); the command fails with exit code 2 and 'invalid choice: create'.

Safety: Review signals: 2 download and execute, 33 hardcoded secret, 77 known vulnerability. 51 static matches retained as context.

Review signals: 2 download and execute, 33 hardcoded secret, 77 known vulnerability. 51 static matches retained as context.

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

Source contains download and execute; review its purpose. 2 distinct locations. 2 findings.

Gitleaks found a possible hardcoded secret; value withheld. 19 distinct locations. 33 findings.

OSV reports a known vulnerability in this dependency version. 16 distinct locations. 77 findings.

51 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
  • Start an MCP server from a YAML config: Real input produced the expected result: 'result': 5.0

    Source: parrot mcp --config server.yaml

    Input: {"tool": "CalculatorTool", "arguments": {"operation": "mean", "values": [2, 4, 9]}}

    Expected: tool result with 'result': 5.0

    Command: <guest-path> mcp --config server.yaml tools/call {"tool": "CalculatorTool", "arguments": {"operation": "mean", "values": [2, 4, 9]}}

    Observed: 'result': 5.0, 'operation': 'mean', 'metadata': {'available_operations': ['correlation', 'mean', 'median', 'std', 'derivative', 'integrate']}}"}], "isError": false}

Examples

  • : command completed successfully

    Input: <guest-path> autonomous create --agent out/my_agent.py-checker-b6da0f48de064eadb1cfa80b57db3604

    Expected: documented command completes successfully

    Command: <guest-path> autonomous create --agent out/my_agent.py-checker-b6da0f48de064eadb1cfa80b57db3604

    Observed: deprecated and no longer needed (FEAT-462). # orchestrator.stop() flushes the final OTLP batch; an atexit hook is also # registered as a safety net for non-orchestrated exits. async def on_cleanup(_app: web.Application) -> None: await orchestrator.stop() app.on_cleanup.append(on_cleanup) return app # --------------------------------------------------------------------------- # Development entry-point # --------------------------------------------------------------------------- if __name__ == "__main__": web.run_app(create_app(), host="0.0.0.0", port=8080)

Local or hosted: local

What the agent did

Install ai-parrot from the pinned commit 5f59e1b7b9018f0075e1e7c720ac57d2aa1f3fe0 and run README CLI operations: parrot mcp --config server.yaml (MCP stdio tool call), parrot autonomous create --agent my_agent.py

cd <guest-path> && pwd && ls -la && id -u && python3 --version && (git -C . rev-parse HEAD 2>&1 | head -1) && echo "CDP=$CDP_URL" && ls /inputs 2>&1 | head
cd <guest-path> && wc -c README.md && head -c 6000 README.md
cd <guest-path> && grep -n "^## \|^### " README.md | head -80
cd <guest-path> && sed -n '/^## Installation/,/^## Running as a Server/p' README.md | head -c 7500
cd <guest-path> && sed -n '91,130p' README.md
cd <guest-path> && sed -n '234,302p' README.md
cd <guest-path> && grep -n -i "python_requires\|requires-python\|python 3\.\|Python >=\|python>=" README.md packages/ai-parrot/pyproject.toml pyproject.toml | head; sed -n '584,603p' README.md
mkdir -p <guest-path> && cd <guest-path> && (python3 -m venv <guest-path> 2>&1 || (sudo -n apt-get -o DPkg::Lock::Timeout=300 install -y python3.12-venv ><guest-path> 2>&1; python3 -m venv <guest-path>)) && <guest-path> --version && <guest-path> --version
cd <guest-path> && timeout 3000 <guest-path> install -q ai-parrot > <guest-path> 2>&1; echo "exit=$?"; tail -c 2000 <guest-path>
cd <guest-path> && sed -n '635,706p' README.md
cd <guest-path> && timeout 3000 <guest-path> install -q . > <guest-path> 2>&1; echo "exit=$?"; tail -c 1500 <guest-path>; ls <guest-path> | grep -i parrot
cd <guest-path> && sed -n '302,404p' README.md
cd <guest-path> && sed -n '545,562p' README.md; <guest-path> --help 2>&1 | head -40
cd <guest-path> && ls env && <guest-path> --help 2>&1 | tail -30
cd <guest-path> && ls -la env; sed -n '60,95p' <guest-path>
cd /tmp && grep -n "def project_root" -A25 <guest-path> | head -45
mkdir -p <guest-path> && cd <guest-path> && export SITE_ROOT=<guest-path> && <guest-path> conf init --help 2>&1 | tail -20; echo ---; <guest-path> conf init 2>&1 | tail -15; echo "exit=$?"; find <guest-path> -maxdepth 3 | head -30
ls <guest-path> | grep -i kardex; <guest-path> show kardex navconfig 2>&1 | grep -E "Name|Version|Requires"; grep -rn "kardex" <guest-path> <guest-path> | head
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && parrot conf init 2>&1 | tail -15; echo "exit=${PIPESTATUS[0]}"; find <guest-path> -maxdepth 3 | head -40
cd <guest-path> && grep -rn "navconfig" packages/ai-parrot/pyproject.toml pyproject.toml | head; grep -rn "kardex', 'create'\|\"kardex\", \"create\"\|'kardex'" packages/ai-parrot/parrot --include=*.py | head -5
cd <guest-path> && grep -n -A2 '^name = "navconfig"' uv.lock | head; grep -n -A2 '^name = "kardex"' uv.lock | head -4
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && kardex env create 2>&1 | tail -15; echo "exit=${PIPESTATUS[0]}"; find <guest-path> -maxdepth 3 | head -40
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && parrot --help 2>&1 | tail -30; echo ---; parrot mcp --help 2>&1 | tail -30
cd <guest-path> && find packages -path "*parrot/mcp*" -name "*.py" | grep -i "cli\|server" | head -20; ls packages/ai-parrot/src/parrot/mcp 2>/dev/null | head -30; grep -n "parrot.mcp.cli\|mcp.cli" -r packages/ai-parrot/src --include=*.py | head -5
cd <guest-path> && grep -n -A12 "\[project.scripts\]" packages/ai-parrot/pyproject.toml; grep -rn "parrot.mcp.cli\|mcp.cli" packages/*/pyproject.toml packages/*/src --include=*.py --include=*.toml | head
cd <guest-path> && ls cli; grep -n "add_command\<email>\|def mcp\|\"mcp\"" cli/*.py | head -40; grep -n "def \|argparse\|click" mcp/local_cli.py | head -20
cd <guest-path> && sed -n '95,135p' cli/__init__.py; sed -n '136,240p' mcp/local_cli.py | head -110
cd <guest-path> && ls -la .parrot; cat .parrot/mcp-toolkits.yaml 2>/dev/null | head -60
cd <guest-path> && sed -n '562,584p' README.md; sed -n '456,504p' README.md | head -60
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && parrot toolkits --help 2>&1 | tail -20; echo ---; cd <guest-path> && parrot mcp-local --list 2>&1 | tail -5; echo "rc=${PIPESTATUS[0]}"
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && parrot toolkits list 2>&1 | grep -v "DEBUG\|INFO" | tail -40; echo "rc=${PIPESTATUS[0]}"; parrot toolkits install --help 2>&1 | tail -15
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && parrot toolkits install memory --host claude --yes 2>&1 | grep -v "DEBUG" | tail -20; echo "rc=${PIPESTATUS[0]}"; cat .parrot/mcp-toolkits.yaml 2>/dev/null
cd <guest-path> && grep -n "class WorkingMemoryToolkit\|    async def \|    def " working_memory/tool.py 2>/dev/null | head -40 || grep -n "    async def " working_memory.py | head -30; ls | grep -i memory
cd <guest-path> && sed -n '357,375p' tool.py; sed -n '631,652p' tool.py
cd <guest-path> && sed -n '936,990p' tool.py
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | timeout 60 parrot mcp-local memory 2><guest-path> > <guest-path>; echo "rc=$?"; python3 -c "
import json,sys
for line in open('<guest-path>'):
    try: o=json.loads(line)
    except Exception: continue
    if o.get('id')==2:
        for t in o['result']['tools']: print(t['name'], json.dumps(t.get('inputSchema',{}).get('properties',{}))[:200], t.get('inputSchema',{}).get('required'))
" ; tail -3 <guest-path>
cd <guest-path> && timeout 3000 <guest-path> install -q . > <guest-path> 2>&1; echo "exit=$?"; tail -c 1500 <guest-path>
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | timeout 90 parrot mcp-local memory 2><guest-path> > <guest-path>; echo "rc=$?"; python3 -I -c "
import json
for line in open('<guest-path>'):
    try: o=json.loads(line)
    except Exception: continue
    if o.get('id')==2:
        for t in o['result']['tools']: print(t['name'], list(t.get('inputSchema',{}).get('properties',{}).keys()), t.get('inputSchema',{}).get('required'))
"; tail -c 600 <guest-path>
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"wm_store_result","arguments":{"key":"probe_note","data":"parrot-probe-7341"}}}' '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"wm_get_result","arguments":{"key":"probe_note"}}}' | timeout 90 parrot mcp-local memory 2><guest-path> | python3 -I -c "
import sys,json
for l in sys.stdin:
    try: o=json.loads(l)
    except Exception: continue
    if o.get('id') in (2,3): print(o['id'], json.dumps(o)[:900])
"
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && parrot mcp --config server.yaml ><guest-path> 2>&1; echo "mcp_rc=$?"; tail -1 <guest-path>; parrot conf init ><guest-path> 2>&1; echo "conf_rc=$?"; grep -n "invalid choice" <guest-path> | head -2; cd <guest-path> && grep -rln "\-\-once\|\-\-now\|run_once" README.md packages/ai-parrot-server/src/parrot/scheduler 2>/dev/null | head; ls packages/ai-parrot-server/src/parrot/scheduler 2>/dev/null | head -20
cd <guest-path> && grep -rn "^def schedule\|^class ScheduleType\|def schedule(" packages/*/src/parrot --include=*.py | head -5; grep -n "    async def \|    def " packages/ai-parrot-server/src/parrot/scheduler/manager.py | head -40
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && parrot autonomous --help 2>&1 | grep -v DEBUG | tail -15; parrot autonomous create --help 2>&1 | grep -v DEBUG | tail -15
cd <guest-path> && ls packages/*/src/parrot/autonomous/ packages/*/src/parrot/mcp/cli.py 2>&1 | head; ls packages/ai-parrot/src/parrot/autonomous 2>&1 | head -3
cd <guest-path> && timeout 3000 <guest-path> install -q . > <guest-path> 2>&1; echo "exit=$?"; tail -c 1200 <guest-path>; cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && parrot mcp --help 2>&1 | grep -v DEBUG | tail -12; echo ---; parrot autonomous create --help 2>&1 | grep -v DEBUG | tail -12
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && parrot mcp serve --help 2>&1 | grep -v DEBUG | tail -25; echo ---; cd <guest-path> && find packages/ai-parrot-server/src/parrot/mcp -name "*.yaml*" | head; grep -rln "server.yaml\|mcp.*yaml" packages/ai-parrot-server/src/parrot/mcp/*.py | head -5
cd <guest-path> && grep -n "yaml\|\.get(\"\|\[\"" cli.py | head -60
cd <guest-path> && sed -n '106,135p' cli.py
cd <guest-path> && printf '%s\n' 'name: parrot-memory-mcp' 'description: Parrot working memory over MCP' 'transport: stdio' 'tools:' '  - class: WorkingMemoryToolkit' '    module: parrot.tools.working_memory.tool' > server.yaml && cat server.yaml && export PATH=<guest-path> SITE_ROOT=<guest-path> && printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"store_result","arguments":{"key":"probe_note","data":"parrot-probe-7341"}}}' | timeout 120 parrot mcp --config server.yaml 2><guest-path> | head -c 1500; echo; echo "rc=${PIPESTATUS[1]}"; grep -v DEBUG <guest-path> | tail -5
cd <guest-path> && grep -n "MCPServer\|server_config\|transport\|tools" cli.py | head -40
cd <guest-path> && grep -rn "missing 'MCPServer'" packages/ | head; grep -rn "MCPServer:" packages/ai-parrot*/src --include=*.py --include=*.yaml | head -5; grep -rn "MCPServer" README.md | head -5
cd <guest-path> && sed -n 90,130p packages/ai-parrot-server/src/parrot/mcp/wrapper.py; grep -n "config" README.md | sed -n 1,20p
cd <guest-path> && sed -n 130,150p packages/ai-parrot-server/src/parrot/mcp/wrapper.py
cd <guest-path> && printf '%s\n' 'MCPServer:' '  name: parrot-memory-mcp' '  transport: stdio' '  tools:' '    - WorkingMemoryToolkit' > server.yaml && export PATH=<guest-path> SITE_ROOT=<guest-path> && printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"wm_store_result","arguments":{"key":"probe_note","data":"parrot-probe-7341"}}}' | timeout 120 parrot mcp --config server.yaml 2><guest-path> > <guest-path>; echo "rc=$?"; head -c 1200 <guest-path>; echo; grep -v DEBUG <guest-path> | tail -4
cd <guest-path> && sed -n 60,89p packages/ai-parrot-server/src/parrot/mcp/wrapper.py
cd <guest-path> && printf '%s\n' 'MCPServer:' '  name: parrot-calc-mcp' '  transport: stdio' '  tools:' '    - CalculatorTool' > server.yaml && export PATH=<guest-path> SITE_ROOT=<guest-path> && printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | timeout 120 parrot mcp --config server.yaml 2><guest-path> > <guest-path>; echo "rc=$?"; grep -o '"name": *"[^"]*"' <guest-path> | head; grep -i "error" <guest-path> | grep -v DEBUG | tail -3
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && python3 -c "import sys,json;print(json.dumps(json.loads(open('<guest-path>').read().splitlines()[-1]),indent=1)[:800])" 2>/dev/null || tail -c 900 <guest-path>
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"CalculatorTool","arguments":{"operation":"mean","values":[2,4,9]}}}' | timeout 120 parrot mcp --config server.yaml 2><guest-path> > <guest-path>; echo "rc=$?"; tail -c 700 <guest-path>
cd <guest-path> && export PATH=<guest-path> SITE_ROOT=<guest-path> && mkdir -p out && rm -f out/my_agent.py && timeout 120 parrot autonomous create --agent out/my_agent.py > <guest-path> 2>&1; echo "rc=$?"; tail -c 600 <guest-path>; echo; ls -la out/; head -c 600 out/my_agent.py 2>/dev/null
cd <guest-path> && grep -n "parrot mcp --config server.yaml\|parrot autonomous create\|parrot conf init\|Initialize configuration directory\|parrot setup\|@schedule" README.md | head -20; rm -f <guest-path>; ls -la <guest-path>; ls -la <guest-path> 2>/dev/null
mkdir -p <guest-path> && cd <guest-path> && cat > probe.json <<'EOF'
{"kind":"mcp","argv":["<guest-path>","mcp","--config","server.yaml"],"cwd":"<guest-path>","env":{"SITE_ROOT":"<guest-path>","PATH":"<guest-path>"},"tool":"CalculatorTool","arguments":{"operation":"mean","values":[2,4,9]},"expected_text":"'result': 5.0"}
EOF
cat > claims.json <<'EOF'
[{"kind":"claim","claim":"Start an MCP server from a YAML config","source":"parrot mcp --config server.yaml","input":"server.yaml with MCPServer.tools = CalculatorTool","expected":"tool result with 'result': 5.0","probe_kind":"mcp","argv":["<guest-path>","mcp","--config","server.yaml"],"tool":"CalculatorTool","arguments":{"operation":"mean","values":[2,4,9]},"expected_text":"'result': 5.0","cwd":"<guest-path>","env":{"SITE_ROOT":"<guest-path>","PATH":"<guest-path>"}}]
EOF
cat > examples.json <<'EOF'
[{"kind":"example","name":"autonomous create sample agent","argv":["<guest-path>","autonomous","create","--agent","out/my_agent.py"],"cwd":"<guest-path>","env":{"SITE_ROOT":"<guest-path>","PATH":"<guest-path>"},"output_directory":"out","expected_file":"out/my_agent.py","expected_text":"Sample AutonomousOrchestrator agent."}]
EOF
cat > cycles.json <<'EOF'
[{"kind":"cycle","name":"scheduler @schedule trigger","detected":false,"reason":"@schedule is registered via the scheduler manager and runs under aiohttp on_startup; no standalone CLI trigger was found, so no cycle was exercised."}]
EOF
cd <guest-path> && <env-var>=<guest-path> timeout 900 python3 -I <guest-path> --validate --replay > <guest-path> 2>&1; echo "rc=$?"; tail -c 2500 <guest-path>
cd <guest-path> && cat > cycles.json <<'EOF'
{"kind":"cycle","name":"scheduler @schedule trigger","detected":false,"reason":"@schedule is registered via the scheduler manager and runs under aiohttp on_startup; no standalone CLI trigger was found, so no cycle was exercised."}
EOF
cd <guest-path> && <env-var>=<guest-path> timeout 900 python3 -I <guest-path> --validate --replay > <guest-path> 2>&1; echo "rc=$?"; grep -o '"valid": *[a-z]*' <guest-path> | head -3; grep -o '"cycle_checks": \[[^]]*\]' <guest-path> | head -c 600; echo; grep -o '"outcome": "[^"]*"' <guest-path> | head -10; rm -rf <guest-path>; ls <guest-path>
cd <guest-path> && cat > report.json <<'EOF'
{
  "outcome": "partial",
  "fault_owner": "product",
  "operation": "Install ai-parrot from the pinned commit 5f59e1b7b9018f0075e1e7c720ac57d2aa1f3fe0 and run README CLI operations: parrot mcp --config server.yaml (MCP stdio tool call), parrot autonomous create --agent my_agent.py",
  "operation_scope": "Local stdio MCP server and sample-agent scaffolding in a disposable VM; README Quick Start (needs OpenAI credentials), scheduler trigger, and make test were not run.",
  "steps": [
    "Created a Python 3.12.3 venv at <guest-path> (README requires >=3.11,<3.14) and installed ai-parrot from PyPI, then ai-parrot-tools and ai-parrot-server from the pinned source with pip.",
    "Set SITE_ROOT=<guest-path> and scaffolded with kardex env create.",
    "parrot conf init failed: navconfig 3.0.0 (pinned in uv.lock) rejects 'kardex create'. Used kardex env create as a workaround.",
    "Ran parrot mcp-local memory and called wm_store_result; it returned preview parrot-probe-7341.",
    "Wrote server.yaml with an MCPServer root key and ran parrot mcp --config server.yaml. WorkingMemoryToolkit failed to load because the loader only resolves parrot.tools.<name>. CalculatorTool loaded and tools/call returned 'result': 5.0.",
    "Ran parrot autonomous create --agent out/my_agent.py; it wrote a sample agent file, verified by the checker replay.",
    "Ran the checker with --validate --replay; valid=true."
  ],
  "deviations": [
    "Used pip instead of uv for installation.",
    "parrot conf init does not work with the pinned navconfig 3.0.0; kardex env create was used instead.",
    "The --config loader cannot load WorkingMemoryToolkit (module under parrot.tools.working_memory). The memory probe used parrot mcp-local instead, and the --config claim used CalculatorTool.",
    "Did not run the README Quick Start (needs OpenAI credentials), the scheduler, or make test.",
    "The autonomous example was verified by checker replay; the checker writes it to a suffixed fresh path."
  ],
  "stuck_step": "parrot conf init (README Installation step); the command fails with exit code 2 and 'invalid choice: create'.",
  "main_blocker": "parrot conf init calls kardex create, which navconfig 3.0.0 (pinned in uv.lock) does not provide.",
  "plain_failure": "parrot conf init fails with exit 2: kardex: error: argument command: invalid choice: 'create' (choose from 'env', 'vault', 'log').",
  "suggested_fix": "Change parrot conf init to call 'kardex env create' (or pin a navconfig version that provides 'kardex create'). Fix the --config loader to resolve toolkits under subpackages such as parrot.tools.working_memory."
}
EOF
python3 -c "import json;json.load(open('report.json'));print('ok')"; ls -la <guest-path>; ls <guest-path> | head -30
Earlier attempts (1)

Luna

Native agent · Recorded operation failed

Operation / attempted scope <guest-path> conf init

Agent-reported scope: parrot conf init

Run details
run
phenobarbital--ai-parrot-gpt-6-luna-1793145467264009592
date
Oct 27, 2026
time to working
not recorded
product hosting / execution
Local command in the guest
recorded operation scope
Initialize env/ and etc/ using the README documented CLI command; Python 3.12.3 venv, core package installed from source with uv.
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/phenobarbital/ai-parrot
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "5f59e1b7b9018f0075e1e7c720ac57d2aa1f3fe0", "url": "https://github.com/phenobarbital/ai-parrot"}
Test version
readme-e6bc0b118963a378c51044fd8e2b4d5d63b3c48adce990d4ede26a3b109a1035
revision
5f59e1b7b9018f0075e1e7c720ac57d2aa1f3fe0
Current diagnosis: repo · waiting on diagnosis

Reproduction fault owner=prerequisite: kardex executable missing

Recorded action: Inspect the retained diagnosis evidence; the automatic attempt will not restart.

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

Failed run: phenobarbital/ai-parrot · Oct 27, 2026 · Recorded operation failed.

Fix: fix-820aa0bea7c3175e5d7b.

Recorded blocker / warning

Step: parrot conf init calls kardex create; installed kardex only supports env, vault, and log.

The documented configuration initialization command fails in the repository's installed dependency combination.

Safety: Review signals: 2 download and execute, 33 hardcoded secret, 77 known vulnerability. 51 static matches retained as context.

Review signals: 2 download and execute, 33 hardcoded secret, 77 known vulnerability. 51 static matches retained as context.

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

Source contains download and execute; review its purpose. 2 distinct locations. 2 findings.

Gitleaks found a possible hardcoded secret; value withheld. 19 distinct locations. 33 findings.

OSV reports a known vulnerability in this dependency version. 16 distinct locations. 77 findings.

51 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 configuration init command initializes env/ and etc/ configuration structure.: Real input produced the expected result: Error: 'kardex' command not found

    Source: Initialize configuration directory structure (env/ and etc/)

    Input: Run parrot conf init from a clean workspace

    Expected: Creates env/ and etc/ configuration structure

    Command: <guest-path> conf init

    Observed: Error: 'kardex' command not found. Please ensure kardex is installed.

Examples

  • Initialize configuration structure using the documented CLI command: command exited with code 1

    Source: README.md

    Input: parrot conf init

    Expected: env/ and etc/ directories

    Command: <guest-path> conf init

    Observed: Running kardex create to initialize configuration... Error: 'kardex' command not found. Please ensure kardex is installed.

Cycles

  • Scheduled agent task via @schedule: No provider credentials are available for the documented agent call; no local scheduler-only trigger was identified.

    Source: README.md

    Input: documented DailyBot morning_briefing task

    Expected: send_notification receives the generated briefing

    Observed: No provider credentials are available for the documented agent call; no local scheduler-only trigger was identified.

Local or hosted: local

Suggested next step (agent-reported): Update the conf init integration to use the supported kardex configuration command, or pin/install a kardex release that provides create.

What the agent did

parrot conf init

pwd; rg --files -g 'README*' -g 'pyproject.toml' -g 'package.json' -g 'Makefile' -g 'AGENTS.md' -g '*.yml' -g '*.yaml' | head -80; git status --short; python3 --version; id -u
ls -la; find . -maxdepth 3 -iname 'README*' -o -name 'AGENTS.md' -o -name 'pyproject.toml' -o -name 'package.json' -o -name 'Makefile'
cat README.md
cat AGENTS.md; cat pyproject.toml | head -80; python3 -m pip --version; command -v uv || true; ls .coldpass
uv --version; grep -nE '^(venv:|develop:|develop-fast:|install-core:|help:)' Makefile; grep -nE 'parrot conf init|Initialize configuration|Python 3.11|uv venv|uv sync' README.md
sed -n '75,95p' Makefile; sed -n '210,235p' Makefile; sed -n '1,100p' .agent/CONTEXT.md
uv venv --python 3.12 .venv
source .venv/bin/activate && make develop-fast
cargo --version; rustc --version; sed -n '1,100p' packages/navrules/pyproject.toml; grep -n 'PYTHON_VERSION\|install-core:' Makefile
sed -n '150,175p' Makefile; rustup --version; command -v rustup
source .venv/bin/activate && uv sync --frozen --no-dev --package ai-parrot --extra google --extra groq --extra openai --extra anthropic --extra vectors --extra embeddings
source .venv/bin/activate && uv sync --frozen --no-dev --package ai-parrot --extra google --extra groq --extra openai --extra anthropic --extra embeddings
grep -n '^\[project.optional-dependencies\]' packages/ai-parrot/pyproject.toml; sed -n '160,210p' packages/ai-parrot/pyproject.toml; grep -n 'conf init' packages/ai-parrot/src/parrot -R | head
sed -n '209,245p' packages/ai-parrot/pyproject.toml
source .venv/bin/activate && uv sync --frozen --no-dev --package ai-parrot
source .venv/bin/activate && parrot conf init --help
source .venv/bin/activate && parrot conf init
find .coldpass -maxdepth 2 -type f -print; sed -n '1,100p' packages/ai-parrot/src/parrot/cli/conf.py 2>/dev/null || true; find packages/ai-parrot/src/parrot -iname '*conf*' -type f | head
find packages/ai-parrot/src/parrot/cli -type f; grep -R -n 'kardex.*create\|conf init' packages/ai-parrot/src/parrot/cli
grep -R -n 'Running kardex\|kardex.*create' packages/ai-parrot/src | head
cat > .coldpass/probe.json <<'EOF'
{"kind":"cli","argv":["<guest-path>","conf","init"],"cwd":"<guest-path>","expected_returncode":2,"expected_text":"invalid choice: 'create'"}
EOF
cat > .coldpass/claims.json <<'EOF'
[{"kind":"claim","claim":"The configuration init command initializes env/ and etc/ configuration structure.","source":"Initialize configuration directory structure (env/ and etc/)","input":"Run parrot conf init from a clean workspace","expected":"Creates env/ and etc/ configuration structure","probe_kind":"cli","argv":["<guest-path>","conf","init"],"cwd":"<guest-path>","expected_returncode":2,"expected_text":"invalid choice: 'create'","testable":false,"reason":"Documented command was exercised and failed: kardex error: argument command: invalid choice: 'create' (available choices: env, vault, log)."}]
EOF
cat > .coldpass/examples.json <<'EOF'
[{"kind":"example","claim":"Initialize configuration structure using the documented CLI command","source":"README.md, Installation > Quick Setup (CLI)","input":"parrot conf init","expected":"env/ and etc/ directories","argv":["<guest-path>","conf","init"],"cwd":"<guest-path>","expected_returncode":2,"expected_text":"invalid choice: 'create'"}]
EOF
cat > .coldpass/cycles.json <<'EOF'
{"detected":true,"checks":[{"claim":"Scheduled agent task via @schedule","source":"README.md, Core Concepts > Scheduling (@schedule)","quote":"@schedule(schedule_type=ScheduleType.DAILY, hour=9, minute=0)","schedule":"daily at 09:00","method":"not run: requires agent credentials/provider and scheduler service","input":"documented DailyBot example","expected":"send_notification receives the generated briefing","kind":"cli","argv":["<guest-path>","conf","init"],"cwd":"<guest-path>","expected_text":"invalid choice: 'create'","testable":false,"reason":"The README describes the cycle only as a credentialed chatbot example; no standalone local cycle trigger can execute without provider credentials."}]}
EOF
mkdir -p .coldpass; cat > .coldpass/report.json <<'EOF'
{"outcome":"blocked","fault_owner":"repo","operation":"parrot conf init","operation_scope":"Initialize env/ and etc/ using the README documented CLI command; Python 3.12.3 venv, core package installed from source with uv.","steps":["Read README.md Installation > Core framework and Quick Setup (CLI).","Created .venv with uv venv --python 3.12 .venv (Python 3.12 is allowed by workspace metadata >=3.11,<3.14).","Attempted documented make develop-fast; dependencies built, but navrules failed because Cargo 1.75.0 cannot parse its version 4 lockfile.","Used the README's Makefile install-core recipe; it referenced undefined ai-parrot extras vectors and embeddings. Then installed core using uv sync --frozen --no-dev --package ai-parrot.","Ran documented parrot conf init; it exited 2 because it invokes kardex create and the installed kardex CLI has no create subcommand."],"deviations":["make develop-fast failed: Cargo lock file version 4 requires -Znext-lockfile-bump.","Makefile install-core recipe failed: Extra vectors and embeddings are not defined in ai-parrot optional dependencies."],"stuck_step":"parrot conf init calls kardex create; installed kardex only supports env, vault, and log.","main_blocker":"The documented configuration initialization command fails in the repository's installed dependency combination.","plain_failure":"Configuration initialization did not complete. The command asked kardex to run its unsupported create subcommand.","suggested_fix":"Update the conf init integration to use the supported kardex configuration command, or pin/install a kardex release that provides create."}
EOF
cat > .coldpass/cycles.json <<'EOF'
{"detected":true,"checks":[{"claim":"Scheduled agent task via @schedule","source":"README.md, Core Concepts > Scheduling (@schedule)","quote":"@schedule(schedule_type=ScheduleType.DAILY, hour=9, minute=0)","schedule":"daily at 09:00","method":"not executed: README example requires an LLM provider credential and scheduler runtime","input":"documented DailyBot morning_briefing task","expected":"send_notification receives the generated briefing","testable":false,"reason":"No provider credentials are available for the documented agent call; no local scheduler-only trigger was identified."}]}
EOF

<env-var>=<guest-path> python3 -I <guest-path> --validate --replay
grep -R -n 'kardex' packages/ai-parrot/pyproject.toml packages/*/pyproject.toml | head
source .venv/bin/activate && python3 -m pip install kardex
uv pip install --python .venv/bin/python kardex
grep -R -n 'kardex' requirements packages/ai-parrot/src/parrot/install | head; sed -n '1,80p' packages/ai-parrot/src/parrot/install/conf.py; cat .coldpass/probe.json
cat > .coldpass/probe.json <<'EOF'
{"kind":"cli","argv":["<guest-path>","conf","init"],"cwd":"<guest-path>","expected_returncode":1,"expected_text":"kardex' command not found"}
EOF
cat > .coldpass/claims.json <<'EOF'
[{"kind":"claim","claim":"The configuration init command initializes env/ and etc/ configuration structure.","source":"Initialize configuration directory structure (env/ and etc/)","input":"Run parrot conf init from a clean workspace","expected":"Creates env/ and etc/ configuration structure","probe_kind":"cli","argv":["<guest-path>","conf","init"],"cwd":"<guest-path>","expected_returncode":1,"expected_text":"kardex' command not found","testable":false,"reason":"The documented operation fails because the core install omits kardex; attempted uv pip install --python .venv/bin/python kardex, which failed because kardex is not found in the package registry."}]
EOF
cat > .coldpass/examples.json <<'EOF'
[{"kind":"example","claim":"Initialize configuration structure using the documented CLI command","source":"README.md","input":"parrot conf init","expected":"env/ and etc/ directories","argv":["<guest-path>","conf","init"],"cwd":"<guest-path>","expected_returncode":1,"expected_text":"kardex' command not found"}]
EOF
cat > .coldpass/cycles.json <<'EOF'
{"detected":true,"checks":[{"claim":"Scheduled agent task via @schedule","source":"README.md","quote":"@schedule(schedule_type=ScheduleType.DAILY, hour=9, minute=0)","schedule":"daily at 09:00","method":"not executed: README example requires an LLM provider credential and scheduler runtime","input":"documented DailyBot morning_briefing task","expected":"send_notification receives the generated briefing","testable":false,"reason":"No provider credentials are available for the documented agent call; no local scheduler-only trigger was identified."}]}
EOF
<env-var>=<guest-path> python3 -I <guest-path> --validate --replay
cat .coldpass/probe.json
cat > .coldpass/probe.json <<'EOF'
{"kind":"cli","argv":["<guest-path>","conf","init"],"cwd":"<guest-path>","checks":[{"check":"install","argv":["uv","pip","install","--python",".venv/bin/python","kardex"],"expected_returncode":1,"expected_text":"kardex was not found in the package registry"}]}
EOF
cat > .coldpass/claims.json <<'EOF'
[{"kind":"claim","claim":"The configuration init command initializes env/ and etc/ configuration structure.","source":"Initialize configuration directory structure (env/ and etc/)","input":"Run parrot conf init from a clean workspace","expected":"Creates env/ and etc/ configuration structure","testable":false,"reason":"Documented command invoked kardex create but replay reports kardex missing. Install attempt failed: uv pip install --python .venv/bin/python kardex; kardex was not found in the package registry."}]
EOF
cat > .coldpass/examples.json <<'EOF'
[{"kind":"example","claim":"Initialize configuration structure using the documented CLI command","source":"README.md","input":"parrot conf init","expected":"env/ and etc/ directories","reason":"Documented operation blocked because kardex executable is missing; installation attempt uv pip install --python .venv/bin/python kardex failed because the package registry has no kardex package."}]
EOF
<env-var>=<guest-path> python3 -I <guest-path> --validate --replay
cat > .coldpass/probe.json <<'EOF'
{"kind":"cli","argv":["<guest-path>","conf","init"],"cwd":"<guest-path>","expected_returncode":1,"expected_text":"Error: 'kardex' command not found"}
EOF
cat > .coldpass/claims.json <<'EOF'
[{"kind":"claim","claim":"The configuration init command initializes env/ and etc/ configuration structure.","source":"Initialize configuration directory structure (env/ and etc/)","input":"Run parrot conf init from a clean workspace","expected":"Creates env/ and etc/ configuration structure","probe_kind":"cli","argv":["<guest-path>","conf","init"],"cwd":"<guest-path>","expected_returncode":1,"expected_text":"Error: 'kardex' command not found"}]
EOF
cat > .coldpass/examples.json <<'EOF'
[{"kind":"example","claim":"Initialize configuration structure using the documented CLI command","source":"README.md","input":"parrot conf init","expected":"env/ and etc/ directories","argv":["<guest-path>","conf","init"],"cwd":"<guest-path>","expected_returncode":1,"expected_text":"Error: 'kardex' command not found"}]
EOF

<env-var>=<guest-path> python3 -I <guest-path> --validate --replay
python3 - <<'PY'
import json
p='.coldpass/report.json'
d=json.load(open(p)); d['outcome']='blocked'; d['fault_owner']='repo'; d['plain_failure']="The documented parrot conf init command did not initialize configuration. Replay shows its required kardex executable is missing; installing 'kardex' also failed because no such package is available in the configured registry."; d['steps'].append("Checker replay confirms parrot conf init exits 1 with: Error: 'kardex' command not found. A uv pip install attempt for kardex failed because the package was not found in the registry."); d['deviations'].append("Checker replay cannot prove the intended command behavior; the recorded failing invocation is preserved as genuine repository failure evidence."); json.dump(d,open(p,'w'),indent=2)
PY

No product verdict. Run record.