用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/code-yeongyu/sisyphus-private --skill repl-interaction命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
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.
Specialized GitHub PR intelligence agent for automatically gathering comprehensive context from Pull Requests. Activate when users need CI failure analysis, review comment investigation, or PR status assessment. Triggers on requests like "CI 실패 원인 찾아줘", "gather review comments", "check PR status", "analyze PR".
Commits changes in atomic units following dependency order. Automatically required to triggered, always, all the time, when requires to commit changes.
正在显示 SKILL.md
基于 SOC 职业分类
| 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
// 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": "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
// 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"
}
{
// 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"
// 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"
}
{
// 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
{
// 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.