{
  "markdown": "# cc-boost\n\n> 开源的 Claude Code 输出过滤插件，通过 PreToolUse Hook 拦截 Bash 命令，减少 Token 消耗、解决脚手架交互阻塞问题。\n\n---\n\n## 功能\n\n### 1. 输出过滤（Output Filter）\n\n将 Bash 命令包装为管道，在输出到达 Claude 前进行清洗：\n\n- **ANSI 剥离**：去除颜色控制符，这些非打印字符原样进 LLM 白白消耗 Token\n- **进度条折叠**：`\\r` 刷新行合并为一条，`npm install` 的 300 行进度 → 1 行结果\n- **Stack Trace 折叠**：连续的 `node_modules` / `node:internal` 帧合并，只保留业务代码帧\n- **命令专属规则**：`npm install` 自动加 `--no-fund --no-audit`，`jest`/`vitest` 只保留失败块等\n- **Token 预算截断**：超过 2000 token 上限时智能裁剪，优先保留错误信息\n\n**Stack Trace 示例：**\n\n```\n# 过滤前（22 行）\nTypeError: Cannot read properties of undefined (reading 'map')\n    at processItems (/app/src/utils.ts:42:18)\n    at Object.<anonymous> (/app/node_modules/express/lib/router/index.js:284:7)\n    at Function.process_params (/app/node_modules/express/lib/router/index.js:346:12)\n    ... 14 行 node_modules 内部帧 ...\n    at runTest (/app/src/runner.ts:88:5)\n    at main (/app/src/index.ts:15:3)\n\n# 过滤后（5 行）\nTypeError: Cannot read properties of undefined (reading 'map')\n    at processItems (/app/src/utils.ts:42:18)\n    ... [14 internal frames hidden by cc-boost: express ×10, body-parser ×2, raw-body ×2]\n    at runTest (/app/src/runner.ts:88:5)\n    at main (/app/src/index.ts:15:3)\n```\n\n### 2. 脚手架命令拦截（Interactive Command Interception）\n\n`create-next-app`、`create vite` 等工具依赖 TTY 键盘交互界面，Claude Code 无法操作，命令会挂起。\n\ncc-boost 在命令执行前拦截，让 Claude 向用户确认配置项，再用 CLI flags 重新执行，完全绕过交互界面。\n\n**支持的框架：**\n\n| 框架 | 触发命令 |\n|------|---------|\n| Next.js | `npx create-next-app` |\n| Vite | `npm/pnpm/yarn create vite` |\n| SvelteKit | `npm/pnpm create svelte` |\n| Remix | `npx create-remix` |\n| Angular | `npx @angular/cli new` / `ng new` |\n\n---\n\n## 安装\n\n需要 Node.js >= 18。\n\n```bash\ngit clone https://github.com/sworddut/cc-boost\ncd cc-boost\nnpm install\nnpm run install:plugin\n```\n\n`install:plugin` 会自动完成：\n1. 编译 TypeScript 源码\n2. 复制插件文件到 `~/.claude/plugins/marketplaces/cc-boost/plugin/`\n3. 在 `~/.claude/settings.json` 注册 hooks\n4. 安装运行时依赖\n\n重启 Claude Code 后生效。\n\n---\n\n## 配置\n\n### 全局配置\n\n`~/.cc-boost/config.json`：\n\n```json\n{\n  \"budget\": 2000,\n  \"disabled\": false,\n  \"rules\": {\n    \"npm install\": {\n      \"appendArgs\": [\"--no-fund\", \"--no-audit\"],\n      \"filterLines\": [\"npm warn\", \"npm notice\"]\n    },\n    \"jest\": { \"keepOnlyFailing\": true },\n    \"eslint\": { \"filterSeverity\": [\"warning\"] },\n    \"git log\": { \"maxLines\": 20 }\n  },\n  \"stackTrace\": {\n    \"foldNodeModules\": true,\n    \"foldNodeInternal\": true,\n    \"keepUserFrames\": \"all\"\n  },\n  \"excludeCommands\": [\"ls\", \"pwd\", \"echo\", \"cat\"]\n}\n```\n\n### 项目级配置\n\n在项目根目录创建 `.cc-boost.json`，会覆盖全局配置中的对应字段。\n\n### 禁用插件\n\n在 `~/.claude/settings.json` 中添加：\n\n```json\n{\n  \"enabledPlugins\": {\n    \"cc-boost\": false\n  }\n}\n```\n\n---\n\n## 工作原理\n\ncc-boost 注册两个 Claude Code Hooks：\n\n**Setup Hook** — 会话启动时检查依赖，有更新时自动安装。\n\n**PreToolUse Hook (Bash)** — 每次 Bash 工具调用前：\n\n```\nClaude 准备执行 Bash 命令\n        ↓\nPreToolUse Hook 接收命令\n        ↓\n[1] 是否为交互式脚手架命令？\n    是，且无配置 flags → 返回 deny，附带结构化问题清单\n                         Claude 向用户确认后携带 flags 重新执行\n        ↓\n[2] 包装为过滤管道\n    \"npm install react\" → \"(npm install react --no-fund --no-audit) 2>&1 | node filter.cjs\"\n        ↓\nClaude 看到过滤后的干净输出\n```\n\n---\n\n## 开发\n\n```bash\nnpm run build        # 编译\nnpm run test         # 运行测试\nnpm run typecheck    # 类型检查\n```\n\n日志文件：`~/.cc-boost/cc-boost.log`\n\n---\n\n## 项目结构\n\n```\nsrc/\n├── hooks/\n│   ├── pre-tool-use.ts     # PreToolUse hook 入口\n│   ├── smart-install.ts    # Setup hook（依赖安装）\n│   ├── hook-response.ts    # Hook 响应格式\n│   └── stdin-reader.ts     # JSON 完整检测读取（不等 EOF）\n├── filter/\n│   ├── pipeline.ts         # 过滤管道组装\n│   ├── ansi-stripper.ts\n│   ├── progress-reducer.ts\n│   ├── stack-trace-cropper.ts\n│   ├── command-rules.ts\n│   └── token-budget.ts\n├── interactive/\n│   ├── registry.ts         # 框架注册表\n│   ├── detector.ts         # 已配置检测（放行判断）\n│   ├── handler.ts          # Block response 生成\n│   └── frameworks/         # next / vite / svelte / remix / angular\n├── config/\n│   └── loader.ts           # 配置文件加载\n└── shared/\n    ├── paths.ts            # 路径解析\n    ├── logger.ts\n    └── constants.ts\n```\n\n---\n\n## License\n\nMIT\n",
  "bytes": 3996,
  "sha": "771ab7bd86c767a594322afd90af36d1b735d7592f117ee661532ebb0e635cee",
  "repo_slug": "sworddut/cc-boost",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_sworddut_cc_boost_cc_boost_772802a0/readme"
}