A terminal-friendly Claude Code CLI built on the Claude Agent SDK, without React Ink.
@shellicar/claude-cli- Terminal Claude Code CLI with plain terminal I/O@shellicar/claude-sdk- Minimal agent SDK built on the Messages API
The official Claude Code CLI uses React Ink for its TUI, which re-renders the entire terminal on every state change. In tmux (especially on WSL2), this floods the PTY with escape sequences and can deadlock the kernel write lock.
This CLI talks to the SDK directly with plain terminal I/O. No React, no virtual DOM, no PTY flooding.
pnpm add -g @shellicar/claude-cli- Multiline editor with word-level editing, Home/End, Ctrl+Home/End
- Session resumption and auto-resume across restarts
- Portable sessions, resumable from the official CLI or VS Code extension
- Configurable auto-approve tiers (reads, edits in cwd)
- Permission queue with configurable timeouts and drowning alert
- Coloured diff display for Edit tool calls
- Cost, context usage, and elapsed time tracking
- System prompt providers (git branch/status, context %, session cost, current time)
- Command mode (Ctrl+/) with clipboard image/text paste, attachment preview
- Interactive question prompts with configurable timeout
- Audit log for debugging (
.claude/audit.jsonl) - Skills and hooks support via
settingSources
Ctrl+Enter requires a custom keybinding. Most terminals send the same byte for Enter and Ctrl+Enter.
Windows Terminal: add to settings.json:
{
"command": { "action": "sendInput", "input": "\\u001b[13;5u" },
"id": "User.sendInput.CTRL_ENTER"
}{ "id": "User.sendInput.CTRL_ENTER", "keys": "ctrl+enter" }VS Code: add to keybindings.json:
{
"key": "ctrl+enter",
"command": "workbench.action.terminal.sendSequence",
"args": { "text": "\\u001b[13;5u" },
"when": "terminalFocus"
}Config file at ~/.claude/cli-config.json. Run claude-cli --init-config to create defaults.
Key options: model, maxTurns, permissionTimeoutMs, extendedPermissionTimeoutMs, questionTimeoutMs, drowningThreshold, autoApproveEdits, autoApproveReads, providers.
pnpm install
pnpm dev # Run with tsx
pnpm build # Bundle with esbuild
pnpm start # Run built bundle
pnpm test # Run tests
pnpm type-check # TypeScript type checking