lcc 本地上下文编译器

压缩编码 agent 的上下文,但不把内容摘要掉:逐字保留、离线运行,每次删除都有凭据和 recall 可查。

Star 数
★ 16
最近更新
今天
License
MIT
主语言
Python

30 秒速览

运行形态
命令行工具MCP 服务器Agent 插件 / 技能
可在哪里用
兼容但需适配Claude CodeCodex · OpenAI API · Claude API(部分支持)ChatGPT(不支持)
费用
免费,无需付费服务
上手难度
中 · 需要几步配置
开始前需要
Python 3.11+tiktoken 附加包(可选,用于精确 token 计数)Claude Code 2.1.274+(插件所需,需设置 CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1)TYPESAFE_API_KEY(可选,仅 jev provider 需要)Shell / 命令行本地文件系统MCP Server
典型场景
Claude Code 用户遇到长会话上下文膨胀、/compact 摘要后丢失具体报错或路径时,改用 lcc 插件保留原文并可按需 recall。
不适合
  • 需要一套通用 RAG 或向量检索方案的团队
  • 希望用摘要代替原文、不关心逐字保留的用户
  • 只使用非 Claude Code 的 agent 且需要开箱即用适配的团队

这个 Agent 能做什么,适合哪些场景?

lcc(Local Context Compiler)是一个面向编码 agent 的上下文压缩工具,目标是在不丢失关键信息的前提下减少会话 token。它把旧工具输出从上下文中移出,但每个被移除的片段都进入本地内容寻址存储(~/.cache/lcc/stash),可通过 recall 命令以哈希校验方式原样取回。所有保留的文本段与源文件逐字节一致,不会被改写或摘要。它提供三种使用方式:命令行工具 lcc、MCP 服务器(compact、recall、inspect 等工具)、以及替代 /compact 的 Claude Code 插件。默认判断器在本地 CPU 上以纯 Python 运行,无需 API 密钥或网络,另有一个需显式启用的远程 jev provider。每次压缩都会写出 JSON 报告,可用 lcc explain 查看每个块的保留或丢弃原因。

lcc 读取 Claude Code 会话 JSONL、Codex CLI rollout 文件、Aider 聊天记录或普通文档,按指定模式(tool-calls)与 provider(rules、specialist-v3、mechanical、jev)判断哪些块可丢弃。rules 模式有三种:lossless 只删可证明的重复,recoverable 还删可重读的输出,stashed(推荐)把被删输出写入 ~/.cache/lcc/stash 并在上下文里留下 [removed: N lines, X KB · lcc recall <id>] 形式的占位符。输出是一份压缩后的文件和一份 relevance-compaction-1.2 JSON 报告,报告记录 provider_used 与 degraded 状态。lcc recall <id> 读取时重新计算哈希;lcc explain report.json --source 给出每个块被保留或丢弃的理由。lcc measure-session 在单个会话或整个项目目录上离线运行各模式,仅打印计数(消息数、工具调用数、压缩前后 token、耗时),并可用 --input-map 展示缓存读写与工具结果所占的计费输入份额。MCP 服务器暴露 compact、compact_transcript、recall、inspect、prepare、explain、intake 七个工具。

  1. Claude Code 用户遇到长会话上下文膨胀、/compact 摘要后丢失具体报错或路径时,改用 lcc 插件保留原文并可按需 recall。
  2. 需要在 Cursor、Claude Desktop 等任意 stdio MCP 客户端中接入上下文压缩能力时,配置 lcc mcp 作为服务器。
  3. 开发者在 CI 或脚本中批量处理会话文件或 Markdown 文档,用 lcc compact 配合 -q 目标描述和对 --provider 选择生成压缩产物与审计报告。
  4. 研究员或团队想先用 lcc measure-session 在自己真实会话上量化各模式的 token 削减幅度,再决定是否采用。
  5. 需要审计合规的团队希望每次裁剪都有 JSON 报告和逐块理由,用 lcc explain 复核。
  6. 对隐私敏感、要求内容不出本机的用户,使用本地 CPU 运行的 rules 或 mechanical provider。

