Claude Code direct CLI profile
Issue #2900; installed CLI /home/roctinam/.local/bin/claude, verified 2.1.295 (Claude Code) on 2026-10-09 using only version/help commands.
Claude Code direct CLI profile
Issue #2900; installed CLI `/home/roctinam/.local/bin/claude`, verified `2.1.295 (Claude Code)` on 2026-10-09 using only version/help commands. Help verifies syntax; fake tests verify mechanics. The registry stays unqualified.
The driver requires an exact model ID and explicit effort. It uses stdin text to EOF, JSONL stdout, `dontAsk` plus `--permission-prompts none`, restricted file tools and an empty strict MCP configuration. Skills, customizations and Agent/Task are disabled. `--tools`/`--allowedTools` vary by sandbox mode: the default `workspace-write` sandbox emits `Read,Glob,Grep,Edit,Write` (the bundled registry's pinned template, below); `read-only` narrows that to `Read,Glob,Grep`, omitting Edit/Write. OS sandboxing is unavailable in this CLI profile; the existing external-boundary requirement still applies. Inherited fallback is disabled and no fallback model is emitted. Legacy adapter calls now deny permission prompts too; their existing prompt transport is retained. The shared SessionLauncher fallback still has its old bypass flag and needs a separate shared-owner change.
`ClaudeDirectAdapter.parseWorkerFinal` extracts one successful `result` envelope from captured `.stdout`, then validates its JSON `result` text or `structured_output` with the shared claims parser and trusted exit observation. Missing, double, truncated, cross-session and error finals fail; exit zero cannot override an error event. Health reuses `system/init`, `assistant`, `user/tool_result`, `stream_event` and `result`. Semantic handshake remains unqualified; owned process exit supplies stop evidence. The CLI does not write the renderer's `finalPath` directly.
The approved module exposes `interfaceVersion=1` and `register(factory)`. Its installed factory ID is `claude-direct`, distinct from the legacy `claude` ID, so both load orders coexist. Use the existing `workerAdapters:claude-direct` binding for an installed direct adapter; provider identity and executable remain `claude`. The fixture pins the module digest; host approval to load does not grant dispatch.
Unavailable: a help-evidenced turn cap (`--max-turns` is absent), renderer schema input (CLI `--json-schema` exists), and a native MCP reasoning worker. `claude mcp serve --help` says `Start the Claude Code MCP server` and lists only `-d, --debug`, `-h, --help`, `--verbose`. This code-tools server is not a model worker. No MCP worker profile or bridge normalization is advertised here.
One manual smoke run, from a trusted scratch workspace, after setting `CLAUDE_SMOKE_MODEL` to an exact model ID available to the operator. This uses the `read-only` tool list (`Read,Glob,Grep`, no Edit/Write) deliberately, since a smoke probe has no reason to write; the bundled registry template above still pins the `workspace-write` list as the profile default:
printf '%s\
' 'Reply exactly OK.' | claude --print --input-format text --output-format stream-json --verbose --model "${CLAUDE_SMOKE_MODEL:?set an exact model ID}" --effort low --permission-mode dontAsk --permission-prompts none --restricted --safe-mode --strict-mcp-config --mcp-config '{"mcpServers":{}}' --tools Read,Glob,Grep --allowedTools Read,Glob,Grep --disallowedTools Agent,Task,Bash,PowerShell,REPL,WebFetch --disable-slash-commands --no-chrome --no-session-persistence
Pass: CLI exit zero, exactly one final `type: result`, `subtype: success`, `is_error: false`, and `result` saying OK; no error event. Anything else fails. Record the CLI version and pass/fail manually. This command was not run here.
Verbatim relevant lines from installed `claude --help`:
--allowedTools, --allowed-tools <tools...>
Comma or space-separated list of tool names to allow (e.g. "Bash(git *)
Edit")
--disable-slash-commands Disable all skills
--disallowedTools, --disallowed-tools <tools...>
Comma or space-separated list of tool names to deny (e.g. "Bash(git *)
Edit")
--effort <level> Effort level for the current session
(low, medium, high, xhigh, max)
--input-format <format> Input format (only works with --print):
"text" (default), or "stream-json"
(realtime streaming input) (choices:
"text", "stream-json")
--json-schema <schema> JSON Schema for structured output
validation. Example:
{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}
--mcp-config <configs...> Load MCP servers from JSON files or
strings (space-separated)
--model <model> Model for the current session. Provide
an alias for the latest model (e.g.
'fable', 'opus', or 'sonnet') or a
model's full name.
--no-chrome Disable Claude in Chrome integration
--no-session-persistence Disable session persistence - sessions
will not be saved to disk and cannot be
resumed (only works with --print)
--output-format <format> Output format (only works with --print):
"text" (default), "json" (single
result), or "stream-json" (realtime
streaming) (choices: "text", "json",
"stream-json")
--permission-mode <mode> Permission mode to use for the session
(choices: "acceptEdits", "auto",
"bypassPermissions", "manual",
"dontAsk", "plan")
--permission-prompts <target> Who answers permission prompts with
--print: "host" (the SDK host or
--permission-prompt-tool) or "none"
(nobody: anything that would prompt is
denied automatically; the permission
mode still decides everything else)
(choices: "host", "none", default:
"host")
-p, --print Print response and exit (useful for
pipes). Note: The workspace trust dialog
is skipped when Claude is run in
non-interactive mode (via -p, or when
stdout is not a TTY, e.g. piped or
redirected output). Only use this in
directories you trust. Settings files
that fail validation are silently
ignored in this mode (no error dialog is
shown).
--restricted Restricted mode: removes the built-in
tools that run commands or code (Bash,
PowerShell, REPL and the other
code-running tools) and WebFetch unless
--tools names them, and ignores user,
project and local settings files
(managed settings and --settings still
apply; add --strict-mcp-config to skip
MCP servers too). Also confines the file
tools to the working directories
(--add-dir included), refuses
bypassPermissions, and lets only a
person or the configured permission
handler approve writes to settings, git
and tool-configuration files.
--safe-mode Start with all customizations
(CLAUDE.md, skills, installed plugins,
hooks, MCP servers, custom commands and
agents, output styles, workflows, custom
themes, keybindings, and more) disabled
— useful for troubleshooting a broken
configuration. Admin-managed (policy)
settings still apply. Auth, model
selection, built-in tools and plugins,
and permissions work normally. Sets
CLAUDE_CODE_SAFE_MODE=1.
--setting-sources <sources> Comma-separated list of setting sources
to load (user, project, local).
--strict-mcp-config Only use MCP servers from --mcp-config,
ignoring all other MCP configurations
--tools <tools...> Specify the list of available tools from
the built-in set. Use "" to disable all
tools, "default" to use all tools, or
specify tool names (e.g.
"Bash,Edit,Read").