6.4 KiB
6.4 KiB
cc-slim
cc-slim 是一个刻意保持极简的 coding harness,风格接近 Claude Code / Codex。
它只聚焦本地 coding agent 的最小核心闭环:
- CLI / REPL 入口
- 模型驱动的 agentic loop
- 流式文本输出
- 小而清晰的工具面
- session 持久化
- 结构化长期记忆
- 手动
/dreamconsolidation - mode / permission / workspace 控制面
这个项目不是一个“大而全的平台”。它的目标是:
- 可读
- 可讲解
- 适合写进简历
- 足够小,能从头到尾讲清楚
当前真实已实现的能力
- 模型 -> 工具调用 -> 工具执行 -> 结果回填 -> 最终回答 的 agentic loop
- 带工具状态提示的 streaming REPL
- 内置工具:
ReadGlobGrepWriteEditBash
- 用于 session / memory / mode / permission 的 slash command 路由
- session 持久化、history、resume
- 基于 Markdown 的结构化 Memory v2
- 手动
/dream,把当前 session 提炼进 Memory Write/Edit/Bash的 permission gatebuild/plan两种模式- 以 workspace 为默认边界
- 显式
--workspace支持
当前明确没有实现的内容
- sandbox
- sub-agent / coordinator
- 向量数据库或 Mem0 backend
- 自动后台 dream / consolidation
- multi-session dream
- 复杂技能执行框架
- 细粒度路径白名单 / 黑名单
这些是刻意不做的取舍,不是“以后补完才算完整”。
安装
uv sync
凭证可以通过环境变量提供,也可以通过 cc-slim 程序目录下的 .cc-slim.toml 提供。
快速开始
在目标项目目录中直接运行:
uv run cc-slim
从其他目录运行,但显式指定工作区:
uv run cc-slim --workspace E:\04test
单次提问:
uv run cc-slim "what does this repo do?"
查看当前 workspace 的历史 session:
uv run cc-slim --history
恢复历史 session:
uv run cc-slim --resume 1
跳过高风险工具确认:
uv run cc-slim --auto-approve
--workspace 只影响操作目标项目,不影响 cc-slim 自身配置的读取位置。
REPL 命令
会话命令:
/history/resume <id-or-index>/new/clear,作为/new的别名
Memory 命令:
/memory/remember <text>/dream
模式命令:
/mode/mode build/mode plan/build/plan
权限命令:
/permissions/permissions auto-on/permissions auto-off
运行时模型
当前代码里实际上区分了两个 root:
- program root
cc-slim自己的程序仓库- 用于读取
.cc-slim.toml
- workspace root
- 当前实际要操作的项目目录
- 用于
AGENTS.md、SKILLS、Session、Memory、权限与边界控制
system prompt 的组装顺序是:
src/cc_slim/system.md- runtime summary
- workspace
AGENTS.md - workspace
SKILLS/*.md - 结构化
Memory
这几层职责分别是:
system.md- 程序内置的基础行为
- workspace
AGENTS.md- 当前项目 / 工作区规则
Memory- 长期项目知识与用户偏好
Session- 原始对话历史
Dream- 把当前 session 手动整理进 Memory
Mermaid 架构图
flowchart TD
U[User] --> CLI[CLI / REPL in main.py]
CLI --> CMD[Slash command router in commands.py]
CLI --> LOOP[Agent loop in engine.py]
CMD --> SESS[SessionStore]
CMD --> MEM[MemoryStore]
CMD --> MODE[ModeState]
CMD --> PERM[PermissionChecker]
CMD --> DREAM[/dream -> Agent.dream/]
SYS[system.md] --> PROMPT[Prompt Assembly]
RT[Runtime Summary] --> PROMPT
AG[workspace AGENTS.md] --> PROMPT
SK[workspace SKILLS/*.md] --> PROMPT
MEM --> PROMPT
PROMPT --> LOOP
SESS --> LOOP
LOOP --> TOOLS[Read / Glob / Grep / Write / Edit / Bash]
PERM --> TOOLS
MODE --> PERM
BOUNDARY[Workspace Boundary] --> PERM
LOOP --> STREAM[Streaming text + tool events]
STREAM --> CLI
DREAM --> MEM
SESS --> CMD
工具层
当前工具边界是刻意收窄的:
Read- 读取 workspace 内文本文件
Glob- 在 workspace 内按路径模式查找文件
Grep- 在 workspace 内做普通文本包含搜索
- 不是正则搜索
- 最多返回 20 条结果
Write- 创建或覆盖完整文件
Edit- 用完整新内容覆盖已有文件
Bash- 以 workspace 为
cwd执行 shell 命令
- 以 workspace 为
当前没有:
- patch 级局部编辑工具
- AST 编辑
- shell sandbox
模式、权限与边界控制
build 是正常执行模式。
plan 在当前实现中是只读模式:
- 默认允许:
ReadGlobGrep
- 硬性阻止:
WriteEditBash
权限行为:
Read、Glob、Grep自动允许Write、Edit、Bash需要确认,除非使用--auto-approve或/permissions auto-on- 硬边界优先于审批:
plan模式限制- 明显指向 workspace 外路径的
Bash
Session、Memory、Dream
Session:
- 存在
~/.config/cc-slim/sessions/<workspace>/ - 消息历史为
.jsonl - 元信息为
.meta.json
Memory:
- 存在
~/.config/cc-slim/memory/<workspace>/MEMORY.md - 当前结构化 sections 为:
User MemoryProject MemoryConstraintsConsolidated FactsScratch Notes
/remember:
- 把原始笔记追加到
Scratch Notes
/dream:
- 只使用当前已加载的 session
- 调模型提炼长期有效信息
- 回写结构化 Memory sections
- 保留
Scratch Notes
它是 consolidation,不是聊天 summary。
Why this project is intentionally small
这个仓库的目标是展示 harness 的核心机制,而不是用更多基础设施把问题“藏起来”。
因此它刻意没有做:
- sandbox
- 因为当前重点是控制流、权限和边界,而不是进程隔离
- sub-agent / coordinator
- 因为单 agent 闭环更容易讲清楚,也更容易验证
- vector DB / Mem0 backend
- 因为当前 Memory 刻意保持文件化、可读、可控
- 自动后台 dream
- 因为手动 consolidation 更容易清楚地区分 Session 与 Memory
- 复杂技能系统
- 因为
SKILLS/*.md已足够展示 prompt layering,而不需要引入插件平台
- 因为
结果是它比生产系统小很多,但也更容易读、演示和讲解。
测试
运行测试:
uv run pytest -q
当前测试覆盖:
- 配置解析
- 工具原语
- 结构化 memory 行为
- dream 更新行为
- prompt 分层顺序