如何安装或部署这个 Agent?

需要 Python 3.11+。用 pip 安装包并为精确 token 计数加装 tiktoken 附加项:

pip install "local-context-compiler[tiktoken]"
lcc fetch-tokenizer

lcc fetch-tokenizer 是唯一联网命令,会下载 tiktoken 编码文件一次;不执行时计数会被标记为近似。

Claude Code 插件方式(需 Claude Code 2.1.274+ 并开启 function hooks):

export CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1
claude plugin marketplace add lucasmartins-ai/lcc
claude plugin install lcc@lcc --config provider=rules --config rulesMode=stashed

安装后需允许 mcp__plugin_lcc_lcc__recall,agent 才能取回被移除的输出。

如何使用这个 Agent?

先测量自己最近一次会话的削减效果(离线、仅打印计数):

lcc measure-session "$(ls -t ~/.claude/projects/*/*.jsonl | head -1)"

对会话文件或普通文档执行压缩,并写出压缩结果与 JSON 报告:

lcc compact ~/.claude/projects/<project>/<session>.jsonl -q "finish the parser fix" \
  --mode tool-calls --provider rules --rules-mode stashed -o compacted.json -r report.json
lcc compact notes.md -q "what is wrong with the booking flow?" \
  --provider mechanical -o compacted.md -r report.json

取回被移除的输出(读取时重新校验哈希),并查看每个块的去留理由:

lcc recall <id>
lcc explain report.json --source notes.md

作为 MCP 服务器接入任意 stdio 客户端:

{"mcpServers": {"lcc": {"command": "lcc", "args": ["mcp"]}}}

如需远程 jev provider,需设置 TYPESAFE_API_KEY 并显式指定 --provider jev;LCC_DISABLE_NETWORK=1 可禁用网络出口。

这个 Agent 有哪些优点和局限?

优点
  • 保留段与源文件逐字节一致,stashed 模式下被删输出可通过 recall 哈希校验后原样取回,不像 /compact 那样把整段会话重写成摘要。
  • 默认 provider 在本地 CPU 以纯 Python 运行,无需 API 密钥;网络仅用于可选的 tokenizer 下载和需显式启用的 jev provider。
  • 每次压缩产出 relevance-compaction-1.2 JSON 报告,lcc explain 能列出每个块的保留或丢弃理由,具备可审计性。
  • measure-session 可在本机真实会话上离线量化削减幅度并只输出计数,用 --input-map 还能查看计费输入的构成。
  • 同一套能力提供 CLI、MCP 服务器与 Claude Code 插件三种交付方式,并有针对真实会话与合成用例的公开基准。
局限
  • 削减效果高度依赖会话本身的噪声比例:作者自述 299 个长会话的削减中位数为 21.8%,低于 25% 的收益时插件会退回内置摘要。
  • specialist-v3 在 Claude Code 转录上训练,其他 agent 与普通文档属分布外;作者也承认它在合成基准中漏掉了葡萄牙语用例。
  • 作者公开的 held-out 基准标签来自单一维护者的 Claude Code 会话且语料私有,只有聚合结果,独立性证据有限。
  • Claude Code 插件依赖 function hooks 提前访问权限,需要 Claude Code 2.1.274+ 和环境变量开关,并非稳定通用接口。
  • README 明确说明它不保证模型回答正确,也不做 RAG、嵌入或向量存储,保护规则和有限恢复只是降低而非消除证据丢失风险。

这个 Agent 与同类方案有什么区别?

README 主要将 lcc 与 Claude Code 内置的 /compact 对比:/compact 用模型生成的摘要替换会话,会丢掉后续需要的精确报错、路径或行号;lcc 保留全部用户与助手消息,只把旧工具输出移出上下文并留待 recall。基准表还按 ranker 维度与 recency、bm25、random 基线比较召回 AUC。

