[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-pchalasani--claude-code-tools":3,"tool-pchalasani--claude-code-tools":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",150037,2,"2026-04-10T23:33:47",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":67,"readme_en":68,"readme_zh":69,"quickstart_zh":70,"use_case_zh":71,"hero_image_url":72,"owner_login":73,"owner_name":74,"owner_avatar_url":75,"owner_bio":76,"owner_company":77,"owner_location":78,"owner_email":79,"owner_twitter":73,"owner_website":80,"owner_url":81,"languages":82,"stars":111,"forks":112,"last_commit_at":113,"license":114,"difficulty_score":32,"env_os":115,"env_gpu":116,"env_ram":116,"env_deps":117,"category_tags":124,"github_topics":125,"view_count":32,"oss_zip_url":135,"oss_zip_packed_at":135,"status":17,"created_at":136,"updated_at":137,"faqs":138,"releases":166},6501,"pchalasani\u002Fclaude-code-tools","claude-code-tools","Practical productivity tools for Claude Code, Codex-CLI, and similar CLI coding agents.","claude-code-tools 是一套专为 Claude Code、Codex-CLI 等命令行编程助手打造的实用效率增强套件。它通过提供丰富的 CLI 工具、技能模块、智能体（Agents）、钩子（Hooks）及插件，显著提升了开发者在终端环境中与 AI 协作的流畅度与能力边界。\n\n这套工具主要解决了原生命令行 AI 助手在功能扩展性、上下文管理及外部集成方面的局限。例如，它内置了本地知识库搜索（aichat-search）、安全的会话状态管理（env-safe）、终端多路复用集成（tmux-cli）以及 Google Docs\u002FSheets 深度互联等功能，让 AI 不仅能写代码，还能安全地操作复杂环境、检索私有文档并处理办公数据。此外，其独特的“安全钩子”机制能在执行敏感操作前进行拦截确认，有效降低了自动化编码的风险。\n\nclaude-code-tools 非常适合经常使用命令行进行开发的专业工程师、技术研究人员以及希望将 AI 深度融入工作流的极客用户。无论你需要更强大的代码上下文理解，还是希望安全地连接外部数据源，它都能通过模块化设计灵活满足需求，让终端里的 AI 助手变","claude-code-tools 是一套专为 Claude Code、Codex-CLI 等命令行编程助手打造的实用效率增强套件。它通过提供丰富的 CLI 工具、技能模块、智能体（Agents）、钩子（Hooks）及插件，显著提升了开发者在终端环境中与 AI 协作的流畅度与能力边界。\n\n这套工具主要解决了原生命令行 AI 助手在功能扩展性、上下文管理及外部集成方面的局限。例如，它内置了本地知识库搜索（aichat-search）、安全的会话状态管理（env-safe）、终端多路复用集成（tmux-cli）以及 Google Docs\u002FSheets 深度互联等功能，让 AI 不仅能写代码，还能安全地操作复杂环境、检索私有文档并处理办公数据。此外，其独特的“安全钩子”机制能在执行敏感操作前进行拦截确认，有效降低了自动化编码的风险。\n\nclaude-code-tools 非常适合经常使用命令行进行开发的专业工程师、技术研究人员以及希望将 AI 深度融入工作流的极客用户。无论你需要更强大的代码上下文理解，还是希望安全地连接外部数据源，它都能通过模块化设计灵活满足需求，让终端里的 AI 助手变得更加全能且可靠。","\u003Cdiv align=\"center\">\n\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002F\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fpchalasani_claude-code-tools_readme_ce8f393df2b0.png\" alt=\"CLAUDE CODE TOOLS\"\n     width=\"500\"\u002F>\n\u003C\u002Fa>\n\nCLI tools, skills, agents, hooks, and plugins for enhancing productivity with Claude Code and other coding agents.\n\n[![Documentation](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F%F0%9F%93%96-documentation-blue)](https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002F)\n[![aichat-search](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fpchalasani\u002Fclaude-code-tools?filter=rust-v*&label=aichat-search&color=orange)](https:\u002F\u002Fgithub.com\u002Fpchalasani\u002Fclaude-code-tools\u002Freleases?q=rust)\n\n\u003C\u002Fdiv>\n\n## [Full Documentation](https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002F)\n\n## Install\n\n```bash\n# Core package\nuv tool install claude-code-tools\n\n# With Google Docs\u002FSheets extras\nuv tool install \"claude-code-tools[gdocs]\"\n\n# Upgrade an existing installation\nuv tool install --force claude-code-tools\n```\n\nThe search engine (`aichat search`) requires a\nseparate Rust binary:\n\n- **Homebrew** (macOS\u002FLinux):\n  `brew install pchalasani\u002Ftap\u002Faichat-search`\n- **Cargo**: `cargo install aichat-search`\n- **Pre-built binary**:\n  [Releases](https:\u002F\u002Fgithub.com\u002Fpchalasani\u002Fclaude-code-tools\u002Freleases)\n  (look for `rust-v*`)\n\nInstall the Claude Code\n[plugins](https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Fgetting-started\u002Fplugins\u002F)\nfor hooks, skills, and agents:\n\n```bash\nclaude plugin marketplace add pchalasani\u002Fclaude-code-tools\n```\n\n---\n\nClick a card to jump to that feature, or\n**[read the full docs](https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002F)**.\n\n\u003Cdiv align=\"center\">\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Fgetting-started\u002F\">\n\u003Cimg src=\"assets\u002Fcard-quickstart.svg\" alt=\"quick start\" width=\"300\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Fgetting-started\u002Fplugins\u002F\">\n\u003Cimg src=\"assets\u002Fcard-plugins.svg\" alt=\"plugins\" width=\"300\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Ftools\u002Faichat\u002F\">\n\u003Cimg src=\"assets\u002Fcard-aichat.svg\" alt=\"aichat\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Ftools\u002Ftmux-cli\u002F\">\n\u003Cimg src=\"assets\u002Fcard-tmux.svg\" alt=\"tmux-cli\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Ftools\u002Flmsh\u002F\">\n\u003Cimg src=\"assets\u002Fcard-lmsh.svg\" alt=\"lmsh\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Ftools\u002Fvault\u002F\">\n\u003Cimg src=\"assets\u002Fcard-vault.svg\" alt=\"vault\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Ftools\u002Fenv-safe\u002F\">\n\u003Cimg src=\"assets\u002Fcard-env-safe.svg\" alt=\"env-safe\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Fplugins-detail\u002Fsafety-hooks\u002F\">\n\u003Cimg src=\"assets\u002Fcard-safety.svg\" alt=\"safety\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Ftools\u002Fstatusline\u002F\">\n\u003Cimg src=\"assets\u002Fcard-statusline.svg\" alt=\"statusline\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Fintegrations\u002Fgoogle-docs\u002F\">\n\u003Cimg src=\"assets\u002Fcard-gdocs.svg\" alt=\"gdocs\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Fintegrations\u002Fgoogle-sheets\u002F\">\n\u003Cimg src=\"assets\u002Fcard-gsheets.svg\" alt=\"gsheets\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Fintegrations\u002Falt-llm-providers\u002F\">\n\u003Cimg src=\"assets\u002Fcard-alt.svg\" alt=\"alt\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Fplugins-detail\u002Fvoice\u002F\">\n\u003Cimg src=\"assets\u002Fcard-voice.svg\" alt=\"voice\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Ftools\u002Ffix-session\u002F\">\n\u003Cimg src=\"assets\u002Fcard-session-repair.svg\" alt=\"session repair\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Fdevelopment\u002F\">\n\u003Cimg src=\"assets\u002Fcard-dev.svg\" alt=\"development\" width=\"300\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\">\n\u003Ca href=\"LICENSE\">\n\u003Cimg src=\"assets\u002Fcard-license.svg\" alt=\"license\" width=\"300\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003C\u002Fdiv>\n\n---\n\n> **Legacy links** — The sections below exist to\n> preserve links shared in earlier discussions.\n> For current documentation, visit the\n> [full docs site](https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002F).\n\n\u003Ca id=\"aichat-session-management\">\u003C\u002Fa>\n## aichat — Session Management\nSee [aichat](https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Ftools\u002Faichat\u002F) in the full documentation.\n\n\u003Ca id=\"tmux-cli-terminal-automation\">\u003C\u002Fa>\n## tmux-cli — Terminal Automation\nSee [tmux-cli](https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Ftools\u002Ftmux-cli\u002F) in the full documentation.\n\n\u003Ca id=\"voice\">\u003C\u002Fa>\n## Voice Plugin\nSee [Voice](https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Fplugins-detail\u002Fvoice\u002F) in the full documentation.\n\n\u003Ca id=\"license\">\u003C\u002Fa>\n## License\n\nMIT\n","\u003Cdiv align=\"center\">\n\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002F\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fpchalasani_claude-code-tools_readme_ce8f393df2b0.png\" alt=\"CLAUDE CODE TOOLS\"\n     width=\"500\"\u002F>\n\u003C\u002Fa>\n\n用于提升 Claude Code 及其他编码智能体生产力的 CLI 工具、技能、代理、钩子和插件。\n\n[![文档](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F%F0%9F%93%96-documentation-blue)](https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002F)\n[![aichat-search](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fpchalasani\u002Fclaude-code-tools?filter=rust-v*&label=aichat-search&color=orange)](https:\u002F\u002Fgithub.com\u002Fpchalasani\u002Fclaude-code-tools\u002Freleases?q=rust)\n\n\u003C\u002Fdiv>\n\n## [完整文档](https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002F)\n\n## 安装\n\n```bash\n# 核心包\nuv tool install claude-code-tools\n\n# 包含 Google Docs\u002FSheets 扩展\nuv tool install \"claude-code-tools[gdocs]\"\n\n# 升级现有安装\nuv tool install --force claude-code-tools\n```\n\n搜索引擎（`aichat search`）需要单独的 Rust 二进制文件：\n\n- **Homebrew**（macOS\u002FLinux）：\n  `brew install pchalasani\u002Ftap\u002Faichat-search`\n- **Cargo**：`cargo install aichat-search`\n- **预编译二进制文件**：\n  [发布页面](https:\u002F\u002Fgithub.com\u002Fpchalasani\u002Fclaude-code-tools\u002Freleases)\n  （查找 `rust-v*`）\n\n安装 Claude Code 的\n[插件](https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Fgetting-started\u002Fplugins\u002F)\n以获取钩子、技能和代理：\n\n```bash\nclaude plugin marketplace add pchalasani\u002Fclaude-code-tools\n```\n\n---\n\n点击卡片跳转至相应功能，或\n**[阅读完整文档](https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002F)**。\n\n\u003Cdiv align=\"center\">\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Fgetting-started\u002F\">\n\u003Cimg src=\"assets\u002Fcard-quickstart.svg\" alt=\"快速入门\" width=\"300\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Fgetting-started\u002Fplugins\u002F\">\n\u003Cimg src=\"assets\u002Fcard-plugins.svg\" alt=\"插件\" width=\"300\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Ftools\u002Faichat\u002F\">\n\u003Cimg src=\"assets\u002Fcard-aichat.svg\" alt=\"aichat\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Ftools\u002Ftmux-cli\u002F\">\n\u003Cimg src=\"assets\u002Fcard-tmux.svg\" alt=\"tmux-cli\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Ftools\u002Flmsh\u002F\">\n\u003Cimg src=\"assets\u002Fcard-lmsh.svg\" alt=\"lmsh\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Ftools\u002Fvault\u002F\">\n\u003Cimg src=\"assets\u002Fcard-vault.svg\" alt=\"vault\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Ftools\u002Fenv-safe\u002F\">\n\u003Cimg src=\"assets\u002Fcard-env-safe.svg\" alt=\"env-safe\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Fplugins-detail\u002Fsafety-hooks\u002F\">\n\u003Cimg src=\"assets\u002Fcard-safety.svg\" alt=\"safety\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Ftools\u002Fstatusline\u002F\">\n\u003Cimg src=\"assets\u002Fcard-statusline.svg\" alt=\"statusline\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Fintegrations\u002Fgoogle-docs\u002F\">\n\u003Cimg src=\"assets\u002Fcard-gdocs.svg\" alt=\"gdocs\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Fintegrations\u002Fgoogle-sheets\u002F\">\n\u003Cimg src=\"assets\u002Fcard-gsheets.svg\" alt=\"gsheets\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Fintegrations\u002Falt-llm-providers\u002F\">\n\u003Cimg src=\"assets\u002Fcard-alt.svg\" alt=\"alt\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Fplugins-detail\u002Fvoice\u002F\">\n\u003Cimg src=\"assets\u002Fcard-voice.svg\" alt=\"voice\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Ftools\u002Ffix-session\u002F\">\n\u003Cimg src=\"assets\u002Fcard-session-repair.svg\" alt=\"会话修复\" width=\"200\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Fdevelopment\u002F\">\n\u003Cimg src=\"assets\u002Fcard-dev.svg\" alt=\"开发\" width=\"300\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\">\n\u003Ca href=\"LICENSE\">\n\u003Cimg src=\"assets\u002Fcard-license.svg\" alt=\"许可证\" width=\"300\"\u002F>\n\u003C\u002Fa>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003C\u002Fdiv>\n\n---\n\n> **旧版链接** — 下方各节旨在保留早期讨论中分享的链接。如需最新文档，请访问\n> [完整文档网站](https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002F)。\n\n\u003Ca id=\"aichat-session-management\">\u003C\u002Fa>\n## aichat — 会话管理\n请参阅完整文档中的 [aichat](https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Ftools\u002Faichat\u002F)。\n\n\u003Ca id=\"tmux-cli-terminal-automation\">\u003C\u002Fa>\n## tmux-cli — 终端自动化\n请参阅完整文档中的 [tmux-cli](https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Ftools\u002Ftmux-cli\u002F)。\n\n\u003Ca id=\"voice\">\u003C\u002Fa>\n## 语音插件\n请参阅完整文档中的 [Voice](https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002Fplugins-detail\u002Fvoice\u002F)。\n\n\u003Ca id=\"license\">\u003C\u002Fa>\n## 许可证\n\nMIT","# claude-code-tools 快速上手指南\n\n`claude-code-tools` 是一套专为 Claude Code 及其他编码智能体设计的 CLI 工具集，包含技能（skills）、代理（agents）、钩子（hooks）和插件，旨在显著提升开发生产力。\n\n## 环境准备\n\n*   **操作系统**：macOS 或 Linux（Windows 用户建议通过 WSL2 使用）。\n*   **前置依赖**：\n    *   **Python 环境**：需安装 `uv` 包管理器（推荐）或兼容的 Python 环境。\n    *   **Rust 环境**（可选但推荐）：若需使用 `aichat search` 搜索引擎功能，需安装 Rust 工具链或对应二进制文件。\n    *   **Claude Code**：确保已安装并配置好 Claude Code 客户端。\n\n## 安装步骤\n\n### 1. 安装核心工具包\n使用 `uv` 安装核心命令行工具：\n\n```bash\n# 安装核心包\nuv tool install claude-code-tools\n\n# 如需集成 Google Docs\u002FSheets 额外功能\nuv tool install \"claude-code-tools[gdocs]\"\n\n# 升级现有安装\nuv tool install --force claude-code-tools\n```\n\n### 2. 安装搜索引擎组件（可选）\n若需使用 `aichat search` 功能，请根据系统选择以下任一方式安装独立的 Rust 二进制文件：\n\n*   **Homebrew (macOS\u002FLinux)**:\n    ```bash\n    brew install pchalasani\u002Ftap\u002Faichat-search\n    ```\n*   **Cargo (Rust)**:\n    ```bash\n    cargo install aichat-search\n    ```\n*   **预编译二进制**:\n    前往 [Releases 页面](https:\u002F\u002Fgithub.com\u002Fpchalasani\u002Fclaude-code-tools\u002Freleases) 下载标记为 `rust-v*` 的文件。\n\n### 3. 安装 Claude Code 插件\n为了启用钩子、技能和代理功能，需在 Claude Code 中注册插件：\n\n```bash\nclaude plugin marketplace add pchalasani\u002Fclaude-code-tools\n```\n\n## 基本使用\n\n安装完成后，工具将自动集成到 Claude Code 会话中。以下是几种典型的使用场景：\n\n### 场景一：调用内置技能与代理\n在 Claude Code 对话中，你可以直接通过自然语言调用已安装的技能。例如，请求代码审查或使用特定框架生成代码：\n\n```text\n\u002Fask 使用 vault 工具检查当前项目的敏感信息泄露风险\n```\n或者让 Agent 自动执行任务：\n```text\n请使用 tmux-cli 代理在当前终端会话中运行测试并监控输出\n```\n\n### 场景二：使用终端自动化工具 (tmux-cli)\n直接在命令行中调用工具来管理终端会话（需确保 tmux 已安装）：\n\n```bash\n# 示例：列出当前活跃的 tmux 会话供 AI 参考\naichat tmux list-sessions\n```\n\n### 场景三：安全与环境检查\n利用 `env-safe` 或安全钩子自动扫描环境变量安全性：\n\n```text\n\u002Fcheck 运行 env-safe 检查当前 shell 环境是否存在不安全配置\n```\n\n> **提示**：更多高级功能（如语音插件、Google 文档集成、会话修复等）的详细指令请参阅 [完整文档](https:\u002F\u002Fpchalasani.github.io\u002Fclaude-code-tools\u002F)。","资深后端工程师正在利用 Claude Code 重构一个遗留的微服务项目，需要频繁查阅内部文档、管理敏感环境变量并监控长时运行的构建任务。\n\n### 没有 claude-code-tools 时\n- **信息检索断裂**：遇到不熟悉的内部 API 时，必须手动切换浏览器搜索官方文档或翻阅分散的 Wiki，打断编码心流。\n- **安全隐患高**：在让 AI 生成涉及数据库密码的代码时，需极度小心避免将真实密钥粘贴进对话框，心理负担重且易出错。\n- **上下文丢失**：运行耗时较长的编译或测试命令时，无法在后台持续监控进度，一旦切换终端窗口就容易丢失输出日志。\n- **协作效率低**：需要将 AI 生成的架构方案整理成 Google Docs 分享给团队，只能手动复制粘贴代码块和文字，格式调整繁琐。\n\n### 使用 claude-code-tools 后\n- **无缝知识获取**：通过集成的 `aichat-search` 技能，直接在 CLI 中检索内部技术文档，AI 能即时引用最新规范解答疑问。\n- **自动化安全隔离**：利用 `env-safe` 工具自动识别并屏蔽敏感环境变量，确保 AI 在不知晓真实密钥的前提下仍能生成正确的配置代码。\n- **沉浸式任务监控**：借助 `tmux-cli` 集成，在独立的 tmux 会话中后台运行构建任务，主终端可继续编写新代码，随时查看实时状态行。\n- **一键文档同步**：调用 Google Docs 插件，将 AI 梳理的重构方案直接格式化输出为共享文档，保留代码高亮与层级结构，实现“对话即文档”。\n\nclaude-code-tools 通过将搜索、安全、会话管理和外部协作能力原生植入命令行工作流，让开发者从繁琐的上下文切换中解放，真正实现与 AI 代理的无缝结对编程。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fpchalasani_claude-code-tools_8a3fdae7.png","pchalasani","Prasad Chalasani","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fpchalasani_f0aab0aa.jpg","LLM\u002FML research\u002Fpractice.\r\n\r\nBuilding langroid, the easiest way to develop LLM-agent-oriented systems.\r\nhttps:\u002F\u002Fgithub.com\u002Flangroid\u002Flangroid","MLResearch","Pittsburgh, PA","pchalasani@gmail.com","https:\u002F\u002Fgithub.com\u002Flangroid\u002Flangroid","https:\u002F\u002Fgithub.com\u002Fpchalasani",[83,87,91,95,99,103,107],{"name":84,"color":85,"percentage":86},"Python","#3572A5",71.2,{"name":88,"color":89,"percentage":90},"Rust","#dea584",15,{"name":92,"color":93,"percentage":94},"MDX","#fcb32c",6.8,{"name":96,"color":97,"percentage":98},"JavaScript","#f1e05a",5.2,{"name":100,"color":101,"percentage":102},"Shell","#89e051",1.3,{"name":104,"color":105,"percentage":106},"Makefile","#427819",0.6,{"name":108,"color":109,"percentage":110},"TypeScript","#3178c6",0,1713,106,"2026-04-10T09:35:34","MIT","Linux, macOS","未说明",{"notes":118,"python":119,"dependencies":120},"该工具主要通过 'uv' 包管理器安装核心功能。搜索引擎功能 ('aichat search') 需要单独安装 Rust 二进制文件（可通过 Homebrew、Cargo 或预编译包安装）。此外，需安装 Claude Code 插件以启用钩子、技能和代理功能。README 未提及 Windows 支持，主要面向 macOS 和 Linux 用户。","未说明 (通过 uv 工具管理)",[121,122,123],"uv","Rust (用于 aichat-search)","Claude Code CLI",[52,13,35,14],[126,127,128,129,130,131,132,133,134],"claude-code","cli","cli-agent","llm","tmux","code-agent","codex","codex-cli","context",null,"2026-03-27T02:49:30.150509","2026-04-11T10:01:30.948113",[139,144,149,154,158,162],{"id":140,"question_zh":141,"answer_zh":142,"source_url":143},29417,"如何让 LLM 驱动的 tmux 自动化可靠地获取命令的退出码（exit code）？","在 v1.8.0 版本中，已新增 `execute()` 方法来解决此问题。该方法通过回声标记（echo markers）包裹命令，捕获 shell 的 `$?` 变量，并解析输出以返回结构化数据。\n\n使用方法：\n```python\nresult = controller.execute(\"make test\", pane_id=\"ops:1.2\")\n# 返回格式：{\"output\": \"...\", \"exit_code\": 0}\n\nif result[\"exit_code\"] != 0:\n    # 在此处处理失败逻辑\n```\n该功能还包含渐进式回滚捕获（若标记被滚屏则自动扩大捕获行数）和修复后的标记解析逻辑，确保即使在长输出中也能准确提取退出码。","https:\u002F\u002Fgithub.com\u002Fpchalasani\u002Fclaude-code-tools\u002Fissues\u002F42",{"id":145,"question_zh":146,"answer_zh":147,"source_url":148},29418,"TUI 会话预览显示的是系统预加载内容（如 AGENTS.md），如何改为显示第一条真实用户消息？","该问题已由维护者修复。根本原因是预览功能错误地将系统注入的消息（如本地命令注入 `\u003Ccommand-name>`、环境上下文、`isMeta: true` 的标志等）当作了第一条用户消息。\n\n修复方案：\n1. 引入了全局配置 `NON_GENUINE_MSG_PATTERNS` 来过滤掉非真实的用户消息。\n2. 更新了计数逻辑，仅统计真实的用户消息。\n3. 单独跟踪 `first_user_msg`，跳过带有 `isMeta: true` 或以 `\u003Ccommand-name>` \u002F `\u003Clocal-command-stdout>` 开头的消息。\n\n更新后，TUI 预览将正确显示用户实际输入的第一条查询，而非本地命令噪音或系统预加载内容。","https:\u002F\u002Fgithub.com\u002Fpchalasani\u002Fclaude-code-tools\u002Fissues\u002F34",{"id":150,"question_zh":151,"answer_zh":152,"source_url":153},29419,"使用 tmux-cli 发送命令时，偶尔出现 Enter 键未注册或命令未执行的情况，如何解决？","这是由于竞态条件（Race Condition）导致的。当文本和 Enter 键快速连续发送时，如果目标 shell 或应用尚未处理完输入缓冲区，Enter 键可能会丢失。这种情况常发生在 shell 初始化、终端渲染延迟或高负载时。\n\n解决方案：\n1. **推荐做法**：在发送命令文本后，不要立即发送 Enter，而是使用 `wait_idle` 等待目标窗口空闲。例如：\n   ```bash\n   tmux-cli send --pane=\"dev:0.1\" \"some command\"\n   tmux-cli wait_idle --pane=\"dev:0.1\" --idle-time=2.0\n   tmux-cli send --pane=\"dev:0.1\" \"\" --enter=true\n   ```\n   （注：具体参数视版本而定，核心思路是增加延迟或等待空闲）\n2. 确保使用 `tmux-cli` 而不是直接调用原生 `tmux send-keys`，因为前者包含了更稳健的时序处理逻辑。","https:\u002F\u002Fgithub.com\u002Fpchalasani\u002Fclaude-code-tools\u002Fissues\u002F13",{"id":155,"question_zh":156,"answer_zh":157,"source_url":153},29420,"tmux-cli 是什么？它与标准 tmux CLI 有什么关系？","`tmux-cli` 是一个基于 Python 的封装工具（wrapper），旨在增强标准 `tmux` 命令行界面的功能，特别是为了支持 LLM（如 Claude Code）驱动的自动化任务。\n\n主要区别与优势：\n1. **结构化交互**：它不仅发送按键，还能可靠地捕获输出并解析退出码（通过 `execute()` 方法）。\n2. **智能等待**：内置了等待窗口空闲（idle）的逻辑，解决了原生 `send-keys` 常见的时序问题。\n3. **LLM 友好**：专为 AI Agent 设计，能够处理复杂的开发运维环境中的交互式会话，避免了他律性解析输出的脆弱性。\n\n它底层依然调用 `tmux` 命令，但增加了用于自动化控制的元数据和逻辑层。",{"id":159,"question_zh":160,"answer_zh":161,"source_url":148},29421,"为什么我在 TUI 中看到的会话预览仍然是旧的系统消息，即使我已经更新了代码？","这可能是因为混淆了“搜索结果中的片段”和“右侧预览窗格”这两个不同的显示区域。维护者曾指出，早期的修复可能仅应用于搜索列表中的简短摘要，而未同步到右侧的详细预览窗格。\n\n确保修复生效的步骤：\n1. 确认你使用的是包含 `fix\u002Fsession-preview-first` 分支更改的最新版本（或已合并该修复的主分支版本）。\n2. 检查会话索引是否已重建。由于修复涉及过滤逻辑，旧的索引缓存可能仍保留着错误的“第一条消息”记录。尝试清除缓存或重新运行索引构建过程。\n3. 确认会话文件中确实存在非元数据的真实用户消息。如果会话完全由本地命令（如 `\u002Fclear`, `\u002Fplugin`）组成且无其他用户输入，根据新逻辑可能会被过滤掉或显示为空。",{"id":163,"question_zh":164,"answer_zh":165,"source_url":153},29422,"如何在 CLAUDE.md 中配置 tmux-cli 以便与其他 CLI 代理（如 Gemini CLI）交互？","你可以在 `CLAUDE.md` 文件中添加说明，指导 Claude Code 使用 `tmux-cli` 来启动和控制其他 CLI 工具。以下是一个推荐的配置示例：\n\n```markdown\n## tmux-cli Command to interact with CLI applications\n\n`tmux-cli` 是一个 bash 命令，使 Claude Code 能够控制在独立 tmux 窗格中运行的 CLI 应用程序——启动程序、发送输入、捕获输出和管理交互式会话。\n\n示例用法：\n- 启动另一个 Claude Code 实例进行分析或审查。\n- 启动 Web 应用并使用浏览器自动化 MCP 工具进行测试。\n- 与其他 CLI 代理（如 Gemini CLI）交互。\n- 始终使用 `specstory run gemini` 以交互模式运行 gemini cli。\n```\n\n配置后，你可以指示 Claude：\"请在新的 tmux 窗格中运行 `specstory run gemini`\"，它将自动使用 `tmux-cli` 正确处理启动和输入发送，避免时序问题。",[167,172,177,182,187,192,197,202,207,212,217,222,227,232,237,242,247,252,257,262],{"id":168,"version":169,"summary_zh":170,"released_at":171},198246,"v1.10.2","## v1.10.2 — Session Repair + Trim Fixes\n\n### New: `fix-session` CLI\n\nNew CLI tool to detect and repair broken conversation chains in Claude Code sessions caused by [orphan parentUuid references](https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-code\u002Fissues\u002F22107).\n\n```bash\nfix-session f8ddc              # Analyze (accepts partial session IDs)\nfix-session f8ddc --fix --in-place  # Fix in place (.bak backup created)\nfix-session f8ddc --verbose    # Show orphan details\n```\n\nAlso available as a library:\n```python\nfrom claude_code_tools.fix_session import check_and_fix_session\nfixed = check_and_fix_session(Path(\"session.jsonl\"))\n```\n\n### Fixed: `trim-session` producing unusable sessions\n\nThree bugs in session trimming that could leave trimmed sessions over the context limit or broken on resume:\n\n1. **Stale usage metadata** — Trimmed sessions preserved the parent session's `usage` fields (e.g., `cache_read_input_tokens: 192,385`), causing Claude Code to reject the prompt client-side (`model=\u003Csynthetic>`) without even calling the API. Now zeroes out all usage fields; the API populates fresh values on first request.\n\n2. **Tool use inputs not trimmed** — Write\u002FEdit tool calls in assistant messages carried full file contents in their `input` parameters (~99k tokens in a test session), but the trim only truncated tool *results*. Now truncates large string values in `tool_use.input` fields as well.\n\n3. **toolUseResult left intact** — `toolUseResult` (internal undo\u002Fdisplay metadata) is not sent to the API, so truncating it was unnecessary and broke Claude Code's UI rendering. Reverted to leave it untouched.\n\n**Net result:** A test session that was stuck at 222k tokens (over the 200k limit) after trimming now comes in at ~163k tokens.\n\n### Also included\n\n- Safety-hooks plugin v1.10.1: enhanced `rm` detection in pipes, backgrounds, and subshells (credit: @fizz)","2026-02-05T20:54:49",{"id":173,"version":174,"summary_zh":175,"released_at":176},198247,"v1.10.1","## safety-hooks Plugin Security Enhancement\n\nEnhanced `rm_block_hook` to detect rm commands hidden in shell operators and subshells.\n\n### Key Changes\n\n- **Command Extraction Utilities**\n  - Enhanced `extract_subcommands()`: split on all operators (&&, ||, ;, |, &)\n  - New `extract_subshell_commands()`: detects commands in $() and backticks with balanced paren scanning\n  - New `extract_all_commands()`: recursive extraction including nested subshells\n\n- **rm Block Hook**\n  - Refactored to use `extract_all_commands()` for comprehensive detection\n  - Catches all bypass attempts: pipes, background, subshells, nested subshells\n\n- **Test Coverage**\n  - 57 new tests covering all operators, subshell syntaxes, and security regression tests\n\nCredit to @fizz for the original fix for pipe\u002Fbackground operator bypass (PR #52).\n\nSee PR #53 for full details.","2026-02-04T15:34:02",{"id":178,"version":179,"summary_zh":180,"released_at":181},198248,"v1.10.0","## New: Google Sheets Tools\n\nTwo new CLI commands for working with Google Sheets:\n\n### csv2gsheet\nUpload CSV files to Google Drive as native Google Sheets.\n\n```bash\ncsv2gsheet data.csv                          # Upload to root\ncsv2gsheet data.csv --folder \"Reports\u002FData\"  # Upload to folder\ncsv2gsheet data.csv --name \"Q4 Sales\"        # Custom name\n```\n\n### gsheet2csv\nDownload Google Sheets as CSV files.\n\n```bash\ngsheet2csv \"My Spreadsheet\"                    # Download from root\ngsheet2csv \"My Spreadsheet\" --folder \"Reports\" # From folder\ngsheet2csv \"My Spreadsheet\" --sheet \"Sheet2\"   # Specific tab\ngsheet2csv --list --folder Reports             # List spreadsheets\n```\n\nUses the same OAuth credentials as md2gdoc\u002Fgdoc2md.\n\n---\n\n## Voice Plugin v1.9.2\n\nSmarter voice summaries with multi-hook architecture:\n\n- **Instant extraction**: Agent writes `📢` marker inline, stop hook extracts it (no API call)\n- **Silent hooks**: `additionalContext` injection - no terminal noise\n- **Flexible limits**: 1.5× word limit for explicit summaries\n- **just_disabled flag**: One-time \"don't add summaries\" injection when voice is disabled\n\nSee [plugins\u002Fvoice\u002FCHANGELOG.md](https:\u002F\u002Fgithub.com\u002Fpchalasani\u002Fclaude-code-tools\u002Fblob\u002Fmain\u002Fplugins\u002Fvoice\u002FCHANGELOG.md) for details.","2026-01-29T19:50:31",{"id":183,"version":184,"summary_zh":185,"released_at":186},198249,"v1.9.2","## Voice Plugin v1.9.2 - Smarter Summary Extraction\n\nMajor improvements to the voice plugin for faster, quieter, and more reliable voice feedback.\n\n### Highlights\n\n- **Instant summaries**: Extracts inline `📢` markers directly - no API call needed\n- **Silent hooks**: Uses `additionalContext` for noise-free terminal output\n- **Persistent reminders**: UserPromptSubmit + PostToolUse hooks keep voice instructions fresh\n- **Tone matching**: Summaries now match user's style (including colorful language)\n- **25-word limit**: Concise voice output enforced across all strategies\n\n### Details\n\nSee the full changelog: [plugins\u002Fvoice\u002FCHANGELOG.md](https:\u002F\u002Fgithub.com\u002Fpchalasani\u002Fclaude-code-tools\u002Fblob\u002Fmain\u002Fplugins\u002Fvoice\u002FCHANGELOG.md)","2026-01-29T00:03:11",{"id":188,"version":189,"summary_zh":190,"released_at":191},198250,"v1.9.1","## v1.9.1 - tmux-cli Pane Consistency Fix\n\n### tmux-cli: Consistent TMUX_PANE usage (PR #49, #51)\n\nFixed inconsistent pane\u002Fwindow reference behavior when running\ntmux-cli inside tmux. Previously, different methods used different\nreference points (`TMUX_PANE` vs focused pane), causing confusion\nwhen the user switched to a different tmux window while a tool was\nrunning.\n\n- `status()` now uses `TMUX_PANE` with `-t` flag, consistent\n  with `list_panes()` and `create_pane()`\n- Added return code checking in `status()` to handle failed tmux\n  commands gracefully\n- Added pane verification in `create_pane()` with fallback to\n  diff-based pane discovery for edge cases (stale pane IDs,\n  rapid creation\u002Fdestruction)\n- Deterministic pane selection via `min()` instead of `set.pop()`\n\nThanks to @chuggies510 for the original fix (#49).","2026-01-27T23:33:21",{"id":193,"version":194,"summary_zh":195,"released_at":196},198251,"v1.9.0","## v1.9.0 - Google Docs Image Support\n\nFull image round-tripping for the Google Docs tools (`md2gdoc` and `gdoc2md`).\n\n### md2gdoc — Image Upload\n\nLocal images referenced in markdown (e.g., `![alt](diagram.png)`) are now\nautomatically uploaded to Google Drive at **full resolution**, then inserted\ninto the Google Doc via the Docs API with proper display sizing to fit within\nthe page width.\n\n- Images are uploaded to Drive, then post-inserted via `InsertInlineImage`\n  with explicit `objectSize` — no pixel-level resizing, no resolution loss\n- `--max-image-width` controls display width in inches (default: 6.5)\n- `--no-images` skips image processing entirely\n- Missing image references are stripped to prevent Google's converter from\n  crashing (HTTP 500)\n- Adds Google Docs API scope (one-time re-auth required)\n- New dependency: `Pillow>=10.0.0` (in the `gdocs` extra)\n\n### gdoc2md — Image Extraction\n\nEmbedded images are now **extracted to local files by default** instead of\nbeing stripped to placeholders.\n\n- Base64 image data is decoded and written to files alongside the markdown\n  (e.g., `report_001.png`, `report_002.png`)\n- Markdown references are rewritten to use local file paths\n- Handles both inline and reference-style base64 image syntax\n- `--no-images` strips to placeholders (old default behavior)\n- `--keep-base64` keeps base64 data inline\n\n### Other Changes\n\n- Voice plugin: custom prompt support and 50-word limit\n- Hooks: defensive bash wrapper to prevent blocking on missing files","2026-01-27T18:41:17",{"id":198,"version":199,"summary_zh":200,"released_at":201},198252,"v1.8.4","## v1.8.4 - Plugin Improvements\n\n### voice plugin\n- Simplified voice summary prompt - intuitive framing instead of 7 prescriptive rules\n- Better tone matching - mirrors user's casual\u002Fcolorful language\n- Enforces 1-2 sentence max, never longer than original message\n- Defensive bash wrapper - approves instead of blocking if hook file missing\n\n### tmux-cli plugin\n- Document `execute` as a CLI command (was incorrectly listed as Python API only)\n- `tmux-cli execute \"cmd\" --pane=2` returns JSON with output and exit_code\n\n### aichat plugin\n- Defensive bash wrapper - approves instead of blocking if hook file missing\n\n### All plugins\n- Bump versions to 1.8.4","2026-01-23T13:48:04",{"id":203,"version":204,"summary_zh":205,"released_at":206},198253,"v1.8.3","## v1.8.3 - Plugin Updates Only\n\nNo changes to core functions, methods, or tools. This release updates plugins only.\n\n### voice plugin\n- Replace blocking stop hook with auto-summarizing approach\n- Uses headless Claude (Opus) instead of blocking for voice summaries\n- Avoids meta-narration - states content directly\n\n### aichat plugin\n- Add defensive coding guardrails to UserPromptSubmit hook\n- Stricter pattern matching prevents false triggers on unrelated prompts","2026-01-22T19:51:18",{"id":208,"version":209,"summary_zh":210,"released_at":211},198254,"rust-v0.3.0","## aichat-search v0.3.0\n\nPre-built binaries for the Rust search TUI.\n\n**Install\u002FUpgrade:**\n- Homebrew: `brew upgrade aichat-search`\n- Cargo: `cargo install aichat-search`\n- Or download binary below\n","2026-01-20T16:38:59",{"id":213,"version":214,"summary_zh":215,"released_at":216},198235,"v1.11.1","## 错误修复\n\n**修复：`aichat search --claude-home` 的恢复操作现已正常工作** ([#63](https:\u002F\u002Fgithub.com\u002Fpchalasani\u002Fclaude-code-tools\u002Fpull\u002F63))\n\n当使用 `aichat search --claude-home \u003Cpath>` 时，选择会话并点击“按原样恢复”会提示“未找到会话”的错误，尽管该会话确实存在于指定的主目录下。问题在于 `action_handler` 闭包未能将会话字典中的 `claude_home`\u002F`codex_home` 参数传递给 `execute_action`，导致其回退到默认的 `~\u002F.claude` 目录。\n\n## 文档\n\n- 已将 `gdoc2docx` 添加到 Starlight Google Docs 文档页面。","2026-03-26T18:24:03",{"id":218,"version":219,"summary_zh":220,"released_at":221},198236,"v1.11.0","## 新功能\n\n- **`gdoc2docx`** — 新的命令行工具，用于将 Google 文档下载为 Word (.docx) 文件。支持原生 Google 文档的直接导出、Drive 上现有 DOCX 文件的透传下载，以及通过临时 Google 文档将 DOC\u002FODT 格式转换为 DOCX。该工具与 `md2gdoc`\u002F`gdoc2md` 共用身份验证基础设施。","2026-03-20T00:33:49",{"id":223,"version":224,"summary_zh":225,"released_at":226},198237,"v1.10.10","## Bug修复\n\n- **修复：`--claude-home` 标志被 `aichat search` 忽略** — 当 `--claude-home` 放在子命令名称之后时（例如 `aichat search --claude-home ~\u002F.claude-rja`），组回调无法识别该标志，因此 `auto_index` 会回退到 `~\u002F.claude`。现在会扫描 `sys.argv` 来解析 `--claude-home`\u002F`--codex-home`，无论其位置如何。\n\n## 测试\n\n- 添加了针对 `--claude-home` 解析的回归测试（CLI 参数位置、环境变量 fallback、CLI 覆盖环境变量、与 `--codex-home` 的一致性）。","2026-03-19T22:26:43",{"id":228,"version":229,"summary_zh":230,"released_at":231},198238,"v1.10.9","## 错误修复\n\n### Codex 会话 ID 解析\n\n修复了一个 bug：`aichat resume`、`move`、`clone`、`query`、`info` 和 `lineage` 命令在处理 Codex 会话时会失败。Codex 会话文件的命名格式为 `rollout-\u003C时间戳>-\u003CUUID>.jsonl`，但 `codex resume` 命令仅期望 UUID。现在所有命令都会通过 `get_session_uuid()` 正确提取 UUID。\n\n**修复前：** `aichat resume 019ce4bc-...` → 尝试运行 `codex resume rollout-2026-03-12T21-08-36-019ce4bc-...` → 失败  \n**修复后：** `aichat resume 019ce4bc-...` → 正确运行 `codex resume 019ce4bc-...`\n\n受影响文件：`aichat.py`、`session_menu_cli.py`\n\n### 测试套件修复\n\n修复了与修剪相关的测试中已存在的失败问题。一些小型测试用例的数据量低于默认的 `min_token_savings=300` 阈值，导致 `trim_and_create_session()` 函数在 `output_file` 参数上返回 `None`。已在所有测试调用中添加了 `min_token_savings=0` 参数（共涉及 4 个测试文件中的 25 处调用点）。\n\n## 文档\n\n- 为本地模型添加了 `CLAUDE_CODE_ATTRIBUTION_HEADER` 设置的文档说明","2026-03-18T11:35:23",{"id":233,"version":234,"summary_zh":235,"released_at":236},198239,"v1.10.8","## 新增功能\n\n### md2gdoc：文档格式控制\n\n上传至 Google 文档后，新增可选标志用于控制正文格式：\n\n```bash\nmd2gdoc report.md --font Arial --font-size 10 --line-spacing 2.0\n```\n\n- `--font` — 字体系列（例如 `Arial`、`\"Times New Roman\"`）\n- `--font-size` — 字号（以磅为单位，例如 `10`、`12`）\n- `--line-spacing` — 行距倍数（`1.0` 单倍行距、`1.5`、`2.0` 双倍行距）\n\n标题样式（H1、H2 等）和内嵌格式（粗体、斜体）将被保留——仅正文段落会应用字体\u002F字号的覆盖设置。行距将应用于所有段落。\n\n### 语音插件：降低 ffplay 延迟\n\n通过 `-probesize` 和 `-analyzeduration` 标志，降低了 `ffplay` 的启动延迟（#61，修复 #60）。\n\n## 修复与改进\n\n- **状态栏**：修复 Git 状态显示，并添加冲突指示器\n- **文档**：在 Google 文档指南中添加 OAuth 同意屏幕的设置步骤\n- **文档**：将 Qwen3.5-35B-A3B 添加到本地 LLM 文档中，并附上配置和基准测试信息\n- **文档**：修复语音插件文档中 `\u002Fspeak` → `\u002Fvoice:speak` 的错误","2026-03-09T16:25:22",{"id":238,"version":239,"summary_zh":240,"released_at":241},198240,"v1.10.7","## 新功能\n\n### gsheet2csv：支持 TSV 格式输出\n\n`gsheet2csv` 现在支持将 Google 表格导出为 TSV（制表符分隔值）文件。只需指定一个以 `.tsv` 为扩展名的输出文件名即可：\n\n```bash\ngsheet2csv \"My Spreadsheet\" -o data.tsv\n```\n\nGoogle 表格中的 CSV 内容会被正确解析，并使用制表符作为分隔符重新写入，因此包含逗号的引用字段也能被正确处理。","2026-02-19T17:42:38",{"id":243,"version":244,"summary_zh":245,"released_at":246},198241,"v1.10.6","## 变更内容\n\n### Bug修复\n- **gdoc2md**: 修复了无法查找与您共享的文件（“与我共享”）或共享云端硬盘中的文档的问题。此前，不带 `--folder` 参数的搜索仅会检查“我的云端硬盘”根目录下的直接子文件夹。现在，如果在根目录范围内搜索未找到任何结果，则会回退到对所有可访问文件进行更广泛的搜索。此外，还修复了当文档名称包含单引号时可能导致查询失败的问题。\n\n### 文档更新\n- 更新了 README 和 Starlight 首页，加入了纽约地铁马赛克风格的 Logo。\n- 在 safety-hooks 的 Starlight 文档中添加了 `>allow-git` 功能的说明。\n\n### 其他\n- 将 aichat-search 升级至 v0.3.1。\n- 将 safety-hooks 升级至 v1.10.5。","2026-02-16T19:28:51",{"id":248,"version":249,"summary_zh":250,"released_at":251},198242,"rust-v0.3.1","## aichat-search v0.3.1\n\n用于 Rust 搜索 TUI 的预编译二进制文件。\n\n**安装\u002F升级：**\n- Homebrew：`brew upgrade aichat-search`\n- Cargo：`cargo install aichat-search`\n- 或者从下方下载二进制文件\n","2026-02-15T03:06:36",{"id":253,"version":254,"summary_zh":255,"released_at":256},198243,"v1.10.5","## 功能\n\n### 安全钩子：会话范围的暂存\u002F提交审批 `>allow-git` 触发器\n\n按会话切换 Git 暂存和提交审批提示：\n\n- `>allow-git` — 允许对修改文件进行暂存和提交\n- `>allow-git staging` \u002F `>allow-git commit` — 细粒度控制\n- `>allow-git off` — 恢复审批提示\n- `>allow-git status` — 显示当前状态\n\n通过钩子 JSON 输入中的 `session_id` 实现会话范围管理。危险操作（`git add -A`、`git add .`、`git checkout --force`）始终被阻止。\n\n## 修复\n\n### 修复：PyPI 轮子未打包 `node_modules` 目录 (#58)\n\n- 添加 hatch 构建钩子，在构建过程中自动安装 `node_ui` 的依赖项\n- 确保已发布的轮子中包含 `node_modules\u002F` 目录\n- 此前需要在使用 pip 或 uv 安装后手动执行 `npm install`","2026-02-15T02:58:52",{"id":258,"version":259,"summary_zh":260,"released_at":261},198244,"v1.10.4","## 修复\n\n### 挂钩安全性改进（aichat、语音、safety-hooks）\n\n- 所有挂钩命令统一使用 `if\u002Fthen\u002Felse\u002Ffi` 的 Bash 包装，而非 `&&\u002F||`\n- 仅当挂钩文件缺失时才采用“失败开放”（批准）策略；运行时错误则会继续传播（失败封闭）\n- 防止在 python3 崩溃时（例如导入错误、解释器缺失）出现静默绕过安全机制的情况\n- 解决了 Codex 在 PR #55 中的评审意见","2026-02-11T14:00:46",{"id":263,"version":264,"summary_zh":265,"released_at":266},198245,"v1.10.3","## v1.10.3 — Voice Plugin: Stale Update Fix\n\n### Fixed: Voice plugin speaking previous turn's message\n\nThe stop hook's race condition detection had a gap: when the JSONL hadn't flushed the current turn yet, the *previous* turn's data passed the ordering check (`last_asst_line > last_user_line`) and was returned immediately — the retry mechanism only triggered when the check *failed*, not when data was stale.\n\n**Fix:** Track the last-spoken JSONL line number in a per-session state file. On each invocation, if the candidate line matches what was previously spoken, treat it as stale and retry until fresh data appears (or the 5-second window expires). Uses line numbers (not text) so identical messages in different turns still get spoken correctly.\n\n### Improved: Faster session file lookup\n\nThe stop hook now uses `transcript_path` from the hook's stdin data directly, instead of searching all project directories. Falls back to the directory search only if `transcript_path` is missing.\n\n### Voice plugin version\n\nBumped voice plugin from 1.9.2 → 1.10.3 to match the project release.","2026-02-06T19:19:50"]