[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-iagooar--qqqa":3,"tool-iagooar--qqqa":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 真正成长为懂上",155373,2,"2026-04-14T11:34:08",[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":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":77,"owner_email":78,"owner_twitter":78,"owner_website":79,"owner_url":80,"languages":81,"stars":94,"forks":95,"last_commit_at":96,"license":97,"difficulty_score":32,"env_os":98,"env_gpu":99,"env_ram":100,"env_deps":101,"category_tags":105,"github_topics":106,"view_count":32,"oss_zip_url":78,"oss_zip_packed_at":78,"status":17,"created_at":118,"updated_at":119,"faqs":120,"releases":160},7477,"iagooar\u002Fqqqa","qqqa","Fast, stateless LLM for your shell: qq answers; qa runs commands","qqqa 是一款专为命令行打造的双合一 AI 助手，旨在让开发者在终端中高效获取大模型支持。它包含两个核心命令：`qq`用于快速提问（如查询文件操作指令），`qa`则作为智能代理，能在用户确认后执行读取文件、写入内容或运行系统命令等任务。\n\n该工具解决了传统 AI 交互需切换窗口、会话状态复杂及潜在安全风险等痛点。qqqa 秉持“无状态”设计理念，每次运行独立且可复现，完美契合 Unix 哲学，支持通过管道组合使用，既简化了工作流又确保了默认安全性。其命名源自键盘上易于快速输入的键位，让与 AI 的交互更加自然流畅。\n\nqqqa 特别适合熟悉终端操作的开发者、运维工程师及技术研究人员。它内置了对 OpenRouter、OpenAI、Groq 等多种模型提供商的支持，甚至能直接复用用户已有的 ChatGPT 或 Claude 桌面订阅，无需额外配置即可上手。凭借轻量级架构、灵活的模式切换以及对本地与云端模型的广泛兼容，qqqa 成为了提升命令行工作效率的得力伙伴。","# qqqa\n\nFast, stateless LLM-powered assistant for your shell: qq answers; qa runs commands\n\n## What is qqqa\n\nqqqa is a two-in-one, stateless CLI tool that brings LLM assistance to the command line without ceremony.\n\nThe two binaries are:\n\n- `qq` - ask a single question, e.g. \"qq how can I recursively list all files in this directory\" (qq stands for \"quick question\")\n- `qa` - a single step agent that can optionally use tools to finish a task: read a file, write a file, or execute a command with confirmation (qa stands for \"quick agent\")\n\nqqqa runs on macOS, Linux, and Windows.\n\nBy default the repo includes profiles for OpenRouter (default), OpenAI, Groq, a local Ollama runtime, the Codex CLI (piggyback on ChatGPT), and the Claude Code CLI (reuse your Claude subscription). An Anthropic profile stub exists in the config for future work but is not wired up yet.\n\n\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F91e888ad-0279-4d84-924b-ba96c0fe43a0\n\n\n\n## Names and typing speed\n\nqq means quick question. qa means quick agent. Both are easy to type rapidly on QWERTY keyboards with minimal finger movement. That makes interacting with LLMs faster and more natural during real work.\n\n## Philosophy\n\nqqqa is deliberately stateless. There is no long running session and no hidden conversation memory stored by the tool. Every run is mostly independent and reproducible. For maintaining a lowkey continuity you can use `\"include_history\": true` in the `config.json` (or choose to use history during the `qq --init` process).\n\nWhy stateless is great:\n\n- Simple and focused - Unix philosophy applied to LLM tools.\n- Shell friendly - compose with pipes and files instead of interactive chats.\n- Safe by default - qq is read-only and has access to no tools. qa is built with security in mind and requires confirmation before running tools.\n\nThe tools may include transient context you choose to provide:\n\n- `qq` can include the last few terminal commands as hints and piped stdin if present.\n- `qa` can read files or run a specific command, but only once per invocation and with safety checks.\n\n## Why I recommend using OpenRouter by default\n\nOpenRouter mirrors the OpenAI Chat Completions API, adds generous community-hosted models, and keeps `openai\u002Fgpt-4.1-nano` fast and inexpensive. qqqa talks to `https:\u002F\u002Fopenrouter.ai\u002Fapi\u002Fv1` out of the box and reads the API key from `OPENROUTER_API_KEY`, so your first run works as soon as you drop in a key.\n\nIf you need even more throughput, the bundled `groq` profile that targets `openai\u002Fgpt-oss-20b` and `openai\u002Fgpt-oss-120b` remains available, and you can still add any OpenAI-compatible provider by editing `~\u002F.qq\u002Fconfig.json` or creating a new profile.\n\n### Codex CLI profile (bring-your-own ChatGPT subscription)\n\nAlready paying for ChatGPT? Select the `codex` profile (during `qq --init`, via `qq --profile codex`, or by editing `~\u002F.qq\u002Fconfig.json`) and qqqa will shell out to the Codex CLI instead of hitting an HTTP endpoint. That lets you reuse an existing ChatGPT subscription with practically zero marginal cost.\n\nWhat to know:\n\n- Install the Codex CLI via the ChatGPT desktop app (Settings → Labs → Codex) or `pip install codex-cli`, then ensure `codex` is on your `PATH`.\n- Streaming is unavailable; even without `--no-stream`, qqqa buffers the Codex response and prints it once.\n- `qa` still expects JSON tool calls. When you need `read_file`, `write_file`, or `execute_command`, respond with `{ \"tool\": string, \"arguments\": object }` the same way you would on OpenRouter.\n- If the binary is missing or exits with an error, qqqa surfaces the stderr\u002Fstdout so you can fix your environment quickly.\n\nExample `~\u002F.qq\u002Fconfig.json` fragment that pins Codex as the default profile:\n\n```json\n{\n  \"default_profile\": \"codex\",\n  \"profiles\": {\n    \"codex\": {\n      \"model_provider\": \"codex\",\n      \"model\": \"gpt-5\",\n      \"reasoning_effort\": \"minimal\"\n    }\n  }\n}\n```\n\n### Claude Code CLI profile (bring-your-own Claude desktop subscription)\n\nHave a Claude subscription? Select the `claude_cli` profile and qqqa will use the `claude` binary. That keeps usage effectively free if you already pay for Claude for Desktop.\n\nWhat to know:\n\n- Install Claude Code so the `claude` binary is on your `PATH`, then run `claude login` once.\n- Claude Code streams responses the same way API-based LLMs do.\n- Need to pin a different Claude desktop model? Add `\"model_override\": \"claude-haiku-4-5\"` under `model_providers.claude_cli.cli` in `~\u002F.qq\u002Fconfig.json`. That override only applies to the Claude CLI; `qq -m\u002F--model` still takes precedence per run.\n\nMinimal config snippet:\n\n```json\n{\n  \"default_profile\": \"claude_cli\",\n  \"profiles\": {\n    \"claude_cli\": {\n      \"model_provider\": \"claude_cli\",\n      \"model\": \"claude-haiku-4-5\"\n    }\n  },\n  \"model_providers\": {\n    \"claude_cli\": {\n      \"cli\": {\n        \"model_override\": \"claude-haiku-4-5\"\n      }\n    }\n  }\n}\n```\n\n## Features\n\n- OpenAI compatible API client with streaming and non streaming calls.\n- Stateless, single shot workflow that plays well with pipes and scripts.\n- Rich but simple formatting using XML like tags rendered to ANSI colors.\n- Config driven providers and profiles with per profile model overrides.\n- Safety rails for file access and command execution.\n- Old-school and SERIOUS? Optional no-emoji mode persisted via `--no-fun` 🥸\n\n## Install\n\n### Homebrew (macOS\u002FLinux)\n\n```sh\nbrew install qqqa\n```\n\n### Linux\n\nDownload a prebuilt archive from the [GitHub Releases](https:\u002F\u002Fgithub.com\u002Fiagooar\u002Fqqqa\u002Freleases) page, extract it, and place `qq`\u002F`qa` somewhere on your `PATH` (e.g., `\u002Fusr\u002Flocal\u002Fbin`).\n\n### Windows\n\nDownload the Windows archive from Releases (choose the architecture that matches your machine), extract `qq.exe` and `qa.exe`, and add them to your `%PATH%`.\n\n## Configure\n\nOn first run qqqa creates `~\u002F.qq\u002Fconfig.json` with safe permissions. For a smooth first interaction, run the init flow:\n\n```sh\n# Interactive setup (choose provider and set key)\nqq --init\n# or\nqa --init\n```\n\nIf `~\u002F.qq\u002Fconfig.json` already exists, the init command keeps it untouched and explains how to rerun after moving or deleting the file.\n\nThe initializer lets you choose the default provider:\n\n- OpenRouter + `openai\u002Fgpt-4.1-nano` (default, fast and inexpensive)\n- Groq + `openai\u002Fgpt-oss-20b` (faster, cheap paid tier)\n- OpenAI + `gpt-5-mini` (slower, a bit smarter)\n- Anthropic + `claude-3-5-sonnet-20241022` (placeholder until their Messages API finalizes)\n- Ollama (runs locally, adjust port if needed)\n- Codex CLI + `gpt-5` (wraps the `codex exec` binary so you can reuse a ChatGPT subscription; no API key needed, buffered output only)\n- Claude Code CLI + `claude-haiku-4-5` (wraps the `claude` binary; `qq` streams live, `qa` buffers so it can parse tool calls)\n  - Need to force a different desktop model? Add `\"model_override\"` under the provider's `cli` block (supported for both Codex and Claude). That override wins over the profile default but still yields to the per-run `--model` flag.\n\nIt also offers to store an API key in the config (optional). If you prefer environment variables, leave it blank and set one of:\n\n- `OPENROUTER_API_KEY` for OpenRouter (default)\n- `GROQ_API_KEY` for Groq\n- `OPENAI_API_KEY` for OpenAI\n- `OLLAMA_API_KEY` (optional; any non-empty string works—even `local`—because the Authorization header cannot be blank)\n- No API key is required for the Codex or Claude CLI profiles—their binaries handle auth (`codex login` \u002F `claude login`).\n\nDefaults written to `~\u002F.qq\u002Fconfig.json`:\n\n- Providers\n  - `openrouter` → base `https:\u002F\u002Fopenrouter.ai\u002Fapi\u002Fv1`, env `OPENROUTER_API_KEY`, default headers `HTTP-Referer=https:\u002F\u002Fgithub.com\u002Fiagooar\u002Fqqqa` and `X-Title=qqqa`\n  - `openai` → base `https:\u002F\u002Fapi.openai.com\u002Fv1`, env `OPENAI_API_KEY`\n  - `groq` → base `https:\u002F\u002Fapi.groq.com\u002Fopenai\u002Fv1`, env `GROQ_API_KEY`\n  - `ollama` → base `http:\u002F\u002F127.0.0.1:11434\u002Fv1`, env `OLLAMA_API_KEY` (qqqa auto-injects a non-empty placeholder if you leave it unset)\n  - `anthropic` → base `https:\u002F\u002Fapi.anthropic.com\u002Fv1`, env `ANTHROPIC_API_KEY` (present in the config schema for future support; not usable yet)\n  - `codex` → mode `cli`, binary `codex` with base args `exec` (install Codex CLI; auth handled by `codex login`). Optional `\"model_override\"` in the `cli` block forces a fallback ChatGPT model if OpenAI retires the default.\n  - `claude_cli` → mode `cli`, binary `claude` (install `@anthropic-ai\u002Fclaude-code`; auth handled by `claude login`). Optional `\"model_override\"` pins Claude Code’s `--model` flag without touching your profile’s model.\n  - `codex` → CLI provider, binary `codex` - fails if the binary is missing\n- Profiles\n  - `openrouter` → model `openai\u002Fgpt-4.1-nano` (default)\n  - `openai` → model `gpt-5-mini`\n  - `groq` → model `openai\u002Fgpt-oss-20b`\n  - `ollama` → model `llama3.1`\n  - `anthropic` → model `claude-3-5-sonnet-20241022` (inactive placeholder until Anthropic integration lands)\n  - `codex` → model label `gpt-5` (only used for display; Codex CLI picks the backing ChatGPT model)\n- Optional per-profile `reasoning_effort` for GPT-5 family models. If you leave it unset, qqqa sends `\"reasoning_effort\": \"minimal\"` for any `gpt-5*` model to keep responses fast. Set it to `\"low\"`, `\"medium\"`, or `\"high\"` when you want deeper reasoning.\n- (discouraged) Optional per-profile `temperature`. Most models default to `0.15` unless you set it in `~\u002F.qq\u002Fconfig.json` or pass `--temperature \u003Cvalue>` for a single run. GPT-5 models ignore custom temperatures; qqqa forces them to `1.0`.\n- (discouraged): you can change the timeout, e.g. `\"timeout\": \"240\"` under a model profile in `~\u002F.qq\u002Fconfig.json` to raise the per-request limit (`qq` + `qa` default to 180 s - this is SLOW; faster models are a better fix).\n\nExample override in `~\u002F.qq\u002Fconfig.json`:\n\n```json\n{\n  \"profiles\": {\n    \"openai\": {\n      \"model_provider\": \"openai\",\n      \"model\": \"gpt-5-mini\",\n      \"reasoning_effort\": \"medium\"\n    }\n  }\n}\n```\n\n- Optional flag: `no_emoji` (unset by default). Set via `qq --no-fun` or `qa --no-fun`.\n- Optional auto-copy: `copy_first_command` (unset\u002Ffalse by default). Enable during `qq --init`, by running `qq --enable-auto-copy`, or by editing `~\u002F.qq\u002Fconfig.json` so qq copies the first `\u003Ccmd>` block to your clipboard. Turn it off with `qq --disable-auto-copy`. Override per run with `--copy-command`\u002F`--cc` or `--no-copy-command`\u002F`--ncc` (also available as `-ncc`).\n- Per-run control: `--no-stream` forces qq to wait for the full response before printing; streaming is the default.\n\n### Terminal history\n\nTerminal history is **off by default**. During `qq --init` \u002F `qa --init` you can opt in to sending the last 10 `qq`\u002F`qa` commands along with each request. You can still override per run with `--history` (force on) or `-n\u002F--no-history` (force off). Only commands whose first token is `qq` or `qa` are ever shared.\n\n## Usage\n\n### qq - ask a question\n\nqq streams responses by default so you see tokens the moment they arrive. If you prefer the classic buffered output—for example when piping into another tool or copying the final answer as a whole—pass `--no-stream` to wait until the response completes before printing anything.\n\n```sh\n# simplest\nqq \"convert mp4 to mp3\"\n\n# stream tokens by default (formatted output)\nqq \"how do I kill a process by name on macOS\"\n\n# disable streaming and wait for the full formatted response\nqq --no-stream \"summarize today's git status\"\n\n# bump temperature for non GPT-5 models on a single run\nqq --temperature 0.4 \"draft a playful git commit message\"\n\n# include piped context\ngit status | qq \"summarize what I should do next\"\n\n# pipe extra context and keep CLI question\nprintf '%s\\n' \"This is a sample context. My code is 4242\" | qq \"What is my code\"\n\n# pipe the question itself\nprintf '%s\\n' \"Show me the full contents of this directory\" | qq\n\n# raw text (no ANSI formatting)\nqq -r \"explain sed vs awk\"\n\n# include terminal history for this run\nqq --history \"find large files in the last day\"\n\n# disable emojis in responses (persists)\nqq --no-fun \"summarize this\"\n\n# auto-copy the first \u003Ccmd> block for fast pasting (alias: --cc)\nqq --copy-command \"list docker images\"\n\n# temporarily disable auto-copy even if enabled in config (alias: --ncc \u002F -ncc)\nqq --no-copy-command \"print working directory\"\n\n# enable auto-copy for all future qq runs\nqq --enable-auto-copy\n\n# disable auto-copy persistently\nqq --disable-auto-copy\n```\n\nNote: it is possible to run qq without quotes, which works most of the time the same way as with quotes.\n\n\n```sh\n# simplest\nqq convert mp4 to mp3\n```\n\n\n#### Example: forgot the ffmpeg incantation\n\nYou want to extract audio from a YouTube video but you do not remember the exact flags.\n\nAsk with qq:\n\n```sh\nqq \"how do I use ffmpeg to extract audio from a YouTube video into mp3\"\n```\n\nA typical answer will suggest installing the tools and then using `yt-dlp` to fetch audio and `ffmpeg` to convert it:\n\n```sh\n# macOS\nbrew install yt-dlp ffmpeg\n\n# Debian or Ubuntu\nsudo apt-get update && sudo apt-get install -y yt-dlp ffmpeg\n\n# Download and extract audio to MP3 using ffmpeg under the hood\nyt-dlp -x --audio-format mp3 \"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=VIDEO_ID\"\n```\n\nDo it for me with qa:\n\n```sh\nqa \"download audio as mp3 from https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=VIDEO_ID\"\n```\n\nThe agent will propose a safe command like `yt-dlp -x --audio-format mp3 URL`, show it for confirmation, then run it. You can pass `-y` to auto approve.\n\n### qa - do a single step with tools\n\n`qa` can either answer in plain text or request one tool call in JSON. Supported tools:\n\n- `read_file` with `{ \"path\": string }`\n- `write_file` with `{ \"path\": string, \"content\": string }`\n- `execute_command` with `{ \"command\": string, \"cwd?\": string }`\n\nExamples:\n\n```sh\n# read a file the safe way\nqa \"read src\u002Fbin\u002Fqq.rs and tell me what main does\"\n\n# write a file\nqa \"create a README snippet at notes\u002Fintro.md with a short summary\"\n\n# run a command with confirmation\nqa \"list Rust files under src sorted by size\"\n\n# pipe the task itself\nprintf '%s\\n' \"Show me the full contents of this directory\" | qa\n\n# auto approve tool execution for non interactive scripts\nqa -y \"count lines across *.rs\"\n\n# include recent qq\u002Fqa commands just for this run\nqa --history \"trace which git commands I ran recently\"\n\n# raise temperature for this run (non GPT-5 models only)\nqa --temperature 0.3 \"brainstorm fun git aliases\"\n\n# disable emojis in responses (persists)\nqa --no-fun \"format and lint the repo\"\n\n# run qa non-interactively with confirmation already granted\nqa -y \"count lines across *.rs\"\n```\n\nWhen qa runs a command while stdout is a terminal, output streams live; the structured `[tool:execute_command]` summary still prints afterward for easy copying.\n\n`execute_command` prints the proposed command and asks for confirmation. It warns if the working directory is outside your home. Use `-y` to auto approve in trusted workflows.\n\nThe runner enforces a default allowlist (think `ls`, `grep`, `find`, `rg`, `awk`, etc.) and rejects pipelines, redirection, and other high-risk constructs. When a command is blocked, `qa` prompts you to add it to `command_allowlist` inside `~\u002F.qq\u002Fconfig.json`; approving once persists the choice and updates future runs. On Windows it automatically adapts to the active environment so built-ins like `dir` or `Get-ChildItem` keep working without extra flags.\n\n## Advanced features and configurations\n\n### Custom TLS certificates (self-signed proxies)\n\nSome OpenAI-compatible gateways (LiteLLM, local corporate proxies, etc.) terminate TLS with a self-signed CA. Add a per-provider `tls` block so qqqa trusts that CA in addition to the default Rustls bundle:\n\n```json\n{\n  \"model_providers\": {\n    \"litellm\": {\n      \"name\": \"LiteLLM\",\n      \"base_url\": \"https:\u002F\u002Fproxy.local\u002Fv1\",\n      \"env_key\": \"LITELLM_API_KEY\",\n      \"tls\": {\n        \"ca_bundle_path\": \"certs\u002Flitellm-ca.pem\",\n        \"ca_bundle_env\": \"SSL_CERTFILE_PATH\"\n      }\n    }\n  }\n}\n```\n\n- `ca_bundle_path` accepts a PEM or DER file. Relative paths are resolved against `~\u002F.qq\u002F` so you can keep certificates next to the config.\n- `ca_bundle_env` is optional; if set, qqqa reads that environment variable for the bundle path and falls back to `ca_bundle_path` when it is unset. This mirrors proxies that expose `SSL_CERTFILE_PATH` or similar knobs.\n- Multiple certificates can live in the same file (concatenate PEM entries). qqqa appends them to the existing Rustls trust store, so standard public CAs continue to work.\n\nWith this configuration any provider—LiteLLM, Ollama over HTTPS, your company gateway, or another proxy—can authenticate with its custom CA without disabling TLS verification.\n\n\n\n### Local models & custom ports\n\nPick the built-in `ollama` profile (or create your own) to talk to a local runtime. Override the API base when you expose the service on a different host\u002Fport:\n\n```sh\nqq --profile ollama --api-base http:\u002F\u002F127.0.0.1:11435\u002Fv1 \"summarize build failures\"\nqa --profile ollama --api-base http:\u002F\u002F192.168.1.50:9000\u002Fv1 \"apply the diff\" -y\n```\n\n`qa --init` offers Ollama as an option and skips the API key warning; qqqa still sends a placeholder bearer token so OpenAI-compatible middleware keeps working. If you bypass the init flow and edit `config.json` manually, set either `\"api_key\": \"local\"` under the `ollama` provider or export `OLLAMA_API_KEY=local` so the Authorization header remains non-empty.\n\n> Example local setup: LM Studio on macOS driving `ollama run meta-llama-3.1-8b-instruct-hf` (Q4_K_M) on a MacBook Air M4\u002F32 GB works fine, just slower than the hosted OpenRouter\u002FGroq profiles. Adjust the model tag in your `ollama` profile accordingly.\n\nYou can still override at runtime:\n\n```sh\n# choose profile\nqq -p groq \"what is ripgrep\"\n\n# override model for a single call\nqq -m openai\u002Fgpt-oss-20b \"explain this awk one-liner\"\n```\n\n\n## Safety model\n\n- File tools require paths to be inside your home or the current directory. Reads are capped to 1 MiB, and traversal\u002Fsymlink escapes are blocked.\n- Command execution uses a default allowlist (e.g. `ls`, `grep`, `rg`, `find`) plus your custom `command_allowlist` entries. Destructive patterns (`rm -rf \u002F`, `sudo`, `mkfs`, etc.) are always blocked, and pipelines\u002Fredirection\u002Fnewlines prompt for confirmation even with `--yes`.\n- Commands run with a 120 s timeout and the agent performs at most one tool step—there is no loop.\n- Config files are created with safe permissions. API keys come from environment variables unless you explicitly add a key to the config.\n\n## Environment variables\n\n- `OPENROUTER_API_KEY` for the OpenRouter provider (default)\n- `GROQ_API_KEY` for the Groq provider\n- `OPENAI_API_KEY` for the OpenAI provider\n\n## Development\n\nProject layout:\n\n- `src\u002Fbin\u002Fqq.rs` and `src\u002Fbin\u002Fqa.rs` entry points\n- Core modules in `src\u002F`: `ai.rs`, `config.rs`, `prompt.rs`, `history.rs`, `perms.rs`, `formatting.rs`\n- Tools in `src\u002Ftools\u002F`: `read_file.rs`, `write_file.rs`, `execute_command.rs`\n- Integration tests in `tests\u002F`\n\n## Contributing\n\nSee CONTRIBUTING.md for guidelines on reporting issues and opening pull requests, building from source, and the release process.\n\n## Troubleshooting\n\n- API error about missing key: run `qq --init` to set things up, or export the relevant env var, e.g. `export OPENROUTER_API_KEY=...`.\n- No output while streaming: try `-d` to see debug logs or rerun with `--no-stream` to fall back to buffered output (it might work better in some edge case scenarios).\n- Piped input not detected: ensure you are piping into `qq` and not running it in a subshell that swallows stdin.\n\n## License\n\nLicensed under MIT.\n","# qqqa\n\n快速、无状态的基于大语言模型的命令行助手：qq 回答问题；qa 执行命令\n\n## 什么是 qqqa\n\nqqqa 是一款二合一的无状态命令行工具，无需繁琐步骤即可为命令行带来大语言模型的辅助支持。\n\n该工具包含两个可执行文件：\n\n- `qq` - 提出一个简单的问题，例如：“qq 如何递归列出当前目录下的所有文件”（qq 代表“quick question”，即快速提问）\n- `qa` - 一个单步代理，可以选择性地使用工具来完成任务：读取文件、写入文件或在确认后执行命令（qa 代表“quick agent”，即快速代理）\n\nqqqa 支持 macOS、Linux 和 Windows 系统。\n\n默认情况下，仓库中包含了针对 OpenRouter（默认）、OpenAI、Groq、本地 Ollama 运行时、Codex CLI（基于 ChatGPT）以及 Claude Code CLI（复用你的 Claude 订阅）的配置文件。此外，还存在一个用于 Anthropic 的配置文件模板，但目前尚未启用。\n\n\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F91e888ad-0279-4d84-924b-ba96c0fe43a0\n\n\n\n## 名称与打字速度\n\nqq 意为快速提问。qa 意为快速代理。两者在 QWERTY 键盘上都易于快速输入，且手指移动幅度小。这使得在实际工作中与大语言模型的交互更加迅速和自然。\n\n## 哲学理念\n\nqqqa 被刻意设计为无状态。它没有长时间运行的会话，也不会存储任何隐藏的对话历史。每次运行几乎都是独立且可重复的。若希望保持低调的连续性，可以在 `config.json` 中设置 `\"include_history\": true`（或者在 `qq --init` 过程中选择使用历史记录）。\n\n为什么无状态很棒：\n\n- 简单而专注——将 Unix 哲学应用于大语言模型工具。\n- 对 Shell 友好——通过管道和文件进行组合，而非交互式聊天。\n- 默认安全——qq 仅读取数据，不访问任何工具。qa 在设计时充分考虑了安全性，执行工具前需要用户确认。\n\n工具可能会包含你选择提供的临时上下文：\n\n- `qq` 可以将最近几条终端命令作为提示，并在有输入时接收管道输入。\n- `qa` 可以读取文件或执行特定命令，但每次调用仅限一次，并带有安全检查。\n\n## 为什么我推荐默认使用 OpenRouter\n\nOpenRouter 镜像了 OpenAI 的 Chat Completions API，同时增加了大量社区托管的模型，并且使 `openai\u002Fgpt-4.1-nano` 保持快速且经济实惠。qqqa 默认与 `https:\u002F\u002Fopenrouter.ai\u002Fapi\u002Fv1` 通信，并从 `OPENROUTER_API_KEY` 环境变量中读取 API 密钥，因此只需提供密钥，首次运行即可正常工作。\n\n如果你需要更高的吞吐量，捆绑的 `groq` 配置文件仍然可用，它针对的是 `openai\u002Fgpt-oss-20b` 和 `openai\u002Fgpt-oss-120b` 模型。你也可以通过编辑 `~\u002F.qq\u002Fconfig.json` 或创建新的配置文件来添加任何兼容 OpenAI 的提供商。\n\n### Codex CLI 配置文件（自带 ChatGPT 订阅）\n\n已经支付了 ChatGPT 费用吗？选择 `codex` 配置文件（在 `qq --init` 期间、通过 `qq --profile codex` 或编辑 `~\u002F.qq\u002Fconfig.json`），qqqa 将调用 Codex CLI 而不是向 HTTP 端点发送请求。这样你就可以几乎零额外成本地复用现有的 ChatGPT 订阅。\n\n需要注意的是：\n\n- 通过 ChatGPT 桌面应用（设置 → 实验室 → Codex）或使用 `pip install codex-cli` 安装 Codex CLI，然后确保 `codex` 已添加到你的 `PATH` 中。\n- 流式传输不可用；即使未使用 `--no-stream` 参数，qqqa 也会缓冲 Codex 的响应并一次性打印出来。\n- `qa` 仍然期望 JSON 格式的工具调用。当你需要 `read_file`、`write_file` 或 `execute_command` 时，仍需按照 OpenRouter 的方式返回 `{ \"tool\": string, \"arguments\": object }`。\n- 如果二进制文件缺失或运行时出现错误，qqqa 会输出标准错误\u002F标准输出信息，以便你快速修复环境。\n\n以下是一个将 Codex 设置为默认配置文件的 `~\u002F.qq\u002Fconfig.json` 示例片段：\n\n```json\n{\n  \"default_profile\": \"codex\",\n  \"profiles\": {\n    \"codex\": {\n      \"model_provider\": \"codex\",\n      \"model\": \"gpt-5\",\n      \"reasoning_effort\": \"minimal\"\n    }\n  }\n}\n```\n\n### Claude Code CLI 配置文件（自带 Claude Desktop 订阅）\n\n拥有 Claude 订阅吗？选择 `claude_cli` 配置文件，qqqa 将使用 `claude` 二进制文件。这样，如果你已经为 Claude for Desktop 付费，使用成本实际上可以保持为零。\n\n需要注意的是：\n\n- 安装 Claude Code，确保 `claude` 二进制文件位于你的 `PATH` 中，然后运行一次 `claude login`。\n- Claude Code 以与基于 API 的大语言模型相同的方式流式传输响应。\n- 如果需要指定不同的 Claude Desktop 模型，可以在 `~\u002F.qq\u002Fconfig.json` 中的 `model_providers.claude_cli.cli` 下添加 `\"model_override\": \"claude-haiku-4-5\"`。此覆盖仅适用于 Claude CLI；每轮运行时，`qq -m\u002F--model` 仍将优先于配置文件中的设置。\n\n以下是一个极简的配置示例：\n\n```json\n{\n  \"default_profile\": \"claude_cli\",\n  \"profiles\": {\n    \"claude_cli\": {\n      \"model_provider\": \"claude_cli\",\n      \"model\": \"claude-haiku-4-5\"\n    }\n  },\n  \"model_providers\": {\n    \"claude_cli\": {\n      \"cli\": {\n        \"model_override\": \"claude-haiku-4-5\"\n      }\n    }\n  }\n}\n```\n\n## 功能特性\n\n- 兼容 OpenAI 的 API 客户端，支持流式和非流式调用。\n- 无状态、单次执行的工作流程，与管道和脚本配合良好。\n- 使用类似 XML 的标签渲染 ANSI 颜色，格式丰富但简单。\n- 基于配置的提供商和配置文件，支持每个配置文件单独覆盖模型。\n- 文件访问和命令执行的安全机制。\n- 如果你喜欢老派风格且认真严肃？还可以通过 `--no-fun` 参数启用无表情符号模式 🥸\n\n## 安装\n\n### Homebrew（macOS\u002FLinux）\n\n```sh\nbrew install qqqa\n```\n\n### Linux\n\n从 [GitHub Releases](https:\u002F\u002Fgithub.com\u002Fiagooar\u002Fqqqa\u002Freleases) 页面下载预编译的压缩包，解压后将 `qq` 和 `qa` 放置到你的 `PATH` 中的任意位置（例如 `\u002Fusr\u002Flocal\u002Fbin`）。\n\n### Windows\n\n从 Releases 页面下载适用于 Windows 的压缩包（选择与你的机器架构匹配的版本），解压 `qq.exe` 和 `qa.exe`，并将它们添加到你的 `%PATH%` 中。\n\n## 配置\n\n首次运行时，qqqa 会创建权限安全的 `~\u002F.qq\u002Fconfig.json` 文件。为了获得顺畅的初次体验，建议运行初始化流程：\n\n```sh\n# 交互式设置（选择提供商并设置密钥）\nqq --init\n\n# 或者\nqa --init\n```\n\n如果 `~\u002F.qq\u002Fconfig.json` 已经存在，初始化命令会保持该文件不变，并说明在移动或删除该文件后如何重新运行。\n\n初始化程序允许你选择默认的提供商：\n\n- OpenRouter + `openai\u002Fgpt-4.1-nano`（默认，快速且便宜）\n- Groq + `openai\u002Fgpt-oss-20b`（更快，付费层级更便宜）\n- OpenAI + `gpt-5-mini`（较慢，稍微更智能）\n- Anthropic + `claude-3-5-sonnet-20241022`（占位符，直到其 Messages API 完成）\n- Ollama（本地运行，必要时调整端口）\n- Codex CLI + `gpt-5`（封装了 `codex exec` 二进制文件，以便你可以复用 ChatGPT 订阅；无需 API 密钥，仅支持缓冲输出）\n- Claude Code CLI + `claude-haiku-4-5`（封装了 `claude` 二进制文件；`qq` 实时流式输出，`qa` 则使用缓冲区以便解析工具调用）\n  - 如果需要强制使用不同的桌面模型？可以在提供商的 `cli` 块下添加 `\"model_override\"`（Codex 和 Claude 都支持）。该覆盖会优先于配置文件中的默认设置，但仍然会低于每次运行时的 `--model` 标志。\n\n它还提供将 API 密钥存储在配置中（可选）的功能。如果你更倾向于使用环境变量，可以将其留空，并设置以下其中之一：\n\n- 对于 OpenRouter：`OPENROUTER_API_KEY`（默认）\n- 对于 Groq：`GROQ_API_KEY`\n- 对于 OpenAI：`OPENAI_API_KEY`\n- 对于 Ollama：`OLLAMA_API_KEY`（可选；任何非空字符串均可——甚至可以是 `local`——因为 Authorization 头不能为空）\n- 对于 Codex 或 Claude CLI 配置，则无需 API 密钥——它们的二进制文件会自行处理身份验证（`codex login` \u002F `claude login`）。\n\n写入 `~\u002F.qq\u002Fconfig.json` 的默认设置如下：\n\n- 提供商\n  - `openrouter` → 基础 URL `https:\u002F\u002Fopenrouter.ai\u002Fapi\u002Fv1`，环境变量为 `OPENROUTER_API_KEY`，默认头信息为 `HTTP-Referer=https:\u002F\u002Fgithub.com\u002Fiagooar\u002Fqqqa` 和 `X-Title=qqqa`\n  - `openai` → 基础 URL `https:\u002F\u002Fapi.openai.com\u002Fv1`，环境变量为 `OPENAI_API_KEY`\n  - `groq` → 基础 URL `https:\u002F\u002Fapi.groq.com\u002Fopenai\u002Fv1`，环境变量为 `GROQ_API_KEY`\n  - `ollama` → 基础 URL `http:\u002F\u002F127.0.0.1:11434\u002Fv1`，环境变量为 `OLLAMA_API_KEY`（如果未设置，qqqa 会自动注入一个非空占位符）\n  - `anthropic` → 基础 URL `https:\u002F\u002Fapi.anthropic.com\u002Fv1`，环境变量为 `ANTHROPIC_API_KEY`（目前存在于配置架构中，以备未来支持；暂不可用）\n  - `codex` → 模式为 `cli`，二进制文件为 `codex`，基础参数为 `exec`（需安装 Codex CLI；身份验证由 `codex login` 处理）。`cli` 块中可选的 `\"model_override\"` 可在 OpenAI 停止支持默认模型时强制使用备用的 ChatGPT 模型。\n  - `claude_cli` → 模式为 `cli`，二进制文件为 `claude`（需安装 `@anthropic-ai\u002Fclaude-code`；身份验证由 `claude login` 处理）。可选的 `\"model_override\"` 可以固定 Claude Code 的 `--model` 标志，而不会影响你的配置文件中的模型设置。\n  - `codex` → CLI 提供商，二进制文件为 `codex`——如果缺少该二进制文件则会失败\n- 配置文件\n  - `openrouter` → 模型为 `openai\u002Fgpt-4.1-nano`（默认）\n  - `openai` → 模型为 `gpt-5-mini`\n  - `groq` → 模型为 `openai\u002Fgpt-oss-20b`\n  - `ollama` → 模型为 `llama3.1`\n  - `anthropic` → 模型为 `claude-3-5-sonnet-20241022`（处于非激活状态的占位符，直到 Anthropic 集成完成）\n  - `codex` → 模型标签为 `gpt-5`（仅用于显示；Codex CLI 会选择背后的 ChatGPT 模型）\n- GPT-5 系列模型的可选每配置文件 `reasoning_effort`。如果你未设置，qqqa 会对任何 `gpt-5*` 模型发送 `\"reasoning_effort\": \"minimal\"`，以保持响应速度。当你需要更深入的推理时，可以将其设置为 `\"low\"`、`\"medium\"` 或 `\"high\"`。\n- （不推荐）每配置文件的可选 `temperature`。大多数模型默认为 `0.15`，除非你在 `~\u002F.qq\u002Fconfig.json` 中设置，或在单次运行时通过 `--temperature \u003Cvalue>` 指定。GPT-5 模型会忽略自定义温度，qqqa 会强制将其设为 `1.0`。\n- （不推荐）：你可以更改超时时间，例如在 `~\u002F.qq\u002Fconfig.json` 中的某个模型配置文件下设置 `\"timeout\": \"240\"`，以提高每次请求的限制（`qq` + `qa` 默认为 180 秒——这太慢了；使用更快的模型才是更好的解决办法）。\n\n`~\u002F.qq\u002Fconfig.json` 中的示例覆盖：\n\n```json\n{\n  \"profiles\": {\n    \"openai\": {\n      \"model_provider\": \"openai\",\n      \"model\": \"gpt-5-mini\",\n      \"reasoning_effort\": \"medium\"\n    }\n  }\n}\n```\n\n- 可选标志：`no_emoji`（默认未设置）。可通过 `qq --no-fun` 或 `qa --no-fun` 设置。\n- 可选自动复制功能：`copy_first_command`（默认未设置\u002F假）。可在 `qq --init` 时启用，或通过运行 `qq --enable-auto-copy`、或编辑 `~\u002F.qq\u002Fconfig.json` 来让 qq 将第一个 `\u003Ccmd>` 块复制到剪贴板。可通过 `qq --disable-auto-copy` 关闭。也可以在每次运行时通过 `--copy-command`\u002F`--cc` 或 `--no-copy-command`\u002F`--ncc`（也可简写为 `-ncc`）进行覆盖。\n- 每次运行的控制选项：`--no-stream` 会强制 qq 等待完整响应后再打印；默认为流式输出。\n\n### 终端历史记录\n\n终端历史记录**默认关闭**。在执行 `qq --init` 或 `qa --init` 时，你可以选择在每次请求中发送最近的 10 条 `qq`\u002F`qa` 命令。你仍然可以在每次运行时通过 `--history`（强制开启）或 `-n\u002F--no-history`（强制关闭）来覆盖这一设置。只有以 `qq` 或 `qa` 作为首个标记的命令才会被共享。\n\n## 使用方法\n\n### qq - 提问\n\nqq 默认以流式方式输出响应，因此你可以立即看到每个令牌的到来。如果你更喜欢传统的缓冲输出——例如当你要将其管道传递给其他工具，或者希望一次性复制完整的答案时——可以使用 `--no-stream` 标志，等待响应完全结束后再进行打印。\n\n```sh\n# 最简单\nqq \"将 mp4 转换为 mp3\"\n\n# 默认流式输出（格式化后的结果）\nqq \"在 macOS 上如何根据名称杀死进程\"\n\n# 禁用流式输出，等待完整的格式化响应\nqq --no-stream \"总结今天的 git 状态\"\n\n# 在单次运行中为非 GPT-5 模型提高温度\nqq --temperature 0.4 \"起草一条有趣的 git 提交信息\"\n\n# 包含管道传递的上下文\ngit status | qq \"总结接下来我应该做什么\"\n\n# 管道传递额外上下文并保留 CLI 问题\nprintf '%s\\n' \"这是一个示例上下文。我的代码是 4242\" | qq \"我的代码是多少\"\n\n# 管道传递问题本身\nprintf '%s\\n' \"给我看看这个目录的全部内容\" | qq\n\n# 原始文本（无 ANSI 格式）\nqq -r \"解释 sed 和 awk 的区别\"\n\n# 包含本次运行的终端历史记录\nqq --history \"查找过去一天内的大文件\"\n\n# 禁用响应中的表情符号（持久生效）\nqq --no-fun \"总结这段内容\"\n\n# 自动复制第一个 \u003Ccmd> 块以便快速粘贴（别名：--cc）\nqq --copy-command \"列出 docker 镜像\"\n\n# 即使在配置中已启用自动复制，仍临时禁用自动复制（别名：--ncc \u002F -ncc）\nqq --no-copy-command \"打印当前工作目录\"\n\n# 为所有未来的 qq 运行启用自动复制\nqq --enable-auto-copy\n\n# 永久禁用自动复制\nqq --disable-auto-copy\n```\n\n注意：你也可以不加引号直接运行 qq，大多数情况下效果与加引号时相同。\n\n\n```sh\n# 最简单\nqq convert mp4 to mp3\n```\n\n\n#### 示例：忘记了 ffmpeg 的用法\n\n你想从 YouTube 视频中提取音频，但却记不清具体的参数。\n\n可以用 qq 提问：\n\n```sh\nqq \"如何使用 ffmpeg 将 YouTube 视频中的音频提取为 mp3\"\n```\n\n典型的回答可能会建议先安装相关工具，然后使用 `yt-dlp` 获取音频，再用 `ffmpeg` 进行转换：\n\n```sh\n# macOS\nbrew install yt-dlp ffmpeg\n\n# Debian 或 Ubuntu\nsudo apt-get update && sudo apt-get install -y yt-dlp ffmpeg\n\n# 使用 ffmpeg 在后台将音频下载并提取为 MP3 格式\nyt-dlp -x --audio-format mp3 \"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=VIDEO_ID\"\n```\n\n为我用 qa 来执行：\n\n```sh\nqa \"从 https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=VIDEO_ID 下载音频为 MP3 格式\"\n```\n\n代理会提出一个安全的命令，例如 `yt-dlp -x --audio-format mp3 URL`，显示出来供确认，然后执行。你可以传递 `-y` 参数来自动批准。\n\n### qa - 使用工具执行单步操作\n\n`qa` 可以用纯文本回答，也可以请求一次 JSON 格式的工具调用。支持的工具包括：\n\n- `read_file`，参数为 `{ \"path\": string }`\n- `write_file`，参数为 `{ \"path\": string, \"content\": string }`\n- `execute_command`，参数为 `{ \"command\": string, \"cwd?\": string }`\n\n示例：\n\n```sh\n# 安全地读取文件\nqa \"读取 src\u002Fbin\u002Fqq.rs 文件，并告诉我 main 函数的作用\"\n\n# 写入文件\nqa \"在 notes\u002Fintro.md 创建一段简短的 README 摘要\"\n\n# 运行命令并等待确认\nqa \"列出 src 目录下的 Rust 文件，并按文件大小排序\"\n\n# 将任务直接通过管道传递\nprintf '%s\\n' \"给我看看这个目录的全部内容\" | qa\n\n# 自动批准非交互式脚本中的工具执行\nqa -y \"统计所有 *.rs 文件中的行数\"\n\n# 仅针对本次运行包含最近的 qq\u002Fqa 命令\nqa --history \"追踪我最近执行了哪些 git 命令\"\n\n# 提高本次运行的温度（仅限非 GPT-5 模型）\nqa --temperature 0.3 \"头脑风暴一些有趣的 git 别名\"\n\n# 禁用回复中的表情符号（永久生效）\nqa --no-fun \"格式化并 lint 整个代码库\"\n\n# 非交互式运行 qa，已预先批准确认\nqa -y \"统计所有 *.rs 文件中的行数\"\n```\n\n当 `qa` 在终端中运行命令时，输出流会实时显示；之后仍会打印结构化的 `[tool:execute_command]` 总结信息，方便复制。\n\n`execute_command` 会打印建议的命令并请求确认。如果工作目录不在你的主目录内，它会发出警告。使用 `-y` 参数可以在受信任的工作流程中自动批准。\n\n运行器会强制执行默认的允许列表（如 `ls`、`grep`、`find`、`rg`、`awk` 等），并拒绝管道、重定向和其他高风险操作。当某个命令被阻止时，`qa` 会提示你将其添加到 `~\u002F.qq\u002Fconfig.json` 中的 `command_allowlist`；一旦批准，该选择就会被保存下来，并应用于未来的运行。在 Windows 上，它会自动适应当前环境，因此像 `dir` 或 `Get-ChildItem` 这样的内置命令无需额外标志即可正常工作。\n\n## 高级功能和配置\n\n### 自定义 TLS 证书（自签名代理）\n\n一些兼容 OpenAI 的网关（LiteLLM、本地企业代理等）会使用自签名 CA 终止 TLS。你可以为每个提供商添加一个 `tls` 块，使 qqqa 除了默认的 Rustls 证书包外，也信任该 CA：\n\n```json\n{\n  \"model_providers\": {\n    \"litellm\": {\n      \"name\": \"LiteLLM\",\n      \"base_url\": \"https:\u002F\u002Fproxy.local\u002Fv1\",\n      \"env_key\": \"LITELLM_API_KEY\",\n      \"tls\": {\n        \"ca_bundle_path\": \"certs\u002Flitellm-ca.pem\",\n        \"ca_bundle_env\": \"SSL_CERTFILE_PATH\"\n      }\n    }\n  }\n}\n```\n\n- `ca_bundle_path` 接受 PEM 或 DER 格式的文件。相对路径会相对于 `~\u002F.qq\u002F` 解析，因此你可以将证书与配置文件放在一起。\n- `ca_bundle_env` 是可选的；如果设置，qqqa 会从该环境变量中读取证书路径，当其未设置时则回退到 `ca_bundle_path`。这与那些暴露 `SSL_CERTFILE_PATH` 或类似选项的代理行为一致。\n- 多个证书可以放在同一个文件中（只需将 PEM 条目拼接起来）。qqqa 会将它们追加到现有的 Rustls 受信存储中，因此标准的公共 CA 仍然有效。\n\n通过这种配置，任何提供商——LiteLLM、Ollama over HTTPS、公司网关或其他代理——都可以使用自定义 CA 进行身份验证，而无需禁用 TLS 验证。\n\n\n\n### 本地模型与自定义端口\n\n选择内置的 `ollama` 配置文件（或创建自己的配置文件）来与本地运行时通信。当你在不同的主机\u002F端口上公开服务时，可以覆盖 API 基础地址：\n\n```sh\nqq --profile ollama --api-base http:\u002F\u002F127.0.0.1:11435\u002Fv1 \"总结构建失败的原因\"\nqa --profile ollama --api-base http:\u002F\u002F192.168.1.50:9000\u002Fv1 \"应用补丁\" -y\n```\n\n`qa --init` 会提供 Ollama 作为选项，并跳过 API 密钥警告；qqqa 仍会发送一个占位符令牌，以便兼容 OpenAI 的中间件继续工作。如果你绕过初始化流程并手动编辑 `config.json`，可以在 `ollama` 提供商下设置 `\"api_key\": \"local\"`，或者导出 `OLLAMA_API_KEY=local`，以确保 Authorization 头不为空。\n\n> 本地设置示例：在 macOS 上使用 LM Studio 调用 `ollama run meta-llama-3.1-8b-instruct-hf`（Q4_K_M），在 MacBook Air M4\u002F32 GB 上运行效果良好，只是速度比托管的 OpenRouter\u002FGroq 配置稍慢。请相应调整 `ollama` 配置文件中的模型标签。\n\n你仍然可以在运行时进行覆盖：\n\n```sh\n# 选择配置文件\nqq -p groq \"什么是 ripgrep\"\n\n# 为单次调用覆盖模型\nqq -m openai\u002Fgpt-oss-20b \"解释这段 awk 单行代码\"\n```\n\n\n## 安全模型\n\n- 文件工具要求路径必须位于你的主目录或当前目录内。读取限制为 1 MiB，且会阻止遍历和符号链接逃逸。\n- 命令执行使用默认的允许列表（如 `ls`、`grep`、`rg`、`find` 等），再加上你自定义的 `command_allowlist` 条目。破坏性模式（如 `rm -rf \u002F`、`sudo`、`mkfs` 等）始终被禁止，而管道\u002F重定向\u002F换行符即使使用 `--yes` 参数也会要求确认。\n- 命令执行有 120 秒的超时限制，且代理最多只能执行一步工具操作——不会出现循环。\n- 配置文件以安全权限创建。API 密钥来自环境变量，除非你明确将密钥添加到配置中。\n\n## 环境变量\n\n- `OPENROUTER_API_KEY` 用于 OpenRouter 提供商（默认）\n- `GROQ_API_KEY` 用于 Groq 提供商\n- `OPENAI_API_KEY` 用于 OpenAI 提供商\n\n## 开发\n\n项目布局：\n\n- 入口文件位于 `src\u002Fbin\u002Fqq.rs` 和 `src\u002Fbin\u002Fqa.rs`\n- 核心模块位于 `src\u002F`：`ai.rs`、`config.rs`、`prompt.rs`、`history.rs`、`perms.rs`、`formatting.rs`\n- 工具模块位于 `src\u002Ftools\u002F`：`read_file.rs`、`write_file.rs`、`execute_command.rs`\n- 集成测试位于 `tests\u002F`\n\n## 贡献\n\n请参阅 CONTRIBUTING.md，了解报告问题和提交拉取请求的指南、从源码构建以及发布流程。\n\n## 故障排除\n\n- API 错误提示缺少密钥：运行 `qq --init` 来进行设置，或导出相应的环境变量，例如 `export OPENROUTER_API_KEY=...`。\n- 流式传输时无输出：尝试使用 `-d` 查看调试日志，或使用 `--no-stream` 重新运行，以切换到缓冲输出（在某些边缘情况下可能效果更好）。\n- 管道输入未被检测：确保你是将输入直接管道到 `qq`，而不是在一个吞咽 stdin 的子 shell 中运行。\n\n## 许可证\n\n采用 MIT 许可证。","# qqqa 快速上手指南\n\nqqqa 是一个无状态（stateless）、基于大语言模型（LLM）的命令行助手工具。它包含两个核心二进制文件：\n- **`qq`** (Quick Question)：用于快速提问，获取解释或建议。\n- **`qa`** (Quick Agent)：单步智能体，可读取文件、写入文件或执行命令（需确认），适合自动化任务。\n\n该工具设计理念遵循 Unix 哲学，无长期会话记忆，每次运行独立且可复现，非常适合通过管道组合使用。\n\n## 环境准备\n\n### 系统要求\n- **操作系统**：macOS, Linux, Windows\n- **网络环境**：需要能够访问外部 LLM API（如 OpenRouter, OpenAI, Groq）或本地运行 Ollama。\n- **依赖项**：\n  - 若使用云端模型：需具备对应服务的 API Key。\n  - 若使用本地模型：需安装并运行 [Ollama](https:\u002F\u002Follama.com)。\n  - 若复用现有订阅：需安装 `codex-cli` (ChatGPT) 或 `claude-code` (Claude Desktop) 并确保其二进制文件在 PATH 中。\n\n### 前置配置\n默认推荐使用 **OpenRouter**，因为它兼容 OpenAI 接口且提供多种高性价比模型。你需要准备一个 API Key。\n\n## 安装步骤\n\n### macOS \u002F Linux (推荐 Homebrew)\n```sh\nbrew install qqqa\n```\n\n### Linux \u002F Windows (手动安装)\n1. 访问 [GitHub Releases](https:\u002F\u002Fgithub.com\u002Fiagooar\u002Fqqqa\u002Freleases) 下载对应系统的压缩包。\n2. 解压文件，将 `qq` 和 `qa` (Windows 下为 `qq.exe`, `qa.exe`) 移动到系统 PATH 目录中（例如 `\u002Fusr\u002Flocal\u002Fbin` 或添加到 `%PATH%`）。\n\n## 基本使用\n\n### 1. 初始化配置\n首次使用前，运行初始化向导以选择提供商并配置 API Key。\n\n```sh\n# 交互式设置（选择提供商如 OpenRouter, OpenAI, Ollama 等，并输入 Key）\nqq --init\n```\n*注：也可以直接设置环境变量（如 `export OPENROUTER_API_KEY=your_key`），然后在初始化时留空 Key 输入。*\n\n### 2. 使用 `qq` 快速提问\n`qq` 默认以流式输出回答，支持管道传入上下文。\n\n**简单提问：**\n```sh\nqq \"如何递归列出当前目录下所有文件\"\n```\n\n**结合管道使用（推荐）：**\n将命令输出作为上下文传递给 AI 进行分析：\n```sh\ngit status | qq \"总结接下来我该做什么\"\n```\n\n**禁用流式输出（适用于脚本处理）：**\n```sh\nqq --no-stream \"总结今天的 git 提交记录\"\n```\n\n**纯文本输出（无 ANSI 颜色格式）：**\n```sh\nqq -r \"解释 sed 和 awk 的区别\"\n```\n\n### 3. 使用 `qa` 执行任务\n`qa` 可以调用工具（读\u002F写文件、执行命令），但在执行操作前会要求用户确认，确保安全。\n\n**示例：让 AI 分析文件并给出修改建议（需确认后执行）：**\n```sh\nqa \"检查 package.json 是否有未使用的依赖，并生成清理脚本\"\n```\n\n### 4. 高级技巧\n- **使用终端历史**：在初始化时开启，或单次运行添加 `--history` 参数，让 AI 了解你之前的操作。\n  ```sh\n  qq --history \"查找昨天创建的大文件\"\n  ```\n- **关闭表情符号**：如果你偏好严肃的输出风格。\n  ```sh\n  qq --no-fun \"解释这段代码\"\n  ```\n- **切换模型配置文件**：\n  配置文件位于 `~\u002F.qq\u002Fconfig.json`。你可以编辑该文件切换默认的 Provider（如从 OpenRouter 切换到本地 Ollama）或调整模型参数。","一位后端开发者在排查生产环境日志时，需要快速理解复杂的报错信息并执行清理脚本。\n\n### 没有 qqqa 时\n- 遇到陌生报错需切换浏览器搜索文档或复制内容到网页版 AI，打断终端操作流。\n- 编写临时清理脚本时，需手动查阅命令参数，容易因记忆模糊导致语法错误。\n- 执行危险操作前缺乏即时确认机制，一旦输错命令可能误删重要数据。\n- 反复在编辑器、浏览器和终端间切换，注意力分散，排查效率低下。\n\n### 使用 qqqa 后\n- 直接输入 `qq \"分析这段 Nginx 502 报错原因\"`，无需离开终端即可获取精准解释。\n- 通过 `qa \"查找并删除 \u002Fvar\u002Flog 下超过 7 天的 .log 文件\"`，自动生成命令并请求确认后执行。\n- qa 内置安全机制，在执行写文件或运行命令前强制要求人工确认，杜绝误操作风险。\n- 全程键盘操作，利用 `qq` 和 `qa` 的极简指令无缝衔接问答与执行，保持心流状态。\n\nqqqa 将大模型能力原生融入命令行，让开发者在不中断工作流的前提下，实现从“查询知识”到“安全执行”的一站式闭环。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fiagooar_qqqa_8d4cd497.png","iagooar","Mateusz Sójka","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fiagooar_f7592a20.jpg","Coding, AI, Data \u002F\u002F Co-founder of the Podcast Hosting & Analytics Platform Podigee","Podigee","Poland",null,"https:\u002F\u002Fwww.podigee.com\u002F","https:\u002F\u002Fgithub.com\u002Fiagooar",[82,86,90],{"name":83,"color":84,"percentage":85},"Rust","#dea584",94.8,{"name":87,"color":88,"percentage":89},"Shell","#89e051",5.1,{"name":91,"color":92,"percentage":93},"Python","#3572A5",0.1,614,18,"2026-04-09T02:00:24","MIT","Linux, macOS, Windows","非必需。该工具为命令行客户端，主要调用远程 API（如 OpenRouter, OpenAI, Groq）或本地 CLI 包装器（Codex, Claude Code）。若选择本地 Ollama 模式，则取决于用户自行部署的 Ollama 模型对 GPU 的需求，工具本身无特定显卡要求。","未说明（作为轻量级 CLI 工具，内存需求极低，主要取决于是否运行本地大模型）",{"notes":102,"python":103,"dependencies":104},"1. 该工具是无状态（stateless）的 CLI 助手，默认通过 API 连接外部大模型服务。2. 支持多种后端：OpenRouter（默认）、OpenAI、Groq、Ollama（本地）、Codex CLI 和 Claude Code CLI。3. 若使用 Codex 或 Claude Code 模式，需预先安装对应的官方 CLI 工具（`codex` 或 `claude` 二进制文件）并完成登录认证。4. 若使用 Ollama 本地模式，需自行安装并运行 Ollama 服务。5. 可通过环境变量（如 OPENROUTER_API_KEY）或配置文件管理 API 密钥。","未说明（通过 Homebrew 或预编译二进制文件安装，无需用户直接管理 Python 环境）",[],[15,35,14,52,13],[107,108,109,110,111,112,113,114,115,116,117],"ai","cli","gpt-oss-120b","llm","productivity","terminal","groq","ollama","openrouter","claude","codex","2026-03-27T02:49:30.150509","2026-04-15T03:24:19.203976",[121,126,131,136,141,146,151,156],{"id":122,"question_zh":123,"answer_zh":124,"source_url":125},33540,"如何安装 qqqa（支持 macOS、Linux 和 Windows）？","推荐使用 Homebrew 安装（适用于 macOS 和 Linux）：\n1. 运行命令：`brew tap iagooar\u002Fqqqa`\n2. 运行命令：`brew install qqqa`\n\n对于 Windows 用户，可以通过 Cargo 安装：\n`cargo install --git https:\u002F\u002Fgithub.com\u002Fiagooar\u002Fqqqa`\n\n注意：早期版本可能缺少预编译二进制文件，建议直接使用上述包管理器或源码安装方式。","https:\u002F\u002Fgithub.com\u002Fiagooar\u002Fqqqa\u002Fissues\u002F1",{"id":127,"question_zh":128,"answer_zh":129,"source_url":130},33541,"是否支持本地大模型（如 Ollama）以及自定义端口配置？","是的，项目已支持 Ollama 等本地大模型提供者。虽然早期版本默认使用 11434 端口，但社区强烈建议并正在推进让用户可自定义端口的功能（例如 MSTY Studio 使用 11964 端口）。\n\n目前您可以在配置文件中指定 `base_url` 来适配非默认端口，例如：\n```json\n{\n  \"model_providers\": {\n    \"ollama\": {\n      \"base_url\": \"http:\u002F\u002F127.0.0.1:11964\u002Fv1\",\n      \"model\": \"your-model-name\"\n    }\n  }\n}\n```\n维护者确认该功能需求合理，将在后续版本中完善端口选择机制。","https:\u002F\u002Fgithub.com\u002Fiagooar\u002Fqqqa\u002Fissues\u002F7",{"id":132,"question_zh":133,"answer_zh":134,"source_url":135},33542,"如何连接使用自签名证书的私有 AI 网关服务？","从版本 v0.9.2 开始，qqqa 支持配置自定义 CA 证书以信任自签名证书。\n\n解决方法：\n在配置文件中添加指向您的 CA 证书文件的路径。虽然具体配置字段名未在讨论中完全展开，但维护者明确表示将通过配置文件指定 cert 文件路径的方式解决此问题，并计划未来支持 macOS Keychain。\n\n错误示例（修复前）：\n`invalid peer certificate: UnknownIssuer`\n\n修复后，工具将能成功连接使用自签名证书的 HTTPS 端点。","https:\u002F\u002Fgithub.com\u002Fiagooar\u002Fqqqa\u002Fissues\u002F15",{"id":137,"question_zh":138,"answer_zh":139,"source_url":140},33543,"支持哪些大模型提供者？是否包含 OpenRouter？","qqqa 支持多种大模型提供者，包括 OpenAI、Anthropic、OpenRouter 和本地 Ollama 等。\n\n特别地，OpenRouter 支持已在 v0.9.1 版本中加入。您可以通过以下配置使用 OpenRouter：\n```json\n{\n  \"model_providers\": {\n    \"openrouter\": {\n      \"name\": \"OpenRouter\",\n      \"base_url\": \"https:\u002F\u002Fopenrouter.ai\u002Fapi\u002Fv1\",\n      \"env_key\": \"OPENROUTER_API_KEY\"\n    }\n  }\n}\n```\n这使得用户可以统一访问多个平台的模型，无需为每个平台单独管理账户。","https:\u002F\u002Fgithub.com\u002Fiagooar\u002Fqqqa\u002Fissues\u002F2",{"id":142,"question_zh":143,"answer_zh":144,"source_url":145},33544,"在 Windows 上运行 `qa` 命令时提示 'dir: not found' 怎么办？","这是因为 Windows 的 `dir` 是 CMD 内置命令，而非独立可执行文件，导致 `qa` 调用失败。\n\n临时解决方案：\n1. 当提示 `[blocked] Command 'dir' is not in the qa allowlist` 时，输入 `y` 添加到白名单。\n2. 当提示 `sh: dir: not found` 时，说明当前 shell（如 Git Bash 或 WSL）无法识别 `dir`。\n\n建议改用跨平台兼容的命令，例如：\n- 使用 `ls` 代替 `dir`（在 Git Bash 或 PowerShell 中通常可用）\n- 或在配置中明确指定使用 `cmd \u002Fc dir` 形式调用\n\n维护者已意识到该问题，并计划在后续版本中增强对 Windows 内置命令的兼容性处理。","https:\u002F\u002Fgithub.com\u002Fiagooar\u002Fqqqa\u002Fissues\u002F12",{"id":147,"question_zh":148,"answer_zh":149,"source_url":150},33545,"使用 Ollama 运行 `qa` 命令时报错 'missing field command' 如何解决？","该问题出现在使用 Ollama 3.1 等较新版本时，由于模型返回的 JSON 格式不符合预期导致解析失败。\n\n解决方案：\n此问题已在 PR #36 中修复，并合并到主分支。请确保您使用的是最新版本的 qqqa（v1.0.0 或更高）。\n\n如果您仍在使用旧版本，请升级：\n- Homebrew 用户：`brew upgrade qqqa`\n- Cargo 用户：`cargo install --git https:\u002F\u002Fgithub.com\u002Fiagooar\u002Fqqqa --force`\n\n修复后，`qa` 命令应能正常解析 Ollama 返回的执行指令。","https:\u002F\u002Fgithub.com\u002Fiagooar\u002Fqqqa\u002Fissues\u002F32",{"id":152,"question_zh":153,"answer_zh":154,"source_url":155},33546,"为什么 GitHub Releases 页面显示所有版本都是 pre-release？","此前所有发布版本被标记为 pre-release 是因为项目尚未达到稳定状态，且存在 Apple 签名等问题阻碍正式发布的流程。\n\n截至 v1.0.0 版本，维护者已将正式发布标记取消，并发布了首个稳定版本：\nhttps:\u002F\u002Fgithub.com\u002Fiagooar\u002Fqqqa\u002Freleases\u002Ftag\u002Fv1.0.0\n\n现在您可以放心下载和使用标有最新稳定版的二进制文件，Homebrew-core 也已开始收录该项目。","https:\u002F\u002Fgithub.com\u002Fiagooar\u002Fqqqa\u002Fissues\u002F40",{"id":157,"question_zh":158,"answer_zh":159,"source_url":130},33547,"推荐哪些本地大模型用于 qqqa？不同模型表现如何？","根据社区测试反馈：\n\n- **Qwen3-Coder-30B (4bit 量化版)**：非常适合编程任务，仅需约 16GB 内存，响应速度快，在 `qqqa` 中表现优异。\n- **Phi-4 (14B) 和 Phi-3.5 (8B)**：适合本地运行，不啰嗦、响应快；较大模型适合复杂任务，较小模型适合命令行快速查询。\n- **Llama3.1:8b**：通用性强，但在某些情况下可能导致 `qa` 命令解析错误（需升级到最新版修复）。\n- **Gemma**：相比 Qwen 14B 较慢，尤其在非简单问题上延迟明显。\n\n建议：\n- 命令行交互选用 7B-8B 小模型以保证速度；\n- 复杂编码任务可选用 14B-30B 模型（需足够 RAM\u002FVRAM）；\n- 避免使用“思考型”模型（如部分 Qwen 变体），容易超时或输出冗长。",[161,166,171,176,181,186,191],{"id":162,"version":163,"summary_zh":164,"released_at":165},255754,"v1.0.0","`qqqa` 现已发布为稳定版！\n\n## 变更内容\n* Claude CLI LLM 后端：默认使用 haiku 4.5，以获得更快的响应速度\n* 通过指示模型减少思考步骤，缩短 LLM 推理时间\n* 修复：降低输出冗余度并去除重复内容\n* 修复：llama3.1 工具调用负载错误的问题\n* 提供跳过 Git 仓库检查的功能给 codex","2025-11-25T06:49:06",{"id":167,"version":168,"summary_zh":169,"released_at":170},255755,"v0.10.0","这是迄今为止最大的一次发布之一！\r\n\r\n## 亮点\r\n\r\n- **适用于 Windows 的二进制文件** —— `qq` 和 `qa` 现在都能识别 Windows Shell（cmd.exe 和 PowerShell！），支持实时流式输出代理命令的执行结果；发布脚本除了生成 macOS 和 Linux 构建的 tarball 外，还为 x86_64 和 aarch64 架构的 Windows 目标平台生成相应的压缩包。\r\n- **以流式交互为核心的用户体验** —— `qq` 默认以流式方式输出格式化响应（可通过 `--no-stream` 关闭）。\r\n- **将 CLI 编码工具用作 LLM 后端** —— 新增 `codex` 和 `claude` 配置文件，让您无需额外支付 API 费用即可复用 ChatGPT 或 Claude 的订阅服务。这项功能意义重大！\r\n- **精细化控制** —— 支持按每次运行设置 `--temperature`、在配置文件级别定义默认值，以及可配置的超时时间，即使在使用较慢的模型提供商时，也能确保运行结果的可预测性。","2025-11-10T16:40:33",{"id":172,"version":173,"summary_zh":174,"released_at":175},255756,"v0.9.2","- 新增（可选）自动复制到剪贴板功能，并提供配置选项，用户可根据偏好永久启用或禁用该功能。\n- 提高了默认的 qq\u002Fqa 超时时间，并使其可由用户自定义，从而帮助长时间运行的问题更可靠地完成。\n- 引入了加载自定义或自签名 TLS 证书的支持（例如用于 LiteLLM 等 LLM API 代理），允许用户在环境需要时指定本地证书文件。","2025-11-08T16:51:17",{"id":177,"version":178,"summary_zh":179,"released_at":180},255757,"v0.9.1","## 亮点\n\n- 新增对 OpenRouter 的支持\n- OpenRouter 目前已成为 openai\u002Fgpt-4.1-nano 随附的默认配置文件，因此在设置 OPENROUTER_API_KEY 后，新安装的用户即可立即使用这款快速且经济实惠的模型进行对话。","2025-11-07T11:02:23",{"id":182,"version":183,"summary_zh":184,"released_at":185},255758,"v0.9.0","## 变更内容\n  - 本地 LLM 支持：`qa --init` 现在可以直接预置一个 Ollama 提供者。该代理保持与 OpenAI 兼容的接口，但无需云 API 密钥，因此你可以在本地运行 llama3.1（或任何 Ollama 模型），并自定义端口。\n  - 简化配置：将 `api_key: \"local\"` 设置为配置项（或导出 `OLLAMA_API_KEY=local`），可以避免出现空的 Authorization 头，从而让中间件和反向代理在完全离线运行时也能正常工作。","2025-11-07T08:39:56",{"id":187,"version":188,"summary_zh":189,"released_at":190},255759,"v0.8.4","## 变更内容\n* 由 @iagooar 在 https:\u002F\u002Fgithub.com\u002Fiagooar\u002Fqqqa\u002Fpull\u002F6 中修复并支持较新的 OpenAI 模型\n* 增加推理力度支持，默认设置为 `minimal`\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fiagooar\u002Fqqqa\u002Fcompare\u002Fv0.8.3...v0.8.4\n\n如果您使用的是 macOS，我们建议通过 Homebrew 安装 `qqqa`，而不是直接使用二进制文件。","2025-11-06T19:56:09",{"id":192,"version":193,"summary_zh":194,"released_at":195},255760,"v0.8.3","亮点\n\n  - 增加了将整个命令\u002F问题直接通过管道传递到 qq 和 qa 的支持，因此 cat \"do X\" | qq 现在能够按预期工作。（#57794bc）\n  - qa 现在会在 PTY 中运行工具的同时实时（并带颜色）流式输出命令结果，并在之后打印结构化的摘要。（#c0cde1d）\n  - 加强了代理对工作目录的处理：模型只能请求当前工作区的子目录，任何超出范围的请求都会回退到会话根目录。（#bdd8793）\n  - 移除了未使用的依赖项，以实现更精简的构建。（#73147e0）\n\n发布工具\n\n  - scripts\u002Frelease.sh 现在默认会始终构建 macOS（x86_64 + arm64）和 Linux MUSL（x86_64 + arm64）的二进制文件，并将构建产物暂存到 target\u002Freleases\u002Fv0.8.3\u002F 目录下以便手动上传——不再使用 tracked\u002Freleases\u002F 目录。（#5777c2e, #bf6ba33）\n\n日常维护\n\n  - 更新了文档，以反映新的管道功能、发布流程以及历史记录行为的默认设置。（#48b1977）\n  - 进行了一些小修复：修正了速率限制的计算逻辑（#28faea1），添加了 --init 保护机制以防止覆盖现有配置（#da9c790），并更新了演示视频素材（#434ec12, #3db550e, #774c1ad, #ddb83d6）。","2025-11-06T15:38:13"]