Pencil 应用(linux)使用中转站 api
昨天看到了 pencil(佬补充之前一直有 MCP 服务(好像是 25 年),昨天我才看见 ),于是在 linux(系统为 Ubuntu 24.04.3 LTS)上下载了一个 Tarball 版本,按照通用步骤配置了 nvm,以及 nodejs,安装了 claude code,并配置了中转的 api 端点,控制台使用没有问题。但是 pencil 的界面打开聊天之后依旧显示需要 /login,于是写了一个脚本,用来自定义 pencil 的 api 端点。如果佬们有更好的办法,欢迎在下面补充(~~ 第一次写类似的,有问题希望佬前来指正)
步骤如下,先测试一下 api 端点和模型能否访问:
测试脚本 (记得切换测试模型)
#!/bin/bash
#============================================================
# API 配置测试脚本
# 用于验证你的 API 端点和密钥是否配置正确
#============================================================
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}==================================${NC}"
echo -e "${BLUE}Pencil API 配置测试${NC}"
echo -e "${BLUE}==================================${NC}"
echo ""
# 读取用户输入
read -p "请输入你的 API 端点 (例如: https://api.anthropic.com): " API_ENDPOINT
read -p "请输入你的 API 密钥: " API_KEY
if [ -z "$API_ENDPOINT" ] || [ -z "$API_KEY" ]; then
echo -e "${RED}错误: API 端点和密钥不能为空${NC}"
exit 1
fi
echo ""
echo -e "${YELLOW}正在测试 API 连接...${NC}"
# 测试 API 连接
RESPONSE=$(curl -s -w "\n%{http_code}" \
-H "x-api-key: $API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
"$API_ENDPOINT/v1/messages" \
-d '{
"model": "claude-opus-4-5",
"max_tokens": 10,
"messages": [{"role": "user", "content": "Hi"}]
}')
HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
BODY=$(echo "$RESPONSE" | sed '$d')
echo ""
echo -e "${BLUE}==================================${NC}"
echo -e "${BLUE}测试结果${NC}"
echo -e "${BLUE}==================================${NC}"
if [ "$HTTP_CODE" = "200" ]; then
echo -e "${GREEN}✓ API 连接成功!${NC}"
echo -e "${GREEN}HTTP 状态码: $HTTP_CODE${NC}"
echo ""
echo -e "${YELLOW}响应内容:${NC}"
echo "$BODY" | python3 -m json.tool 2>/dev/null || echo "$BODY"
echo ""
echo -e "${GREEN}你的配置正确!可以使用启动脚本了。${NC}"
echo ""
echo -e "${YELLOW}下一步:${NC}"
echo "1. 编辑 start-pencil-custom.sh"
echo "2. 修改 API_ENDPOINT=\"$API_ENDPOINT\""
echo "3. 修改 API_KEY=\"${API_KEY:0:10}...\""
echo "4. 运行: ./start-pencil-custom.sh"
else
echo -e "${RED}✗ API 连接失败${NC}"
echo -e "${RED}HTTP 状态码: $HTTP_CODE${NC}"
echo ""
echo -e "${YELLOW}错误响应:${NC}"
echo "$BODY"
echo ""
echo -e "${YELLOW}可能的原因:${NC}"
echo "1. API 密钥无效或已过期"
echo "2. API 端点 URL 不正确"
echo "3. 网络连接问题"
echo "4. API 端点不兼容 Anthropic API 格式"
echo ""
echo -e "${YELLOW}请检查你的配置后重试${NC}"
fi
echo -e "${BLUE}==================================${NC}"
然后按照如下步骤修改配置文件:
修改启动脚本
编辑启动脚本
nano start-pencil-custom.sh修改以下两行:
export API_ENDPOINT="https://your-api-endpoint.com" export API_KEY="sk-your-actual-api-key-here"启动 Pencil
./start-pencil-custom.sh
启动脚本的代码如下:
启动脚本
#!/bin/bash
#============================================================
# Pencil 自定义 API 启动脚本
# 使用方法:
# 1. 修改下面的 API_ENDPOINT 和 API_KEY 变量
# 2. chmod +x start-pencil-custom.sh
# 3. ./start-pencil-custom.sh
#============================================================
# ==================== 配置区域 ====================
# 你的自定义 API 端点(替换为你的实际端点)
# 示例:export API_ENDPOINT="https://api.openai.com/v1"
# 示例:export API_ENDPOINT="https://your-custom-api.com/v1"
export API_ENDPOINT="中转站的api"
# 你的 API 密钥(替换为你的实际密钥)
# 安全提示:不要将真实密钥提交到版本控制系统
export API_KEY="sk-xxx"
# Claude 模型选择(可选)
# 可选值: claude-opus-4-5, claude-sonnet-4-5, claude-haiku-4-5
export CLAUDE_MODEL="claude-opus-4-5"
# ================= 高级配置(可选) =================
# Anthropic Beta 功能
export ANTHROPIC_BETAS="fine-grained-tool-streaming-2025-05-14"
# 调试模式(设置为 1 启用调试日志)
# export DEBUG=1
# export DEBUG_SDK=1
# 配置目录(默认:~/.config/Pencil)
# export CLAUDE_CONFIG_DIR="$HOME/.config/Pencil"
# ==================== 脚本逻辑 ====================
# 颜色输出
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# Pencil 可执行文件路径
PENCIL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PENCIL_EXEC="$PENCIL_DIR/pencil"
# 检查 Pencil 是否存在
if [ ! -f "$PENCIL_EXEC" ]; then
echo -e "${RED}错误: 找不到 Pencil 可执行文件${NC}"
echo -e "${YELLOW}期望路径: $PENCIL_EXEC${NC}"
exit 1
fi
# 设置环境变量
export ANTHROPIC_API_URL="$API_ENDPOINT"
export ANTHROPIC_API_KEY="$API_KEY"
# 如果设置了模型,导出模型环境变量
if [ -n "$CLAUDE_MODEL" ]; then
export CLAUDE_DEFAULT_MODEL="$CLAUDE_MODEL"
fi
# 显示配置信息
echo -e "${GREEN}==================================${NC}"
echo -e "${GREEN}Pencil 自定义 API 启动${NC}"
echo -e "${GREEN}==================================${NC}"
echo -e "${YELLOW}API 端点:${NC} $API_ENDPOINT"
echo -e "${YELLOW}API 密钥:${NC} ${API_KEY:0:10}...${API_KEY: -4}" # 只显示部分密钥
echo -e "${YELLOW}模型:${NC} $CLAUDE_MODEL"
echo -e "${YELLOW}配置目录:${NC} ${CLAUDE_CONFIG_DIR:-$HOME/.config/Pencil}"
echo -e "${GREEN}==================================${NC}"
echo ""
# 验证配置
if [ "$API_KEY" = "sk-ant-your-api-key-here" ]; then
echo -e "${RED}警告: 你还没有设置真实的 API 密钥!${NC}"
echo -e "${YELLOW}请编辑此脚本,修改 API_KEY 变量${NC}"
echo ""
read -p "是否继续?(y/N) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
# 启动 Pencil
echo -e "${GREEN}正在启动 Pencil...${NC}"
"$PENCIL_EXEC" "$@"
# 保存退出代码
EXIT_CODE=$?
# 显示退出信息
if [ $EXIT_CODE -eq 0 ]; then
echo -e "${GREEN}Pencil 已正常退出${NC}"
else
echo -e "${RED}Pencil 退出异常 (退出码: $EXIT_CODE)${NC}"
echo -e "${YELLOW}请检查日志: ~/.config/Pencil/logs/main.log${NC}"
fi
exit $EXIT_CODE
运行的时候可能会报错,例如显示:Pencil-1.1.1-linux-x64/chrome-sandbox is owned by root and has mode 4755.
这时候使用如下命令:
sudo chown root:root chrome-sandbox
sudo chmod 4755 chrome-sandbox
然后再去启动脚本应该就可以了正常启动了,欢迎佬们补充更好的方案。