Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Repository files navigation

mini-cc

License: MIT Python 3.11+

mini-cc 是一个用 Python 编写的 Claude Code 精简教学实现:在单一 OpenAI 兼容 Provider 之上,提供 Agent Loop、工具系统、权限闸门、上下文与预算管理、以及会话级 Memory。适合用来理解「Agent Harness」各模块如何协作,而不是追求与商业产品功能对齐。


v0.x 迁移须知(rework-permission-modes)

本次 BREAKING change 把 MINI_CC_PERMISSION_MODE 三个字面值都改名 + 升级了 auto 的语义。升级后启动旧 .env 会 raise ValueError 并提示具体迁移路径。一行 sed 即可:

# Linux / macOS — 改 .env / config.toml
sed -i '' 's/MINI_CC_PERMISSION_MODE=ask/MINI_CC_PERMISSION_MODE=default/' .env
sed -i '' 's/MINI_CC_PERMISSION_MODE=deny-writes/MINI_CC_PERMISSION_MODE=plan/' .env
旧值 新值 行为变化
ask default 仅改名(兜底问用户)
deny-writes plan 仅改名(写工具一律拒,且不允许 allow rule 覆盖——这是 plan 的硬保证)
auto auto 语义收紧:旧 auto 是「全放行」核弹按钮;新 auto 是「safe 操作(Read/Glob/Grep/ls/pwd/git status 等)自动放、dangerous 操作仍走 ask」。要彻底无审批的工作流不再可达——这是有意限制(保留 docs/PRODUCT.md 业务规则第 1 条「写类工具默认要审批」)

同时新增 4 个可选 env:MINI_CC_BASH_SAFE_ARGV0 / MINI_CC_BASH_SAFE_ARGV01(扩展 Bash safe 白名单)+ MINI_CC_MAX_CONSECUTIVE_DENIALS / MINI_CC_MAX_TOTAL_DENIALS(连续 deny 熔断阈值)。详见下方 env 表。


