원클릭으로
fal-runner
// Verify fal app behavior end to end: deploy aliases, test public websocket endpoints, and inspect live runners. Use when working with `fal deploy`, `fal run`, `fal runners exec`, or websocket readiness.
// Verify fal app behavior end to end: deploy aliases, test public websocket endpoints, and inspect live runners. Use when working with `fal deploy`, `fal run`, `fal runners exec`, or websocket readiness.
Test Scope locally in Livepeer mode end to end using a prebuilt `go-livepeer` artifact from the `ja/serverless` PR, `uv run --extra livepeer livepeer-runner`, and Scope. Use when the user mentions Livepeer mode, `livepeer-runner`, or local serverless testing. Pair with `testing-scope-mcp` when the test path should be driven through Scope's MCP server.
Pre-release onboarding test via Chrome browser automation. Tests the full new-user flow — provider selection, workflow picker, and streaming all three starter workflows. Use when asked to test onboarding, first-run experience, or starter workflows.
Test Daydream Scope through its stdio MCP server, including disconnected startup, `connect_to_scope`, direct Python stdio client fallback, and lightweight smoke tests. Use when testing Scope via MCP, debugging MCP registration, or when a workflow depends on `connect_to_scope`, `load_pipeline`, `start_stream`, or `capture_frame`.
| name | fal-runner |
| description | Verify fal app behavior end to end: deploy aliases, test public websocket endpoints, and inspect live runners. Use when working with `fal deploy`, `fal run`, `fal runners exec`, or websocket readiness. |
Use this skill when you need to:
Default assumptions from this repo:
uv run fal ... is the correct invocation/app/src/... files__pycache__<user>-<model>) and clean them up afterward.Check alias runners:
uv run fal apps runners <alias> --env main --json
Check public websocket readiness:
uv run python - <<'PY'
import asyncio, websockets
URL = "wss://fal.run/<team>/<alias>/ws"
async def main():
async with websockets.connect(URL) as ws:
print(await asyncio.wait_for(ws.recv(), timeout=20))
asyncio.run(main())
PY
Expected success pattern for this workflow:
{"type":"ready",...}If the websocket fails:
Use the live runner ID from fal apps runners.
Useful checks:
uv run fal runners exec <runner-id> -- sh -lc 'ps -efww'
uv run fal runners exec <runner-id> -- sh -lc 'ls -la /app/src/scope/cloud'
uv run fal runners exec <runner-id> -- sh -lc 'ls -la /app/src/scope/cloud/__pycache__'
uv run fal runners exec <runner-id> -- sh -lc 'tr "\0" "\n" </proc/1/environ | sed -n "1,160p"'
uv run fal runners exec <runner-id> -- sh -lc 'tr "\0" " " </proc/1/cmdline'
For broader artifact inspection:
uv run fal runners exec <runner-id> -- sh -lc '/usr/bin/python3.12 - <<\"PY\"
import os
for root in ["/app", "/tmp", "/root", "/local", "/alloc"]:
if not os.path.exists(root):
continue
for dirpath, dirnames, filenames in os.walk(root):
for name in filenames:
if "livepeer_fal_app" in name or "fal_app" in name:
print(os.path.join(dirpath, name))
PY'
/app/src.fal deploy does not blindly execute the file path as the runtime authority. It:
runpy.run_path(...)fal.App symbol in that module dictuv run fal ..../app/src/scope/cloud/livepeer_app.py.