与相关度最高的同类 agent 并排比较关键指标。

Agent 源码审查 形态 / 费用 Star 最近更新 主语言 完整支持的平台
lcc 本地上下文编译器 当前 78 · 表现良好 命令行工具免费 ★ 16 今天 Python Claude Code
OpenBrowser 60 · 存在缺口 命令行工具免费版 + 付费版 ★ 279 1 个月前 Python Codex · Claude Code · Claude.ai · OpenAI API · Claude API
Headroom:AI 代理的上下文压缩层 59 · 缺口较多 命令行工具免费 + 模型费 ★ 79k 今天 Python Codex · Claude Code · OpenAI API · Claude API
LeanCTX 上下文智能层 75 · 表现良好 命令行工具免费 + 模型费 ★ 3.9k 1 天前 Rust Codex · Claude Code · OpenAI API · Claude API

FollowAgents 如何评估这个 Agent?

FollowAgents 源码审查 · FARS-2.1
表现良好
78/ 100 五分制 3.9 / 5
本评测基于 2026年10月30日 的源码;此后该项目发布了 1 个正式版本,尚未复审。分数与结论只代表评测时的版本。 最近版本 ↓
信任安全 21/29
可靠稳定 11/14
适用触发 15/18
规范维护 16/18
有效结果 10/13
证据核验 5/8
查看各维度的扣分理由
信任安全21 / 29 · 3.6/5

SECURITY.md 与 PRIVACY_POLICY.md 明确说明默认离线、网络被阻断、jev 仅在显式指定或 LCC_AUTO_REMOTE=1 时启用、LCC_DISABLE_NETWORK=1 全局覆盖,数据流透明度做得很好(3)。但 least_privilege 仅得 2:stash 默认持久保存被移除的原文且不过期,recoverable 的 workspace_root 磁盘检查被作者自己承认不是沙箱;user_confirmation 得 2:远程路径需显式命名,但插件安装与 MCP 配置本身即授予 recall 权限,缺少逐次确认;sensitive_data_handling 得 2:明确声明不扫描/不脱敏上下文,stash 可长期保留密钥;dependency_security 得 2:有 pip-audit 周检与固定 SHA 的 action,但 package.json 的 devDependencies 含 fast-jev-compaction 与 railway 未做审计说明;external_effects 得 2:默认只写本地文件与 stash,但 --append-to、stash gc 等写操作存在;rollback 得 2:stash + recall 提供字节级恢复,但无自动过期、gc 需手动 --apply;source_attribution 得 2:LICENSE/NOTICE 与 Laya 的 Apache-2.0 归属清楚,但发布者身份未经验证,维护责任仅指向 LookADev 链接。

可靠稳定11 / 14 · 3.9/5

self_consistency 得 3:tests/invariants.py 把幂等、逐字节保留、recall 往返、无损坏、占位符稳定、计数对账、fail-closed 七条不变量集中定义,并由单元测试、fuzz 与语料回放共用,CI 也跑 fuzz 与基准门禁。dependency_availability 得 2:核心依赖 typer/rich/pyyaml 常见,tiktoken 与 laya 为可选且缺失时有明确降级,但 laya 额外依赖 torch/transformers 较重,且 README 与 SECURITY.md 对 tiktoken 首次下载的描述(fetch-tokenizer 可联网 vs 运行时阻断)需要读者自行调和。failure_messages 得 2:QUICKSTART 声称常见错误都给出下一步,但仓库内没有错误消息清单或快照测试佐证,只能算部分支持。

适用触发15 / 18 · 4.2/5

audience_and_scenarios 得 3:README 与 QUICKSTART 覆盖 Claude Code 插件、MCP、CLI、Python API、Aider 会话、Codex rollout 等多种场景。capability_boundaries 得 3:'What it does not do' 与 provider 表明确区分语义保证为 none、不检查答案正确性、无 RAG、specialist-v3 分布外。trigger_precision 得 2:插件在收益低于 25% 时回退到内置摘要,但触发条件依赖 Claude Code 2.1.274+ 与实验性 function hooks 标志,环境门槛高且行为依赖宿主版本。environment_fit 得 2:要求 Python 3.11+、Node 20、可选 tiktoken 缓存与 laya 资产,Windows/macOS/Linux 声明为 OS Independent 但未给出平台特定说明。