功能概览

  • Agent Loop:流式解析模型输出,驱动多轮对话与工具调用循环。
  • Tool SystemRead / Glob / Grep / Write / Edit / Bash,统一工具协议与注册表。
  • Permission System:工具执行前集中审批(default / plan / auto,六步评估链 + Bash 三层防线 + 连续 deny 熔断)。
  • Context Management:令牌估算、预算、多级压缩(含大工具输出落盘、空闲微压缩、LLM 摘要等)。
  • Session 快照/save/resume/sessions/discard 与启动时的 pending 提示(详见下文与架构文档)。
  • Agent Memory:会话启动时加载项目 / 用户 memory 文本进入 system 侧(运行期不反复读盘)。
  • Provider:仅 openai_compat,基于官方 [openai](https://github.com/openai/openai-python) Python SDK,可对接 DeepSeek、Kimi、Ollama、智谱等任意 OpenAI 兼容端点。

更完整的产品边界与路线图见 docs/PRODUCT.md


环境要求

依赖 说明
Python 3.11+
uv 安装依赖与运行 CLI(不要用 pip / poetry 管理本仓库)
API 任意 OpenAI 兼容 HTTP API + 有效密钥

可选(参与规格与变更流程时):

依赖 说明
OpenSpec CLI openspec listopenspec validate 等(安装方式以你本机文档为准)
Cursor + 插件 仓库内 .cursor/commands 提供 /opsx:* 类工作流命令时依赖编辑器侧能力

安装与验证

git clone <repository-url> mini-cc
cd mini-cc
uv sync

建议在提交或发 PR 前跑齐门禁(格式、lint、类型、测试):

uv run ruff format --check src tests
uv run ruff check src tests
uv run mypy --strict src tests
uv run pytest

复制环境变量模板并填入真实密钥(勿将 .env 提交到 git):

cp .env.example .env
# 编辑 .env:至少配置 MINI_CC_BASE_URL、MINI_CC_API_KEY

CLI 会加载当前工作目录下的 .env已在 shell 中 export 的变量优先,.env 不会覆盖它们。


配置

变量 必填 说明
MINI_CC_BASE_URL OpenAI 兼容 API 根 URL
MINI_CC_API_KEY API Key(可与 OPENAI_API_KEY / DEEPSEEK_API_KEY 等兼容读取,见配置代码)
MINI_CC_MODEL 默认 deepseek-v4-flash
MINI_CC_PROVIDER 目前仅 openai_compat(默认)
MINI_CC_PERMISSION_MODE default(默认,未命中规则时问用户)/ plan(只读,写工具直接拒)/ auto(safe 自动 + dangerous 仍走 ask)。ask / deny-writes 已断裂改名,启动会 raise 迁移错误。
MINI_CC_BASH_SAFE_ARGV0 逗号分隔,扩展 Bash safe 白名单(如 jq,yq,sort)。
MINI_CC_BASH_SAFE_ARGV01 逗号分隔,每项 <argv0> <argv1>,扩展 Bash 二元组安全集(如 docker ps,kubectl get)。
MINI_CC_MAX_CONSECUTIVE_DENIALS 正整数,默认 3。连续被拒到阈值时 stderr 一次性 warning。
MINI_CC_MAX_TOTAL_DENIALS 正整数,默认 20。本次 agent.run 累计被拒到阈值时终止当前 turn。
MINI_CC_AUTO_MEMORY 是否启用会话尾自动记忆提取(truthy: 1/true/yes/on),默认 off
MINI_CC_AUTO_MEMORY_THROTTLE 自动提取节流阈值(每 N 个无工具调用的 turn 触发一次),正整数,默认 3

更多变量(压缩阈值、会话目录、pending 提示时间窗等)见根目录 [.env.example](.env.example)AGENTS.md


使用方式

# 单次提问(非交互)
uv run mini-cc -p "用一句话介绍当前目录"

# 交互式 REPL(Ctrl-D 或 /exit 退出)
uv run mini-cc

# 版本号
uv run mini-cc --version

厂商示例

DeepSeek

export MINI_CC_BASE_URL=https://api.deepseek.com
export MINI_CC_API_KEY=sk-...
export MINI_CC_MODEL=deepseek-v4-flash
uv run mini-cc -p "你好"

本地 Ollama

export MINI_CC_BASE_URL=http://localhost:11434/v1
export MINI_CC_API_KEY=ollama
export MINI_CC_MODEL=qwen2.5-coder
uv run mini-cc -p "你好"

Kimi / Moonshot

export MINI_CC_BASE_URL=https://api.moonshot.cn/v1
export MINI_CC_API_KEY=sk-...
export MINI_CC_MODEL=kimi-k2-turbo-preview
uv run mini-cc -p "你好"

REPL 命令

在交互模式下,以下以 / 开头的命令由 CLI 直接处理(不占用一轮 LLM):

命令 作用
/exit 退出 REPL
/snip [--keep N] 手动清理旧工具结果为占位符(白名单工具),默认保留最近 2 条原文
/compact [hint] 手动触发上下文摘要(可选 hint)
/save [描述] 将会话快照写入 .mini-cc/sessions/<session_id>/
/resume <id> 从快照恢复(仅当当前上下文为空时可用)
/sessions/sessions list 列出已保存快照
/discard <id> 删除指定快照(需确认)
/memory list 列出 ~/.mini-cc/memory/(user)和 <git_root>/.mini-cc/memory/(feedback/project/reference)下的所有记忆
`/memory show [user: project:]`
`/memory rm [user: project:]`

若存在 24 小时内 的快照,进入 REPL 时可能在 stderr 打印 pending 提示;阈值可通过 MINI_CC_PENDING_SESSION_MAX_AGE_HOURS 调整。行为与压缩策略详见 docs/ARCHITECTURE.mddocs/CONTEXT_AND_SESSIONS.md


长期记忆(Typed Memory)

LLM 可调 save_memory 工具把跨会话有价值的偏好 / 反馈 / 项目决策 / 外部引用记到本地(只存不能从代码重新推出来的信息)。例如对 LLM 说 "以后帮我记住:我偏好 Vitest 而不是 Jest",下一次会话启动时 MEMORY.md 索引会进 system prompt,LLM 就能据此调整行为。

四种闭合类型:

  • user — 跨项目用户偏好(落 ~/.mini-cc/memory/,跨项目共享)
  • feedback — 用户明确纠正或确认有效的做法(落 <git_root>/.mini-cc/memory/
  • project — 项目决策背景 / 不易从代码看出的约定
  • reference — 外部资源指针(看板、监控、文档链接)

启用会话尾自动提取(默认关闭,节流 3 turn / 次):

export MINI_CC_AUTO_MEMORY=on
export MINI_CC_AUTO_MEMORY_THROTTLE=3   # 默认值,可调
uv run mini-cc

含密钥(sk-… / ghp_… / AKIA… / Slack token / password=…)的写入会被硬拒,且不回显匹配子串到 LLM transcript。完整契约 / 边界 / 自动提取的互斥与节流细节见 docs/ARCHITECTURE.mdTyped Memory 一节。


仓库结构

.
├── src/mini_cc/          # 应用源码(agent / tools / permissions / context / memory / providers / config / cli)
├── tests/                # 与源码树对应的 pytest
├── docs/                 # 架构、产品、约定等文档(入口:docs/README.md)
├── openspec/             # OpenSpec:变更、归档与能力规格
├── .cursor/              # Cursor:rules、commands、skills(可选)
├── pyproject.toml        # 项目与工具链配置
├── .env.example          # 环境变量示例
├── AGENTS.md             # 面向 AI 助手的路由与硬约束(建议先读)
└── README.md             # 本文件

开发与贡献

  1. 遵循 docs/CONVENTIONS.md 中的编码、测试与提交约定。
  2. 架构边界与不可破坏约束见 AGENTS.md(含 Provider 边界、权限闸门、Memory 加载规则等)。
  3. 功能与规格变更通过 OpenSpec 管理:openspec/changes/openspec/specs/;活跃变更可用 openspec list 查看。
  4. 文档索引与新增文档登记规则见 docs/README.md

文档索引

文档 内容
AGENTS.md 命令速查、硬约束、文档路由
docs/ARCHITECTURE.md 组件、数据流、上下文压缩与会话恢复
docs/CONTEXT_AND_SESSIONS.md 上下文与会话持久化的实现细节
docs/PRODUCT.md 产品定位与路线图
docs/CONVENTIONS.md 工具链与贡献约定

License

本项目以 MIT License 发布(见 pyproject.tomllicense 字段;若仓库根目录后续添加 LICENSE 文件,以该文件为准)。

About

mini-cc 是一个用 Python 编写的 Claude Code 精简教学实现:在单一 OpenAI 兼容 Provider 之上,提供 Agent Loop、工具系统、权限闸门、上下文与预算管理、以及会话级 Memory。适合用来理解「Agent Harness」各模块如何协作,而不是追求与商业产品功能对齐。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages