read_output
Retrieve session output by providing a process ID to access its logged data.
Instructions
Read session output
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes |
Implementation Reference
- src/tools/terminal_tools.js:219-262 (handler)The actual implementation of read_output: finds a session by PID, collects its output/error buffers, clears them, and returns the results with session metadata.
function readOutput(pid) { try { // Find session by PID let session = null; for (const [id, s] of sessions) { if (s.pid === pid) { session = s; break; } } if (!session) { return { success: false, message: `No session found with PID ${pid}` }; } const output = session.output.join(''); const error = session.error.join(''); // Clear read output session.output = []; session.error = []; return { success: true, pid, sessionId: session.id, status: session.status, output, error, exitCode: session.exitCode, duration: session.endTime ? session.endTime - session.startTime : Date.now() - session.startTime }; } catch (error) { logger.error(`Error reading output: ${error.message}`); return { success: false, message: error.message }; } } - src/mcp/server.js:98-125 (registration)Tool registration/definition in the tools list: name 'read_output', description 'Read session output', input schema requiring a 'pid' number.
{ name:'read_output', description:'Read session output', inputSchema:{ type:'object', properties:{ pid:{type:'number'} }, required:['pid'] } }, { name:'force_terminate', description:'Force terminate', inputSchema:{ type:'object', properties:{ pid:{type:'number'} }, required:['pid'] } }, { name:'list_sessions', description:'List sessions', inputSchema:{ type:'object', properties:{ random_string:{type:'string'} }, required:['random_string'] } }, { name:'list_processes', description:'List processes', inputSchema:{ type:'object', properties:{ random_string:{type:'string'} }, required:['random_string'] } }, { name:'kill_process', description:'Kill process', inputSchema:{ type:'object', properties:{ pid:{type:'number'} }, required:['pid'] } }, // Search & Edit { name:'search_code', description:'Search code', inputSchema:{ type:'object', properties:{ path:{type:'string'}, pattern:{type:'string'}, ignoreCase:{type:'boolean'}, includeHidden:{type:'boolean'}, contextLines:{type:'number'}, maxResults:{type:'number'}, timeoutMs:{type:'number'} }, required:['path','pattern'] } }, { name:'edit_block', description:'Edit block', inputSchema:{ type:'object', properties:{ file_path:{type:'string'}, old_string:{type:'string'}, new_string:{type:'string'}, expected_replacements:{type:'number'}, normalize_whitespace:{type:'boolean'} }, required:['file_path','old_string','new_string'] } }, // Enhanced FS { name:'read_url', description:'Read URL', inputSchema:{ type:'object', properties:{ path:{type:'string'}, timeout:{type:'number'} }, required:['path'] } }, // Watcher { name:'start_file_watcher', description:'Start file watcher', inputSchema:{ type:'object', properties:{ debounceDelay:{type:'number'} } } }, { name:'stop_file_watcher', description:'Stop file watcher', inputSchema:{ type:'object', properties:{} } }, { name:'file_watcher_status', description:'File watcher status', inputSchema:{ type:'object', properties:{} } }, { name:'force_sync', description:'Force sync task files', inputSchema:{ type:'object', properties:{} } }, // Priority ops { name:'bump_task_priority', description:'Bump task priority', inputSchema:{ type:'object', properties:{ id:{type:'string'}, amount:{type:'number'} }, required:['id'] } }, { name:'defer_task_priority', description:'Defer task priority', inputSchema:{ type:'object', properties:{ id:{type:'string'}, amount:{type:'number'} }, required:['id'] } }, { name:'prioritize_task', description:'Set high priority', inputSchema:{ type:'object', properties:{ id:{type:'string'}, priority:{type:'number'} }, required:['id'] } }, { name:'deprioritize_task', description:'Set low priority', inputSchema:{ type:'object', properties:{ id:{type:'string'}, priority:{type:'number'} }, required:['id'] } }, // Algorithm config { name:'configure_time_decay', description:'Configure time decay', inputSchema:{ type:'object', properties:{ enabled:{type:'boolean'}, halfLifeDays:{type:'number'} } } }, { name:'configure_effort_weighting', description:'Configure effort weighting', inputSchema:{ type:'object', properties:{ enabled:{type:'boolean'}, weight:{type:'number'} } } }, { name:'show_algorithm_config', description:'Show algorithm config', inputSchema:{ type:'object', properties:{} } }, // Browser & AppleScript { name:'browser_navigate', description:'Navigate URL', inputSchema:{ type:'object', properties:{ url:{type:'string'} }, required:['url'] } }, { name:'applescript_execute', description:'Run AppleScript (macOS)', inputSchema:{ type:'object', properties:{ code_snippet:{type:'string'}, timeout:{type:'number'} }, required:['code_snippet'] } } ]; - src/mcp/server.js:260-260 (handler)Dispatch case in tools/call handler that routes 'read_output' to terminalTools.readOutput(args.pid).
case 'read_output': data = terminalTools.readOutput(args.pid); break; - src/tools/terminal_tools.js:459-468 (registration)Export of readOutput from the terminal_tools module.
module.exports = { getConfig, setConfigValue, executeCommand, readOutput, forceTerminate, listSessions, listProcesses, killProcess }; - Test helper that provides default args for read_output in example generation.
case 'read_output': return { pid: 0 }; // replaced dynamically