规范维护16 / 18 · 4.4/5

information_architecture 得 3:README 有清晰的安装、provider 表、基准、限制与文档索引,docs/ 下按主题分文件。install_notes 得 3:pip、插件 marketplace、MCP JSON、开发安装都给出可复制命令。naming_stability 得 2:README 明确 PyPI 上名为 lcc 的包无关、本包为 local-context-compiler,但 CLI 名 lcc 与包名不一致,且同时存在 Python 与 Node 两套 API(LccCompressor 等),命名面较宽。examples_and_faq 得 3:QUICKSTART 有编号场景、离线矩阵与 'Where next' 问答表。known_limitations 得 3:专门章节列出不做什么、stash 不过期、注入不清理等。license 得 3:MIT 全文、pyproject 与 package.json 一致、NOTICE 覆盖 Laya。versioning_changelog 得 2:版本 1.2.0 一致且指向 CHANGELOG.md,但 CHANGELOG 内容未在证据中,无法核实。maintenance_responsibility 得 2:作者与 LookADev 链接、SECURITY 报告渠道存在,但发布者身份未经验证,无治理或 SLA 说明。

有效结果10 / 13 · 3.8/5

output_usability 得 3:输出为逐字节保留的上下文加 JSON 报告,lcc explain 可逐块解释,recall 可恢复,占位符含行数与大小,便于下游直接使用。marginal_value 得 2:README 自述 299 个长会话中位削减 21.8%,且低于 25% 时插件回退,说明收益在部分场景有限;预注册测试显示与全上下文在文件召回上无显著差异(+0.006,CI 跨零),价值真实但幅度温和。cost_benefit 得 2:默认本地 CPU、无 API key,成本低;但 specialist-v3 在 302 块上 181ms、1138 块上 3.4s,且收益依赖上下文噪声比例,作者也承认该会话是最好情况之一。

证据核验5 / 8 · 3.1/5

claim_traceability 得 2:README 的每个数字都标注了命令、日期与版本(如 measure-session、2026-10-23、PyPI 1.2.0),并指向 docs/EVIDENCE.md 与 benchmarks/,但证据文件本身未在本次证据中,无法核对。cross_source_corroboration 得 2:README、QUICKSTART、SECURITY.md 对离线默认与 provider 行为的描述互相一致,但基准数字只有单一来源(维护者自己的会话),作者也承认标签偏向 v3 的训练目标。fact_inference_separation 得 2:README 用 'INFERIDO' 标注推断、区分合成可复现基准与私有会话聚合,做得不错;但 PRIVACY_POLICY.md 描述的是托管在 Railway 的 ChatGPT 插件,与 README 的本地优先叙事并存,读者需自行判断哪份适用于哪个部署,边界略混。

风险与缓解建议
  • stash 默认把被移除的原文逐字节保存在 ~/.cache/lcc/stash,不过期,可能长期保留密钥;需主动运行 lcc stash gc --apply 或删除目录。
  • SECURITY.md 明确说明 lcc 不扫描也不脱敏上下文,敏感内容会原样进入输出与 stash。
  • recoverable 模式的 workspace_root 磁盘检查被作者自己声明不是沙箱,不要把它当作隔离边界。
  • PRIVACY_POLICY.md 描述的是托管在 Railway 的 ChatGPT 插件,与 README 的本地优先叙事并存;使用托管端点前需确认哪份策略适用。
  • Claude Code 插件依赖实验性 function hooks 与 2.1.274+ 版本,宿主升级可能改变行为。
  • 发布者身份未经验证,维护责任仅指向 LookADev 链接,无治理或 SLA 说明。
  • package.json 的 devDependencies 含 fast-jev-compaction 与 railway,未纳入 pip-audit 的审计范围。
