# Testing Guide This guide gives concrete commands you can run to verify the current Python implementation feature by feature. All commands below assume you are inside: ```bash cd /path/to/claw-code-agent ``` ## 1. Environment Setup ### 1.1 Start `vLLM` with Qwen3-Coder ```bash python -m vllm.entrypoints.openai.api_server \ --model Qwen/Qwen3-Coder-30B-A3B-Instruct \ --host 127.0.0.1 \ --port 8000 \ --enable-auto-tool-choice \ --tool-call-parser qwen3_xml ``` Verify the server: ```bash curl http://127.0.0.1:8000/v1/models ``` Set the runtime environment: ```bash export OPENAI_BASE_URL=http://127.0.0.1:8000/v1 export OPENAI_API_KEY=local-token export OPENAI_MODEL=Qwen/Qwen3-Coder-30B-A3B-Instruct ``` ### 1.2 Run the unit test suite ```bash python3 -m unittest discover -s tests -v ``` ## 2. Installation And Basic Usage ### 2.1 Editable install ```bash pip install -e . ``` ### 2.2 Show CLI help ```bash python3 -m src.main --help python3 -m src.main agent --help python3 -m src.main agent-bg --help python3 -m src.main agent-ps --help python3 -m src.main agent-chat --help python3 -m src.main agent-resume --help ``` ### 2.3 Run the packaged entrypoint ```bash claw-code-agent agent "/help" ``` ## 3. Slash Commands These are handled locally and do not require the model to answer. ```bash python3 -m src.main agent "/help" python3 -m src.main agent "/commands" python3 -m src.main agent "/context" --cwd .. python3 -m src.main agent "/context-raw" --cwd .. python3 -m src.main agent "/plan" --cwd .. python3 -m src.main agent "/prompt" --cwd .. python3 -m src.main agent "/permissions" --cwd .. python3 -m src.main agent "/hooks" --cwd .. python3 -m src.main agent "/policy" --cwd .. python3 -m src.main agent "/trust" --cwd .. python3 -m src.main agent "/tools" --cwd .. python3 -m src.main agent "/memory" --cwd .. python3 -m src.main agent "/status" --cwd .. python3 -m src.main agent "/clear" --cwd .. ``` ## 4. Context And Prompt Inspection ### 4.1 System prompt rendering ```bash python3 -m src.main agent-prompt --cwd .. ``` ### 4.2 Context usage accounting ```bash python3 -m src.main agent-context --cwd .. ``` ### 4.3 Raw context snapshot ```bash python3 -m src.main agent-context-raw --cwd .. ``` ### 4.4 Additional working directories ```bash python3 -m src.main agent-context --cwd .. --add-dir /path/to/directory ``` ### 4.5 Disable `CLAUDE.md` discovery ```bash python3 -m src.main agent-context --cwd .. --disable-claude-md ``` ### 4.6 Hook/policy context and trust inspection Create a local policy file: ```bash mkdir -p ./test_cases cat > ./test_cases/.claw-policy.json <<'EOF' { "trusted": false, "managedSettings": { "reviewMode": "strict" }, "safeEnv": ["HOOK_SAFE_TOKEN"], "hooks": { "beforePrompt": ["Respect workspace policy before acting."], "afterTurn": ["Persist the policy decision after each turn."], "beforeTool": { "read_file": ["Validate the path before reading."] } } } EOF export HOOK_SAFE_TOKEN=demo-secret ``` Inspect the runtime view: ```bash python3 -m src.main agent "/hooks" --cwd ./test_cases python3 -m src.main agent "/trust" --cwd ./test_cases python3 -m src.main agent "/permissions" --cwd ./test_cases python3 -m src.main agent "/tools" --cwd ./test_cases python3 -m src.main agent-context-raw --cwd ./test_cases python3 -m src.main agent-prompt --cwd ./test_cases ``` ### 4.7 Safe environment values in shell tools ```bash python3 -m src.main agent \ "Run bash and print HOOK_SAFE_TOKEN, then explain where it came from." \ --cwd ./test_cases \ --allow-shell \ --show-transcript ``` ### 4.8 Plan runtime context and prompt inspection ```bash python3 -m src.main agent \ "Use update_plan to store a two-step plan for inspecting and editing the workspace." \ --cwd ./test_cases \ --allow-write \ --show-transcript python3 -m src.main agent "/plan" --cwd ./test_cases python3 -m src.main agent "/tasks" --cwd ./test_cases python3 -m src.main agent-context-raw --cwd ./test_cases python3 -m src.main agent-prompt --cwd ./test_cases ``` ## 5. Core Agent Loop ### 5.1 Read-only run ```bash python3 -m src.main agent \ "Read claw-code-agent/src/agent_runtime.py and summarize how the loop works." \ --cwd .. ``` ### 5.2 Show transcript output ```bash python3 -m src.main agent \ "Read claw-code-agent/src/agent_session.py and summarize the session model." \ --cwd .. \ --show-transcript ``` ### 5.3 Streaming model responses ```bash python3 -m src.main agent \ "Inspect the current repository and summarize the architecture." \ --cwd .. \ --stream \ --show-transcript ``` ### 5.4 Interactive chat loop ```bash python3 -m src.main agent-chat --cwd .. ``` Optional first prompt: ```bash python3 -m src.main agent-chat \ "Inspect the repository and tell me where the runtime loop lives." \ --cwd .. ``` Inside chat mode: - type normal prompts to continue the same session - use `/exit` or `/quit` to leave ### 5.5 Resume directly into chat mode ```bash python3 -m src.main agent-chat \ --resume-session-id \ --cwd .. ``` ## 6. Tool Execution ### 6.1 Read files ```bash python3 -m src.main agent \ "Read claw-code-agent/src/agent_tools.py and summarize each tool." \ --cwd .. ``` ### 6.2 Write files ```bash python3 -m src.main agent \ "Create TEST_WRITE.md in the current directory with one line: write test ok" \ --cwd ./test_cases \ --allow-write ``` ### 6.3 Edit files ```bash python3 -m src.main agent \ "Create demo.txt with 'hello world', then replace 'world' with 'agent'." \ --cwd ./test_cases \ --allow-write ``` ### 6.4 Glob and grep ```bash python3 -m src.main agent \ "Find Python files in the current directory, then search for 'LocalCodingAgent' and summarize the matches." \ --cwd .. ``` ### 6.5 Shell commands ```bash python3 -m src.main agent \ "Run pwd and ls in the current working directory, then summarize the result." \ --cwd .. \ --allow-shell \ --show-transcript ``` ### 6.6 Unsafe shell mode Use only if you intentionally want destructive-shell permission enabled. ```bash python3 -m src.main agent \ "Explain whether destructive shell commands are currently allowed." \ --cwd .. \ --allow-shell \ --unsafe ``` ### 6.7 Hook/policy tool blocking Update the policy to block `bash`: ```bash cat > ./test_cases/.claw-policy.json <<'EOF' { "trusted": false, "denyTools": ["bash"], "hooks": { "beforePrompt": ["Respect workspace policy before acting."], "afterTurn": ["Persist the policy decision after each turn."] } } EOF ``` Then test the block: ```bash python3 -m src.main agent \ "Try to run bash and then explain what was blocked." \ --cwd ./test_cases \ --allow-shell \ --show-transcript ``` Look for: - `hook_policy_tool_block` - `tool_permission_denial` - `plugin_tool_runtime` messages that now also include hook/policy guidance when present ### 6.8 Plan tools ```bash python3 -m src.main agent \ "Use update_plan to store these steps: inspect the repository, implement the change, run verification. Mark the first step in_progress and sync the plan to tasks." \ --cwd ./test_cases \ --allow-write \ --show-transcript python3 -m src.main agent "/plan" --cwd ./test_cases python3 -m src.main agent "/tasks" --cwd ./test_cases ``` ## 7. Session Persistence And Resume ### 7.1 Create a saved session ```bash python3 -m src.main agent \ "Create a short TODO file in the current directory and explain what you wrote." \ --cwd ./test_cases \ --allow-write ``` At the end of the run, note: ```text session_id=... session_path=... ``` ### 7.2 Resume a saved session ```bash python3 -m src.main agent-resume \ \ "Continue the previous task and improve the file." \ --allow-write \ --show-transcript ``` ### 7.3 Inspect saved sessions ```bash ls -lt .port_sessions/agent ``` ## 8. Background Sessions ### 8.1 Launch a background session Use a local slash-command prompt first so you can verify the background workflow without depending on the model backend: ```bash python3 -m src.main agent-bg "/help" --cwd ./test_cases ``` This prints: - `background_id=...` - `pid=...` - `log_path=...` - `record_path=...` ### 8.2 List background sessions ```bash python3 -m src.main agent-ps ``` ### 8.3 Read background logs ```bash python3 -m src.main agent-logs python3 -m src.main agent-logs --tail 40 ``` ### 8.4 Attach to the current output snapshot ```bash python3 -m src.main agent-attach python3 -m src.main agent-attach --tail 40 ``` ### 8.5 Kill a running background session ```bash python3 -m src.main agent-kill ``` ## 9. Structured Output / JSON Schema Create a schema file: ```bash cat > /tmp/claw_schema.json <<'EOF' { "type": "object", "properties": { "status": { "type": "string" }, "summary": { "type": "string" } }, "required": ["status", "summary"], "additionalProperties": false } EOF ``` Run the agent with schema mode: ```bash python3 -m src.main agent \ "Inspect the current repository and respond in the requested JSON format." \ --cwd .. \ --response-schema-file /tmp/claw_schema.json \ --response-schema-name claw_summary \ --response-schema-strict ``` ## 10. Budgets And Limits ### 10.1 Total token budget ```bash python3 -m src.main agent \ "Give a very long answer about the current repository." \ --cwd .. \ --max-total-tokens 50 ``` ### 10.2 Input / output token budgets ```bash python3 -m src.main agent \ "Read several files and explain them in detail." \ --cwd .. \ --max-input-tokens 80 \ --max-output-tokens 80 ``` ### 10.3 Reasoning-token budget ```bash python3 -m src.main agent \ "Solve a multi-step task and explain the result." \ --cwd .. \ --max-reasoning-tokens 10 ``` ### 10.4 Tool-call budget ```bash python3 -m src.main agent \ "Read multiple files, search for symbols, and summarize the repo." \ --cwd .. \ --max-tool-calls 1 ``` ### 10.5 Delegated-task budget ```bash python3 -m src.main agent \ "Delegate two subtasks to inspect and summarize the repo." \ --cwd .. \ --max-delegated-tasks 1 ``` ### 10.6 Cost budget ```bash python3 -m src.main agent \ "Inspect the current repository and summarize it." \ --cwd .. \ --input-cost-per-million 0.15 \ --output-cost-per-million 0.60 \ --max-budget-usd 0.000001 ``` ### 10.7 Model-call budget ```bash python3 -m src.main agent \ "Continue inspecting the repository until you are done." \ --cwd .. \ --max-model-calls 1 ``` ### 10.8 Session-turn budget ```bash python3 -m src.main agent \ "Work through the repository across multiple turns and keep going." \ --cwd .. \ --max-session-turns 1 ``` ### 10.9 Budget overrides from local policy ```bash cat > ./test_cases/.claw-policy.json <<'EOF' { "budget": { "max_model_calls": 0 } } EOF python3 -m src.main agent \ "Say hello once." \ --cwd ./test_cases ``` Expected result: the run stops with a model-call budget exceeded message even though you did not pass `--max-model-calls` on the CLI. ## 11. Streaming, Continuation, And Context Reduction ### 11.1 Streaming assistant output ```bash python3 -m src.main agent \ "Produce a long explanation of the current repository architecture." \ --cwd .. \ --stream \ --show-transcript ``` ### 11.2 Automatic continuation after truncation Use a small output budget so the backend is more likely to stop early: ```bash python3 -m src.main agent \ "Write a long, structured explanation of the current repository." \ --cwd .. \ --max-output-tokens 32 \ --show-transcript ``` ### 11.3 Snipping older context ```bash python3 -m src.main agent \ "Read claw-code-agent/src/agent_runtime.py, claw-code-agent/src/agent_session.py, claw-code-agent/src/query_engine.py, and claw-code-agent/src/plugin_runtime.py, then summarize all of them in detail." \ --cwd .. \ --auto-snip-threshold 120 \ --compact-preserve-messages 0 \ --show-transcript ``` ### 11.4 Compaction boundaries ```bash python3 -m src.main agent \ "Read several large files from claw-code-agent/src and keep explaining the repository until the context gets compacted." \ --cwd .. \ --auto-compact-threshold 120 \ --compact-preserve-messages 1 \ --show-transcript ``` ## 12. File History Replay ### 12.1 Create file history ```bash python3 -m src.main agent \ "Create notes.txt with one line, then update that line to mention file history." \ --cwd ./test_cases \ --allow-write ``` ### 12.2 Resume and inspect replay ```bash python3 -m src.main agent-resume \ \ "Continue the previous work and tell me what files were changed before this turn." \ --allow-write \ --show-transcript ``` Look for `file_history_replay` messages in the transcript. ## 13. Nested Delegation ### 13.1 Basic delegated subtask ```bash python3 -m src.main agent \ "Delegate a subtask to inspect claw-code-agent/src/agent_runtime.py and return the summary." \ --cwd .. \ --show-transcript ``` ### 13.2 Multiple delegated subtasks ```bash python3 -m src.main agent \ "Delegate one subtask to scan the repository and another to summarize it after the scan." \ --cwd .. \ --show-transcript ``` ### 13.3 Resume a delegated child session 1. Seed a normal saved session: ```bash python3 -m src.main agent \ "Inspect claw-code-agent/src/agent_tools.py and give a short summary." \ --cwd .. ``` 2. Copy that `session_id`, then run: ```bash python3 -m src.main agent \ "Delegate a subtask that resumes session and continues it." \ --cwd .. \ --show-transcript ``` ### 13.4 Topological dependency batches ```bash python3 -m src.main agent \ "Delegate two subtasks: one named scan, and one named summarize that depends on scan. Use topological batching and then return the final summary." \ --cwd .. \ --show-transcript ``` Look for: - `delegate_batch_result` - `delegate_group_result` - `batch_index=...` ## 14. Plugin Runtime Create a local plugin manifest: ```bash mkdir -p ./test_cases/plugins/demo cat > ./test_cases/plugins/demo/plugin.json <<'EOF' { "name": "demo-plugin", "hooks": { "beforePrompt": "Inject plugin prompt guidance.", "afterTurn": "Attach plugin after-turn guidance.", "onResume": "Reapply plugin state on resume.", "beforePersist": "Persist plugin state before saving.", "beforeDelegate": "Add plugin guidance before delegated children run.", "afterDelegate": "Add plugin guidance after delegated children finish." }, "toolAliases": [ { "name": "plugin_read", "baseTool": "read_file", "description": "Plugin alias for reading files." } ], "virtualTools": [ { "name": "demo_virtual", "description": "Return a rendered plugin response.", "responseTemplate": "plugin topic: {topic}" } ], "toolHooks": { "read_file": { "beforeTool": "Validate the path before reading.", "afterResult": "Summarize the file before the next action." } } } EOF ``` ### 14.1 Plugin prompt/context discovery ```bash python3 -m src.main agent-prompt --cwd ./test_cases python3 -m src.main agent-context-raw --cwd ./test_cases ``` ### 14.2 Plugin alias tool ```bash echo "hello plugin" > ./test_cases/hello.txt python3 -m src.main agent \ "Use the plugin_read tool to read hello.txt and summarize it." \ --cwd ./test_cases \ --show-transcript ``` ### 14.3 Plugin virtual tool ```bash python3 -m src.main agent \ "Use the demo_virtual tool with topic plugins and return the result." \ --cwd ./test_cases \ --show-transcript ``` ### 14.4 Plugin before/after tool guidance ```bash python3 -m src.main agent \ "Read hello.txt and follow the plugin guidance around the read_file tool." \ --cwd ./test_cases \ --show-transcript ``` ### 14.5 Plugin lifecycle with resume/persist 1. Start a session: ```bash python3 -m src.main agent \ "Use the plugin system and create a saved session." \ --cwd ./test_cases ``` 2. Resume it: ```bash python3 -m src.main agent-resume \ \ "Continue and mention any plugin lifecycle guidance you received." \ --show-transcript ``` Look for: - `plugin_before_persist` - `Plugin resume hooks:` - `Plugin runtime state:` ## 15. MCP Runtime Create a local MCP manifest: ```bash mkdir -p ./test_cases_mcp printf 'mcp notes\n' > ./test_cases_mcp/notes.txt cat > ./test_cases_mcp/.claw-mcp.json <<'EOF' { "servers": [ { "name": "workspace", "resources": [ { "uri": "mcp://workspace/notes", "name": "Notes", "path": "notes.txt", "mimeType": "text/plain" }, { "uri": "mcp://workspace/inline", "name": "Inline", "text": "inline body" } ] } ] } EOF ``` ### 15.1 MCP context and slash commands ```bash python3 -m src.main agent "/mcp" --cwd ./test_cases_mcp python3 -m src.main agent "/resources" --cwd ./test_cases_mcp python3 -m src.main agent "/resource mcp://workspace/notes" --cwd ./test_cases_mcp python3 -m src.main agent "/mcp (MCP)" --cwd ./test_cases_mcp python3 -m src.main agent-context-raw --cwd ./test_cases_mcp python3 -m src.main agent-prompt --cwd ./test_cases_mcp ``` ### 15.2 MCP tools through the model loop ```bash python3 -m src.main agent \ "List the available MCP resources, then read mcp://workspace/notes and summarize it." \ --cwd ./test_cases_mcp \ --show-transcript ``` ### 15.3 Read inline MCP resources ```bash python3 -m src.main agent \ "Read the MCP resource mcp://workspace/inline and repeat its content." \ --cwd ./test_cases_mcp \ --show-transcript ``` ## 16. Task Runtime Create a clean task workspace: ```bash mkdir -p ./test_cases_tasks rm -rf ./test_cases_tasks/.port_sessions ``` ### 16.1 Task slash commands ```bash python3 -m src.main agent "/tasks" --cwd ./test_cases_tasks python3 -m src.main agent "/todo" --cwd ./test_cases_tasks python3 -m src.main agent "/task missing-task-id" --cwd ./test_cases_tasks python3 -m src.main agent-context-raw --cwd ./test_cases_tasks python3 -m src.main agent-prompt --cwd ./test_cases_tasks ``` ### 16.2 Create and update tasks through the model loop ```bash python3 -m src.main agent \ "Create a task called Review runtime tasks, then list the current tasks." \ --cwd ./test_cases_tasks \ --allow-write \ --show-transcript ``` Then inspect the stored task file: ```bash cat ./test_cases_tasks/.port_sessions/task_runtime.json ``` ### 16.3 Replace the todo list ```bash python3 -m src.main agent \ "Replace the current todo list with three tasks: inspect runtime, verify tests, and update docs. Mark inspect runtime as done and the others as todo." \ --cwd ./test_cases_tasks \ --allow-write \ --show-transcript ``` ### 16.4 Read back task state ```bash python3 -m src.main agent "/tasks" --cwd ./test_cases_tasks python3 -m src.main agent \ "List the current tasks and show me the id of each one." \ --cwd ./test_cases_tasks \ --show-transcript ``` ### 16.5 Plan runtime and task sync ```bash python3 -m src.main agent \ "Use update_plan to create three steps: inspect runtime, verify tests, update docs. Mark inspect runtime completed and sync to tasks." \ --cwd ./test_cases_tasks \ --allow-write \ --show-transcript python3 -m src.main agent "/plan" --cwd ./test_cases_tasks python3 -m src.main agent "/tasks" --cwd ./test_cases_tasks cat ./test_cases_tasks/.port_sessions/plan_runtime.json ``` ## 17. Query Engine And Workspace Commands ### 17.1 Workspace inventory ```bash python3 -m src.main summary python3 -m src.main manifest python3 -m src.main subsystems --limit 20 python3 -m src.main commands --limit 20 python3 -m src.main tools --limit 20 ``` ### 17.2 Query routing and bootstrap reports ```bash python3 -m src.main route "inspect the runtime and tools" --limit 10 python3 -m src.main bootstrap "inspect the runtime and tools" --limit 10 python3 -m src.main turn-loop "inspect the runtime and tools" --limit 5 --max-turns 3 ``` ### 17.3 Session flushing for the mirrored workspace ```bash python3 -m src.main flush-transcript "store a temporary transcript" python3 -m src.main load-session ``` ## 18. Remote/Direct Mode Simulations These are mirrored workspace simulation commands, not the real agent runtime: ```bash python3 -m src.main remote-mode demo-target python3 -m src.main ssh-mode demo-target python3 -m src.main teleport-mode demo-target python3 -m src.main direct-connect-mode demo-target python3 -m src.main deep-link-mode demo-target ``` ## 19. Parity Tracking Workflow Use this every time a new feature lands: ```bash python3 -m unittest discover -s tests -v ``` Then update: - `PARITY_CHECKLIST.md` - `TESTING_GUIDE.md` Rule for future work: - every new implemented feature should add a checked item in `PARITY_CHECKLIST.md` - every user-testable feature should add at least one concrete command example in `TESTING_GUIDE.md`