#!/data/data/com.termux/files/usr/bin/bash # Claude Code 订阅引擎(dsh 的替代)。用法:run-claude.sh "prompt" # 认证:Mac 上 `claude setup-token`(官方的 headless 长效 OAuth token,走订阅), # 把 CLAUDE_CODE_OAUTH_TOKEN=... 写进 ~/dsh/.secrets.env(不进 git)。也可在手机上直接 `claude` 登录。 # stdout=最终答案,与 dsh headless 同形。member/chat 是陌生人/抓取内容=不可信输入, # 用 --tools "" 彻底关掉全部工具(比 codex 的 read-only 沙箱更严)。 set -euo pipefail export PREFIX="${PREFIX:-/data/data/com.termux/files/usr}" export HOME="${HOME:-/data/data/com.termux/files/home}" export PATH="$PREFIX/bin:$PATH" export TMPDIR="$PREFIX/tmp"; mkdir -p "$TMPDIR" # 官方 claude 2.1.150+ 只发原生二进制(无 android),固定在纯 JS 的 2.1.100,禁止自升级 export DISABLE_AUTOUPDATER=1 # Android 没有 /usr/bin/env,cli.js 的 shebang 直接执行会 ENOENT,所以显式用 node 跑 claude() { exec node "$PREFIX/lib/node_modules/@anthropic-ai/claude-code/cli.js" "$@"; } SECRETS="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/.secrets.env" if [ -f "$SECRETS" ]; then set -a; source "$SECRETS"; set +a; fi MODE="$1"; P="$2" case "$MODE" in admin) claude -p "$P" --dangerously-skip-permissions ;; member) SOUL="$HOME/pixelphone/SOUL.md" [ -r "$SOUL" ] && P="$(cat "$SOUL") $P" claude -p "$P" --tools "" ;; chat) claude -p "$P" --tools "" ;; *) echo "mode must be admin|member|chat" >&2; exit 2 ;; esac