ワンクリックで
repl-interaction
// Patterns for controlling REPL sessions (Python, IPython, Node.js, Ruby, etc.) via terminalcp
// Patterns for controlling REPL sessions (Python, IPython, Node.js, Ruby, etc.) via terminalcp
| name | repl-interaction |
| description | Patterns for controlling REPL sessions (Python, IPython, Node.js, Ruby, etc.) via terminalcp |
This skill provides comprehensive patterns for managing and automating REPL (Read-Eval-Print Loop) sessions using terminalcp MCP. It enables AI agents to execute code interactively, explore APIs, and prototype solutions in real-time.
terminalcp enables:
The MCP server runs via npx @mariozechner/terminalcp@latest --mcp and provides full terminal emulation for REPL interaction.
{
"action": "start",
"command": "python3 -i",
"name": "python-repl"
}
{
"action": "start",
"command": "ipython",
"name": "ipython-repl"
}
// Simple expression
{
"action": "stdin",
"id": "python-repl",
"data": "2 + 2\r"
}
// Variable assignment
{
"action": "stdin",
"id": "python-repl",
"data": "x = 42\r"
}
// Import module
{
"action": "stdin",
"id": "python-repl",
"data": "import math\r"
}
// Use imported module
{
"action": "stdin",
"id": "python-repl",
"data": "math.sqrt(16)\r"
}
// Start multi-line code
{
"action": "stdin",
"id": "python-repl",
"data": "def greet(name):\r"
}
{
"action": "stdin",
"id": "python-repl",
"data": " return f'Hello, {name}!'\r"
}
// Empty line to finish
{
"action": "stdin",
"id": "python-repl",
"data": "\r"
}
// Call the function
{
"action": "stdin",
"id": "python-repl",
"data": "greet('Alice')\r"
}
{
"action": "stdout",
"id": "python-repl"
}
Returns the current terminal state including all executed code and output.
{
"action": "stream",
"id": "python-repl",
"since_last": true
}
Returns only new output since last check, useful for monitoring long-running computations.
// Time execution
{
"action": "stdin",
"id": "ipython-repl",
"data": "%timeit sum(range(1000))\r"
}
// Run external script
{
"action": "stdin",
"id": "ipython-repl",
"data": "%run script.py\r"
}
// Show history
{
"action": "stdin",
"id": "ipython-repl",
"data": "%history\r"
}
// List variables
{
"action": "stdin",
"id": "ipython-repl",
"data": "%whos\r"
}
// Edit code in external editor
{
"action": "stdin",
"id": "ipython-repl",
"data": "%edit myfunction\r"
}
// Get help
{
"action": "stdin",
"id": "ipython-repl",
"data": "str.split?\r"
}
// Detailed help
{
"action": "stdin",
"id": "ipython-repl",
"data": "str.split??\r"
}
// List methods
{
"action": "stdin",
"id": "ipython-repl",
"data": "dir(str)\r"
}
// Type inspection
{
"action": "stdin",
"id": "ipython-repl",
"data": "type(my_variable)\r"
}
// Run shell command
{
"action": "stdin",
"id": "ipython-repl",
"data": "!ls -la\r"
}
// Capture shell output
{
"action": "stdin",
"id": "ipython-repl",
"data": "files = !ls *.py\r"
}
// Use Python variables in shell
{
"action": "stdin",
"id": "ipython-repl",
"data": "!echo {my_var}\r"
}
{
"action": "start",
"command": "node",
"name": "node-repl"
}
// Simple expression
{
"action": "stdin",
"id": "node-repl",
"data": "2 + 2\r"
}
// Variable declaration
{
"action": "stdin",
"id": "node-repl",
"data": "const x = 42\r"
}
// Array methods
{
"action": "stdin",
"id": "node-repl",
"data": "[1, 2, 3].map(n => n * 2)\r"
}
// Require module
{
"action": "stdin",
"id": "node-repl",
"data": "const fs = require('fs')\r"
}
// Start function definition
{
"action": "stdin",
"id": "node-repl",
"data": "function greet(name) {\r"
}
{
"action": "stdin",
"id": "node-repl",
"data": " return `Hello, ${name}!`\r"
}
{
"action": "stdin",
"id": "node-repl",
"data": "}\r"
}
// Call function
{
"action": "stdin",
"id": "node-repl",
"data": "greet('Bob')\r"
}
// Define async function
{
"action": "stdin",
"id": "node-repl",
"data": "async function fetchData() { return 'data' }\r"
}
// Call with await (Node 16+)
{
"action": "stdin",
"id": "node-repl",
"data": "await fetchData()\r"
}
// Show help
{
"action": "stdin",
"id": "node-repl",
"data": ".help\r"
}
// Load file
{
"action": "stdin",
"id": "node-repl",
"data": ".load script.js\r"
}
// Save session to file
{
"action": "stdin",
"id": "node-repl",
"data": ".save session.js\r"
}
// Exit REPL
{
"action": "stdin",
"id": "node-repl",
"data": ".exit\r"
}
{
"action": "start",
"command": "irb",
"name": "ruby-repl"
}
// Simple expression
{
"action": "stdin",
"id": "ruby-repl",
"data": "2 + 2\r"
}
// String manipulation
{
"action": "stdin",
"id": "ruby-repl",
"data": "'hello'.upcase\r"
}
// Array operations
{
"action": "stdin",
"id": "ruby-repl",
"data": "[1, 2, 3].map { |n| n * 2 }\r"
}
// Define method
{
"action": "stdin",
"id": "ruby-repl",
"data": "def greet(name); \"Hello, #{name}!\"; end\r"
}
// Call method
{
"action": "stdin",
"id": "ruby-repl",
"data": "greet('Charlie')\r"
}
{
"action": "start",
"command": "lua",
"name": "lua-repl"
}
// Simple expression
{
"action": "stdin",
"id": "lua-repl",
"data": "print(2 + 2)\r"
}
// Table manipulation
{
"action": "stdin",
"id": "lua-repl",
"data": "t = {1, 2, 3}\r"
}
{
"action": "stdin",
"id": "lua-repl",
"data": "print(t[1])\r"
}
// 1. Start IPython session
{
"action": "start",
"command": "ipython",
"name": "api-explore"
}
// 2. Import library
{
"action": "stdin",
"id": "api-explore",
"data": "import requests\r"
}
// 3. Inspect module
{
"action": "stdin",
"id": "api-explore",
"data": "dir(requests)\r"
}
// 4. Get help on specific function
{
"action": "stdin",
"id": "api-explore",
"data": "requests.get?\r"
}
// 5. Test API call
{
"action": "stdin",
"id": "api-explore",
"data": "response = requests.get('https://api.github.com')\r"
}
// 6. Inspect response
{
"action": "stdin",
"id": "api-explore",
"data": "response.json()\r"
}
// 7. Capture all output
{
"action": "stdout",
"id": "api-explore"
}
// 1. Start IPython
{
"action": "start",
"command": "ipython",
"name": "data-analysis"
}
// 2. Import pandas
{
"action": "stdin",
"id": "data-analysis",
"data": "import pandas as pd\r"
}
// 3. Load data
{
"action": "stdin",
"id": "data-analysis",
"data": "df = pd.read_csv('data.csv')\r"
}
// 4. Explore data
{
"action": "stdin",
"id": "data-analysis",
"data": "df.head()\r"
}
{
"action": "stdin",
"id": "data-analysis",
"data": "df.describe()\r"
}
// 5. Analyze
{
"action": "stdin",
"id": "data-analysis",
"data": "df.groupby('category').mean()\r"
}
// 6. Get results
{
"action": "stdout",
"id": "data-analysis"
}
// Start Python REPL for backend logic
{
"action": "start",
"command": "python3 -i",
"name": "backend-repl"
}
// Start Node REPL for frontend logic
{
"action": "start",
"command": "node",
"name": "frontend-repl"
}
// Test Python API
{
"action": "stdin",
"id": "backend-repl",
"data": "def process_data(data): return data.upper()\r"
}
// Test JavaScript frontend
{
"action": "stdin",
"id": "frontend-repl",
"data": "const formatData = (data) => data.toLowerCase()\r"
}
// List all active REPLs
{
"action": "list"
}
// 1. Start REPL
{
"action": "start",
"command": "python3 -i",
"name": "prototype"
}
// 2. Test idea
{
"action": "stdin",
"id": "prototype",
"data": "def factorial(n): return 1 if n <= 1 else n * factorial(n-1)\r"
}
// 3. Test with examples
{
"action": "stdin",
"id": "prototype",
"data": "factorial(5)\r"
}
// 4. Check edge cases
{
"action": "stdin",
"id": "prototype",
"data": "factorial(0)\r"
}
{
"action": "stdin",
"id": "prototype",
"data": "factorial(1)\r"
}
// 5. Refine implementation
{
"action": "stdin",
"id": "prototype",
"data": "def factorial_iterative(n):\r result = 1\r for i in range(2, n + 1):\r result *= i\r return result\r\r"
}
// 6. Compare performance
{
"action": "stdin",
"id": "prototype",
"data": "import time\r"
}
{
"action": "stdin",
"id": "prototype",
"data": "start = time.time(); factorial(100); print(time.time() - start)\r"
}
// 7. Capture final output
{
"action": "stdout",
"id": "prototype"
}
// 1. Start IPython
{
"action": "start",
"command": "ipython",
"name": "doc-gen"
}
// 2. Import module
{
"action": "stdin",
"id": "doc-gen",
"data": "import mymodule\r"
}
// 3. Get function signatures
{
"action": "stdin",
"id": "doc-gen",
"data": "import inspect\r"
}
{
"action": "stdin",
"id": "doc-gen",
"data": "inspect.signature(mymodule.my_function)\r"
}
// 4. Get docstrings
{
"action": "stdin",
"id": "doc-gen",
"data": "mymodule.my_function.__doc__\r"
}
// 5. Test examples from docs
{
"action": "stdin",
"id": "doc-gen",
"data": "mymodule.my_function('test')\r"
}
// 6. Extract for documentation
{
"action": "stdout",
"id": "doc-gen"
}
// Save current REPL state to file
{
"action": "stdin",
"id": "python-repl",
"data": "import dill\r"
}
{
"action": "stdin",
"id": "python-repl",
"data": "dill.dump_session('session.pkl')\r"
}
// Later, restore state
{
"action": "stdin",
"id": "python-repl",
"data": "dill.load_session('session.pkl')\r"
}
name that reflects purpose (e.g., "api-test", "data-explore")del variable to free memory// Catch and inspect errors
{
"action": "stdin",
"id": "python-repl",
"data": "try:\r risky_operation()\rexcept Exception as e:\r print(f'Error: {e}')\r import traceback\r traceback.print_exc()\r\r"
}
stdout action after commands that produce outputstream with since_last: true for incremental output// Start long computation
{
"action": "stdin",
"id": "python-repl",
"data": "result = expensive_computation()\r"
}
// Check progress with stream mode
{
"action": "stream",
"id": "python-repl",
"since_last": true
}
// Don't block - continue other work
// Check back later with stdout
{
"action": "stdout",
"id": "python-repl"
}
// List all active sessions
{
"action": "list"
}
// Stop specific session
{
"action": "stop",
"id": "python-repl"
}
// Stop all sessions (clean shutdown)
// Iterate through list results and stop each
dir() and help%timeitThis skill provides comprehensive patterns for AI-driven REPL interaction using terminalcp's persistent session management.
Create YAML format work plans saved as .sisyphus/tasks/{name}.yaml with strict schema validation. Analyze user requirements, gather project context, and generate structured plans with verification specs. ALWAYS includes mandatory plan-reviewer verification. Use when users request YAML-based work planning or Sisyphus-compatible task breakdown.
GitHub Pull Request creation specialist. Analyzes user requirements to create PRs with structured titles and bodies matching the user's query language. Handles git change analysis, PR draft creation, user confirmation, and final PR creation via gh CLI.
Activate when user expresses intent to start Sisyphus work (e.g., "okay then work like that", "let's execute this", "start working on this"). Extract ai-todolist.md content from GitHub comments/files, create branch, commit, and trigger GitHub Actions workflow. If no ai-todolist format found, load plan-writer skill instead.
Patterns for controlling interactive debuggers (pdb, ipdb, gdb, lldb, node debug) via terminalcp
Patterns for managing and monitoring long-running processes (builds, tests, servers, etc.) via terminalcp
Patterns for controlling TUI applications (vim, htop, tig, lazygit, etc.) via terminalcp