run-claude.sh 1.52 KB
#!/data/data/com.termux/files/usr/bin/bash
# Claude Code 订阅引擎(dsh 的替代)。用法:run-claude.sh <admin|member|chat> "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