원클릭으로
interactive-shell
dev server, TUI, REPL, DB shell, 로그처럼 사용자 제어나 장시간 실행이 필요한 터미널 작업에 사용한다. AI 작업 위임에는 subagent를 사용한다.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
dev server, TUI, REPL, DB shell, 로그처럼 사용자 제어나 장시간 실행이 필요한 터미널 작업에 사용한다. AI 작업 위임에는 subagent를 사용한다.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
기존 user/project 메모리의 중복·노후 항목을 검토, 통합, 정리할 때 사용한다. 사용자 확인 없이 메모리를 삭제하지 않는다.
서브에이전트·스킬 사용 통계와 미사용 항목을 분석해 인사이트를 도출할 때 사용한다.
코딩·조사 작업을 별도 Picky Pickle에 위임할 때 사용한다. worktree 준비, 지침 작성, Pickle 생성·후속 관리를 수행한다.
Context7 CLI(`ctx7`)로 라이브러리·프레임워크 공식 문서와 API 예시를 조회할 때 사용한다.
새 기능, 큰 변경, 아키텍처 결정 전에 구현보다 설계를 먼저 확정할 때 사용한다.
장기·병렬·대규모 작업을 서브에이전트로 분해·실행·검증하거나 동적 workflow를 설계할 때 사용한다.
| name | interactive-shell |
| description | dev server, TUI, REPL, DB shell, 로그처럼 사용자 제어나 장시간 실행이 필요한 터미널 작업에 사용한다. AI 작업 위임에는 subagent를 사용한다. |
Last verified: 2026-04-03
Local note: this project vendors the extension under
extensions/interactive-shell/. Treat it as a repo-local skill/extension, not a separately installed package.
In this project, interactive_shell is mainly for:
pnpm dev, npm run dev, vite, next dev, etc.)lazygit, htop, DB shell, interactive CLI menus)Do not frame interactive_shell as a subagent/delegation tool in this repo.
If the goal is:
use the subagent tool instead.
interactive_shell here is for terminal UX and process supervision, not subagent orchestration.
Use when the user should directly see and possibly control the program.
Good for:
lazygithtoppythonnodepsqlsqlite3git rebase -iinteractive_shell({ command: 'lazygit' })
interactive_shell({ command: 'psql -d mydb' })
interactive_shell({ command: 'python' })
This is the default mode.
Use when starting a long-running process and then checking its output later.
Good for:
pnpm devnpm run devvitenext devdocker compose uptail -f ...interactive_shell({
command: 'pnpm dev',
mode: 'hands-free',
reason: 'Run local dev server'
})
Then later:
interactive_shell({ sessionId: 'calm-reef' })
interactive_shell({ sessionId: 'calm-reef', outputLines: 50 })
interactive_shell({ sessionId: 'calm-reef', kill: true })
Use this as the default for dev servers when you want the overlay visible and the process queryable.
This can still be useful for headless long-running processes, but do not describe it as subagent delegation.
Good for:
interactive_shell({
command: 'pnpm dev',
mode: 'dispatch',
background: true,
reason: 'Run local dev server headlessly'
})
Use this for process management, not “ask another agent to do work”.
interactive_shell({
command: 'pnpm dev',
mode: 'hands-free',
reason: 'Frontend dev server'
})
Check output later:
interactive_shell({ sessionId: 'calm-reef' })
interactive_shell({ sessionId: 'calm-reef', outputLines: 100, outputMaxChars: 30000 })
Stop it:
interactive_shell({ sessionId: 'calm-reef', kill: true })
interactive_shell({ command: 'lazygit' })
interactive_shell({ command: 'htop' })
interactive_shell({ command: 'git rebase -i HEAD~3' })
Use interactive mode here so the user can watch and take over naturally.
interactive_shell({ command: 'psql -d app' })
interactive_shell({ command: 'sqlite3 dev.db' })
interactive_shell({ command: 'node' })
interactive_shell({ command: 'python' })
Again, prefer interactive mode unless there is a strong reason to poll from the agent side.
interactive_shell({ listBackground: true })
interactive_shell({ attach: 'calm-reef' })
interactive_shell({ dismissBackground: 'calm-reef' })
Status queries return rendered terminal output (what is actually on screen), not raw PTY bytes.
Defaults:
outputLines: 20outputMaxChars: 5KBUseful patterns:
interactive_shell({ sessionId: 'calm-reef' })
interactive_shell({ sessionId: 'calm-reef', outputLines: 50 })
interactive_shell({ sessionId: 'calm-reef', outputLines: 100, outputMaxChars: 30000 })
interactive_shell({ sessionId: 'calm-reef', incremental: true, outputLines: 50 })
Use incremental: true when reading long scrollback progressively.
interactive_shell({ sessionId: 'calm-reef', input: '/help\n' })
interactive_shell({ sessionId: 'calm-reef', inputKeys: ['ctrl+c'] })
interactive_shell({ sessionId: 'calm-reef', inputPaste: 'line1\nline2\nline3' })
interactive_shell({ sessionId: 'calm-reef', input: 'y', inputKeys: ['enter'] })
up, down, left, rightenterescapetab, shift+tabbackspacectrl+c, ctrl+d, ctrl+zinteractive_shell({ sessionId: 'calm-reef', background: true })
interactive_shell({ listBackground: true })
interactive_shell({ attach: 'calm-reef' })
interactive_shell({ attach: 'calm-reef', mode: 'hands-free' })
interactive_shell({ attach: 'calm-reef', mode: 'dispatch' })
interactive_shell({ dismissBackground: true })
interactive_shell({ dismissBackground: 'calm-reef' })
Never use plain bash for a truly interactive/TUI app when you actually need terminal behavior.
If you only need a quick capture from a TUI-ish command that does not exit cleanly, use interactive_shell with a timeout:
interactive_shell({
command: 'pi --help',
mode: 'hands-free',
timeout: 5000
})
Good for:
--help output from TUI appsinteractive_shell when:bash when:subagent when:interactive_shell({
command: 'pnpm dev',
mode: 'hands-free',
reason: 'Run dev server'
})
interactive_shell({ command: 'lazygit' })
interactive_shell({
command: 'pnpm dev',
mode: 'dispatch',
background: true,
reason: 'Run dev server in background'
})
interactive_shell({ sessionId: 'calm-reef', kill: true })