证据充分度:低 评估于 2026年10月30日 审查版本 2f4f925f4fb9 评估后仓库已有新提交,评分可能未覆盖最新改动
查看完整评分方法 →

最近版本

来自该项目 GitHub Releases 的最新发布记录,说明为上游原文摘录,未经本站改写或测试。

  1. v1.3.0
    发布说明摘录
    lcc 1.3.0 ```sh pip install -U "local-context-compiler[tiktoken]" lcc fetch-tokenizer # once: exact token counts ``` If you use the Claude Code plugin, update it from /plugin as well, so the hook and the lcc it calls are both 1.3.0. First run is fast and exact - lcc measure-session runs the two rules modes by default; auto needs --auto. On 1.2.0 the auto arm took 247 s of a 4 min 15 s run on a 10,559-message session, so the README's first command looked hung. On a ~520k-token session the default now returns in about 2 s …
    在 GitHub 查看 ↗
  2. v1.2.0
    发布说明摘录
    Added - lcc measure-session <session.jsonl>: runs rules:lossless, rules:stashed and auto on one Claude Code session, offline, and prints counts only (messages, tool calls, tokens before/after, texts kept, time). --markdown is ready to paste into an issue, --json is lcc-session-report/1. It never writes to the real stash. - lcc compact --mode tool-calls --rules-mode <mode> (with --provider rules): the CLI can now select stashed, recoverable or lossy; before, only MCP and Python could. …
    在 GitHub 查看 ↗
  3. v1.1.0
    发布说明摘录
    Added - Claude Code plugin: rulesMode: "stashed". The plugin accepted only lossless, recoverable and lossy, so the stashed mode could not be picked from Claude Code. Docs now recommend stashed with the recall tool, with the one measured run (INFERIDO) in docs/TOOL_CALLS.md. - rules_mode: "stashed" and lcc recall. Tool-call compaction can now remove what lossy drops or trims and what recoverable replaces without losing it: the exact bytes go to a local content-addressed stash (~/.cache/lcc/stash, 0700/0600, LCC_STASH_DIR) …
    在 GitHub 查看 ↗

常见问题

压缩后 agent 还能回答关于被移除内容的问题吗?
可以,前提是 agent 调用 recall。作者预注册测试中,使用 stashed 上下文加 recall 的 agent 在文件召回上与完整上下文表现相当(+0.006,95% CI −0.023 至 +0.034),token 少 36.6%,并对 90% 涉及被移除内容的问题调用了 recall。
会不会把内容发送到外部服务?
默认不会。rules、mechanical、specialist-v3 都在本地 CPU 上运行;唯一联网命令是 lcc fetch-tokenizer。远程 jev provider 必须显式指定 --provider jev 并配置 TYPESAFE_API_KEY,auto 不会自行选择它,除非设置 LCC_AUTO_REMOTE=1;LCC_DISABLE_NETWORK=1 可禁用。
能带来多少 token 削减?
取决于会话噪声比例。单个示例会话削减 49.5%(57,083 → 28,807 token);作者 299 个长会话的中位数是 21.8%,中间一半在 15% 到 31%,最好 65%。低于 25% 收益时报告会标记为不划算。
能用在 Claude Code 以外的 agent 上吗?
CLI 与 MCP 服务器不绑定 Claude Code,Codex CLI rollout 和 Aider 聊天记录也有文档支持。但 specialist-v3 只在 Claude Code 转录上训练,其他来源会被视为分布外,普通文本默认走 mechanical。
PyPI 上的 lcc 包就是它吗?
不是。PyPI 上名为 lcc 的包与本项目无关,本项目包名是 local-context-compiler,安装后命令为 lcc。
在 GitHub 查看 ↗ 安装 ↓

对比同类 Agent

用同一套 FARS 评审,横向比较这个 Agent 所属的短名单。

相关 Agents