# astrojones-mcp-retrieval - Doramagic AI Context Pack

> 定位：安装前体验与判断资产。它帮助宿主 AI 有一个好的开始，但不代表已经安装、执行或验证目标项目。

## 充分原则

- **充分原则，不是压缩原则**：AI Context Pack 应该充分到让宿主 AI 在开工前理解项目价值、能力边界、使用入口、风险和证据来源；它可以分层组织，但不以最短摘要为目标。
- **压缩策略**：只压缩噪声和重复内容，不压缩会影响判断和开工质量的上下文。

## 给宿主 AI 的使用方式

你正在读取 Doramagic 为 astrojones-mcp-retrieval 编译的 AI Context Pack。请把它当作开工前上下文：帮助用户理解适合谁、能做什么、如何开始、哪些必须安装后验证、风险在哪里。不要声称你已经安装、运行或执行了目标项目。

## Claim 消费规则

- **事实来源**：Repo Evidence + Claim/Evidence Graph；Human Wiki 只提供显著性、术语和叙事结构。
- **事实最低状态**：`supported`
- `supported`：可以作为项目事实使用，但回答中必须引用 claim_id 和证据路径。
- `weak`：只能作为低置信度线索，必须要求用户继续核实。
- `inferred`：只能用于风险提示或待确认问题，不能包装成项目事实。
- `unverified`：不得作为事实使用，应明确说证据不足。
- `contradicted`：必须展示冲突来源，不得替用户强行选择一个版本。

## 它最适合谁

- **正在使用 Claude/Codex/Cursor/Gemini 等宿主 AI 的开发者**：README 或插件配置提到多个宿主 AI。 证据：`README.md` Claim：`clm_0004` supported 0.86
- **希望把专业流程带进宿主 AI 的用户**：仓库包含 Skill 文档。 证据：`servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-cognee-doctor/SKILL.md`, `servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-graph-tune/SKILL.md`, `servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-mem-ingest-wisely/SKILL.md`, `skills/bugfix/SKILL.md` 等 Claim：`clm_0005` supported 0.86

## 它能做什么

- **AI Skill / Agent 指令资产库**（可做安装前预览）：项目包含可被宿主 AI 读取的 Skill 或 Agent 指令文件，可用于把专业流程带入 Claude、Codex、Cursor 等宿主。 证据：`servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-cognee-doctor/SKILL.md`, `servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-graph-tune/SKILL.md`, `servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-mem-ingest-wisely/SKILL.md`, `skills/bugfix/SKILL.md` 等 Claim：`clm_0001` supported 0.86
- **多宿主安装与分发**（需要安装后验证）：项目包含插件或 marketplace 配置，说明它面向一个或多个 AI 宿主的安装和分发。 证据：`.claude-plugin/marketplace.json`, `.claude-plugin/plugin.json` Claim：`clm_0002` supported 0.86
- **命令行启动或安装流程**（需要安装后验证）：项目文档中存在可执行命令，真实使用需要在本地或宿主环境中运行这些命令。 证据：`README.md` Claim：`clm_0003` supported 0.86

## 怎么开始

- `/plugin marketplace add astrojones/claude-plugins` 证据：`README.md` Claim：`clm_0006` supported 0.86
- `/plugin install astrojones@astrojones` 证据：`README.md` Claim：`clm_0007` supported 0.86

## 继续前判断卡

- **当前建议**：先做流程沙盒试用
- **为什么**：这个项目会改变宿主 AI 的开发流程和规则，值得继续试，但不要直接装进主力 Claude/Cursor/Codex；先用临时宿主或隔离目录验证。

### 30 秒判断

- **现在怎么做**：先做流程沙盒试用
- **最小安全下一步**：先用 Prompt Preview 感受流程约束；满意后再临时宿主试装
- **先别相信**：这套流程是否适合你的工作方式不能直接相信。
- **继续会触碰**：宿主行为改变、命令执行、宿主 AI 配置

### 现在可以相信

- **适合人群线索：正在使用 Claude/Codex/Cursor/Gemini 等宿主 AI 的开发者**（supported）：有 supported claim 或项目证据支撑，但仍不等于真实安装效果。 证据：`README.md` Claim：`clm_0004` supported 0.86
- **适合人群线索：希望把专业流程带进宿主 AI 的用户**（supported）：有 supported claim 或项目证据支撑，但仍不等于真实安装效果。 证据：`servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-cognee-doctor/SKILL.md`, `servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-graph-tune/SKILL.md`, `servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-mem-ingest-wisely/SKILL.md`, `skills/bugfix/SKILL.md` 等 Claim：`clm_0005` supported 0.86
- **能力存在：AI Skill / Agent 指令资产库**（supported）：可以相信项目包含这类能力线索；是否适合你的具体任务仍要试用或安装后验证。 证据：`servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-cognee-doctor/SKILL.md`, `servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-graph-tune/SKILL.md`, `servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-mem-ingest-wisely/SKILL.md`, `skills/bugfix/SKILL.md` 等 Claim：`clm_0001` supported 0.86
- **能力存在：多宿主安装与分发**（supported）：可以相信项目包含这类能力线索；是否适合你的具体任务仍要试用或安装后验证。 证据：`.claude-plugin/marketplace.json`, `.claude-plugin/plugin.json` Claim：`clm_0002` supported 0.86
- **能力存在：命令行启动或安装流程**（supported）：可以相信项目包含这类能力线索；是否适合你的具体任务仍要试用或安装后验证。 证据：`README.md` Claim：`clm_0003` supported 0.86
- **存在 Quick Start / 安装命令线索**（supported）：可以相信项目文档出现过启动或安装入口；不要因此直接在主力环境运行。 证据：`README.md` Claim：`clm_0006` supported 0.86

### 现在还不能相信

- **这套流程是否适合你的工作方式不能直接相信。**（unverified）：流程型 Skill 可能强约束 AI 行为；它能提升纪律，也可能拖慢你当前任务节奏。 证据：`.claude-plugin/marketplace.json`, `.claude-plugin/plugin.json`, `AGENTS.md`, `servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-cognee-doctor/SKILL.md` 等
- **不会和你已有 Claude/Cursor/Codex 规则冲突，不能直接相信。**（inferred）：开发流程 Skill 会改变澄清、计划、测试、验证等默认行为，必须在临时宿主里试。 证据：`.claude-plugin/marketplace.json`, `.claude-plugin/plugin.json`, `AGENTS.md`, `servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-cognee-doctor/SKILL.md` 等
- **真实输出质量不能在安装前相信。**（unverified）：Prompt Preview 只能展示引导方式，不能证明真实项目中的结果质量。
- **宿主 AI 版本兼容性不能在安装前相信。**（unverified）：Claude、Cursor、Codex、Gemini 等宿主加载规则和版本差异必须在真实环境验证。
- **不会污染现有宿主 AI 行为，不能直接相信。**（inferred）：Skill、plugin、AGENTS/CLAUDE/GEMINI 指令可能改变宿主 AI 的默认行为。 证据：`.claude-plugin/marketplace.json`, `.claude-plugin/plugin.json`, `AGENTS.md`, `servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-cognee-doctor/SKILL.md` 等
- **可安全回滚不能默认相信。**（unverified）：除非项目明确提供卸载和恢复说明，否则必须先在隔离环境验证。
- **真实安装后是否与用户当前宿主 AI 版本兼容？**（unverified）：兼容性只能通过实际宿主环境验证。 证据：`.claude-plugin/marketplace.json`, `.claude-plugin/plugin.json`
- **项目输出质量是否满足用户具体任务？**（unverified）：安装前预览只能展示流程和边界，不能替代真实评测。

### 继续会触碰什么

- **宿主行为改变**：澄清、计划、TDD、验证、收尾等默认开发节奏。 原因：这类 Skill 的价值和风险都来自强约束流程；必须先确认你愿意被它改变工作方式。 证据：`.claude-plugin/marketplace.json`, `.claude-plugin/plugin.json`, `AGENTS.md`, `servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-cognee-doctor/SKILL.md` 等
- **命令执行**：包管理器、网络下载、本地插件目录、项目配置或用户主目录。 原因：运行第一条命令就可能产生环境改动；必须先判断是否值得跑。 证据：`README.md`
- **宿主 AI 配置**：Claude/Codex/Cursor/Gemini/OpenCode 等宿主的 plugin、Skill 或规则加载配置。 原因：宿主配置会改变 AI 后续工作方式，可能和用户已有规则冲突。 证据：`.claude-plugin/marketplace.json`, `.claude-plugin/plugin.json`, `AGENTS.md`, `servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-cognee-doctor/SKILL.md` 等
- **本地环境或项目文件**：安装结果、插件缓存、项目配置或本地依赖目录。 原因：安装前无法证明写入范围和回滚方式，需要隔离验证。 证据：`.claude-plugin/marketplace.json`, `.claude-plugin/plugin.json`, `README.md`
- **宿主 AI 上下文**：AI Context Pack、Prompt Preview、Skill 路由、风险规则和项目事实。 原因：导入上下文会影响宿主 AI 后续判断，必须避免把未验证项包装成事实。

### 最小安全下一步

- **先跑 Prompt Preview**：先感受它会怎样改变 AI 的开发节奏，再决定是否让它进入真实宿主。（适用：任何项目都适用，尤其是输出质量未知时。）
- **只在隔离目录或测试账号试装**：避免安装命令污染主力宿主 AI、真实项目或用户主目录。（适用：存在命令执行、插件配置或本地写入线索时。）
- **先备份宿主 AI 配置**：Skill、plugin、规则文件可能改变 Claude/Cursor/Codex 的默认行为。（适用：存在插件 manifest、Skill 或宿主规则入口时。）
- **安装后只验证一个最小任务**：先验证加载、兼容、输出质量和回滚，再决定是否深用。（适用：准备从试用进入真实工作流时。）

### 退出方式

- **保留安装前状态**：记录原始宿主配置和项目状态，后续才能判断是否可恢复。
- **准备移除宿主 plugin / Skill / 规则入口**：如果试装后行为异常，可以把宿主 AI 恢复到试装前状态。
- **记录安装命令和写入路径**：没有明确卸载说明时，至少要知道哪些目录或配置需要手动清理。
- **如果没有回滚路径，不进入主力环境**：不可回滚是继续前阻断项，不应靠信任或运气继续。

## 哪些只能预览

- 解释项目适合谁和能做什么
- 基于项目文档演示典型对话流程
- 帮助用户判断是否值得安装或继续研究

## 哪些必须安装后验证

- 真实安装 Skill、插件或 CLI
- 执行脚本、修改本地文件或访问外部服务
- 验证真实输出质量、性能和兼容性

## 边界与风险判断卡

- **把安装前预览误认为真实运行**：用户可能高估项目已经完成的配置、权限和兼容性验证。 处理方式：明确区分 prompt_preview_can_do 与 runtime_required。 Claim：`clm_0008` inferred 0.45
- **宿主 AI 插件或 Skill 规则冲突**：新规则可能改变用户现有宿主 AI 的工作方式。 处理方式：安装前先检查插件 manifest 和 Skill 文件，必要时隔离测试。 证据：`.claude-plugin/marketplace.json`, `.claude-plugin/plugin.json` Claim：`clm_0009` supported 0.86
- **命令执行会修改本地环境**：安装命令可能写入用户主目录、宿主插件目录或项目配置。 处理方式：先在隔离环境或测试账号中运行。 证据：`README.md` Claim：`clm_0010` supported 0.86
- **待确认**：真实安装后是否与用户当前宿主 AI 版本兼容？。原因：兼容性只能通过实际宿主环境验证。
- **待确认**：项目输出质量是否满足用户具体任务？。原因：安装前预览只能展示流程和边界，不能替代真实评测。
- **待确认**：安装命令是否需要网络、权限或全局写入？。原因：这影响企业环境和个人环境的安装风险。

## 开工前工作上下文

### 加载顺序

- 先读取 how_to_use.host_ai_instruction，建立安装前判断资产的边界。
- 读取 claim_graph_summary，确认事实来自 Claim/Evidence Graph，而不是 Human Wiki 叙事。
- 再读取 intended_users、capabilities 和 quick_start_candidates，判断用户是否匹配。
- 需要执行具体任务时，优先查 role_skill_index，再查 evidence_index。
- 遇到真实安装、文件修改、网络访问、性能或兼容性问题时，转入 risk_card 和 boundaries.runtime_required。

### 任务路由

- **AI Skill / Agent 指令资产库**：先基于 role_skill_index / evidence_index 帮用户挑选可用角色、Skill 或工作流。 边界：可做安装前 Prompt 体验。 证据：`servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-cognee-doctor/SKILL.md`, `servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-graph-tune/SKILL.md`, `servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-mem-ingest-wisely/SKILL.md`, `skills/bugfix/SKILL.md` 等 Claim：`clm_0001` supported 0.86
- **多宿主安装与分发**：先说明这是安装后验证能力，再给出安装前检查清单。 边界：必须真实安装或运行后验证。 证据：`.claude-plugin/marketplace.json`, `.claude-plugin/plugin.json` Claim：`clm_0002` supported 0.86
- **命令行启动或安装流程**：先说明这是安装后验证能力，再给出安装前检查清单。 边界：必须真实安装或运行后验证。 证据：`README.md` Claim：`clm_0003` supported 0.86

### 上下文规模

- 文件总数：141
- 重要文件覆盖：40/141
- 证据索引条目：77
- 角色 / Skill 条目：11

### 证据不足时的处理

- **missing_evidence**：说明证据不足，要求用户提供目标文件、README 段落或安装后验证记录；不要补全事实。
- **out_of_scope_request**：说明该任务超出当前 AI Context Pack 证据范围，并建议用户先查看 Human Manual 或真实安装后验证。
- **runtime_request**：给出安装前检查清单和命令来源，但不要替用户执行命令或声称已执行。
- **source_conflict**：同时展示冲突来源，标记为待核实，不要强行选择一个版本。

## Prompt Recipes

### 适配判断

- 目标：判断这个项目是否适合用户当前任务。
- 预期输出：适配结论、关键理由、证据引用、安装前可预览内容、必须安装后验证内容、下一步建议。

```text
请基于 astrojones-mcp-retrieval 的 AI Context Pack，先问我 3 个必要问题，然后判断它是否适合我的任务。回答必须包含：适合谁、能做什么、不能做什么、是否值得安装、证据来自哪里。所有项目事实必须引用 evidence_refs、source_paths 或 claim_id。
```

### 安装前体验

- 目标：让用户在安装前感受核心工作流，同时避免把预览包装成真实能力或营销承诺。
- 预期输出：一段带边界标签的体验剧本、安装后验证清单和谨慎建议；不含真实运行承诺或强营销表述。

```text
请把 astrojones-mcp-retrieval 当作安装前体验资产，而不是已安装工具或真实运行环境。

请严格输出四段：
1. 先问我 3 个必要问题。
2. 给出一段“体验剧本”：用 [安装前可预览]、[必须安装后验证]、[证据不足] 三种标签展示它可能如何引导工作流。
3. 给出安装后验证清单：列出哪些能力只有真实安装、真实宿主加载、真实项目运行后才能确认。
4. 给出谨慎建议：只能说“值得继续研究/试装”“先补充信息后再判断”或“不建议继续”，不得替项目背书。

硬性边界：
- 不要声称已经安装、运行、执行测试、修改文件或产生真实结果。
- 不要写“自动适配”“确保通过”“完美适配”“强烈建议安装”等承诺性表达。
- 如果描述安装后的工作方式，必须使用“如果安装成功且宿主正确加载 Skill，它可能会……”这种条件句。
- 体验剧本只能写成“示例台词/假设流程”：使用“可能会询问/可能会建议/可能会展示”，不要写“已写入、已生成、已通过、正在运行、正在生成”。
- Prompt Preview 不负责给安装命令；如用户准备试装，只能提示先阅读 Quick Start 和 Risk Card，并在隔离环境验证。
- 所有项目事实必须来自 supported claim、evidence_refs 或 source_paths；inferred/unverified 只能作风险或待确认项。

```

### 角色 / Skill 选择

- 目标：从项目里的角色或 Skill 中挑选最匹配的资产。
- 预期输出：候选角色或 Skill 列表，每项包含适用场景、证据路径、风险边界和是否需要安装后验证。

```text
请读取 role_skill_index，根据我的目标任务推荐 3-5 个最相关的角色或 Skill。每个推荐都要说明适用场景、可能输出、风险边界和 evidence_refs。
```

### 风险预检

- 目标：安装或引入前识别环境、权限、规则冲突和质量风险。
- 预期输出：环境、权限、依赖、许可、宿主冲突、质量风险和未知项的检查清单。

```text
请基于 risk_card、boundaries 和 quick_start_candidates，给我一份安装前风险预检清单。不要替我执行命令，只说明我应该检查什么、为什么检查、失败会有什么影响。
```

### 宿主 AI 开工指令

- 目标：把项目上下文转成一次对话开始前的宿主 AI 指令。
- 预期输出：一段边界明确、证据引用明确、适合复制给宿主 AI 的开工前指令。

```text
请基于 astrojones-mcp-retrieval 的 AI Context Pack，生成一段我可以粘贴给宿主 AI 的开工前指令。这段指令必须遵守 not_runtime=true，不能声称项目已经安装、运行或产生真实结果。
```

## 角色 / Skill 索引

- 共索引 11 个角色 / Skill / 项目文档条目。

- **astrojones-cognee-doctor**（skill）：Use when durable memory misbehaves in a repository that has the repo-agent-harness — mem search returns nothing or errors, mem remember seems to vanish, recall is missing at session start, or you suspect double-written memory. Runs the checkable diagnosis mem doctor and walks the known non-obvious cognee deployment gotchas. 激活提示：当用户任务与“astrojones-cognee-doctor”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-cognee-doctor/SKILL.md`
- **astrojones-graph-tune**（skill）：Use when the cognee memory graph's entity types have gone noisy in a repository that has the repo-agent-harness — mem search returns diluted or scattered results, the same concept appears under many ad-hoc type names, or after a large uncurated ingest. Designs a fixed type vocabulary as NamedIndividuals, pins it with mem ontology, and verifies the collapse with a canary re-ingest. 激活提示：当用户任务与“astrojones-graph-tune”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-graph-tune/SKILL.md`
- **astrojones-mem-ingest-wisely**（skill）：Use when loading a batch of documents, notes, or history into the cognee memory graph in a repository that has the repo-agent-harness — docs folders, ADRs, session digests, incident writeups. Curates before ingesting, cost-checks with a dry run, tags with node sets, and proves retrieval with three canary queries before declaring success. 激活提示：当用户任务与“astrojones-mem-ingest-wisely”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-mem-ingest-wisely/SKILL.md`
- **bugfix**（skill）：Use when fixing a bug, diagnosing a failure, or chasing a stack trace in a repository that has the repo-agent-harness. Guides a safe, minimal-surface fix using Serena for navigation and the harness tools for context and verification. 激活提示：当用户任务与“bugfix”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`skills/bugfix/SKILL.md`
- **commit**（skill）：Creates semantic commits from working tree changes, grouping related changes chronologically and semantically. Plans commit groups with the main agent, then fans out to a swarm of Haiku subagents that draft commit messages in parallel before the main agent commits sequentially. Use when the user asks to clean up git status, create semantic commits, or organize changes into logical commits. 激活提示：当用户任务与“commit”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`skills/commit/SKILL.md`
- **feature**（skill）：Use when adding a new feature or capability to a repository that has the repo-agent-harness. Guides a smallest-vertical-slice implementation modeled on existing patterns, with tests and targeted verification. 激活提示：当用户任务与“feature”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`skills/feature/SKILL.md`
- **implement**（skill）：Use when taking a task from spec to done in a repository that has the repo-agent-harness — a task file, an issue, or a clear inline description. Runs the repo's end-to-end pipeline — spec gate → plan → implement via parallel TDD agents strict RED/GREEN/REFACTOR → verify → ship — wired to the harness tools and bundled subagents. 激活提示：当用户任务与“implement”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`skills/implement/SKILL.md`
- **onboard**（skill）：Use once per project a project may span multiple repos that share one dataset that has the repo-agent-harness to build its durable project memory in the cognee graph — the one-time onboarding that derives a type ontology from the repo's own symbol map and structure, curates and cost-gates the initial memories tech stack, commands, conventions, structure , ingests them into the project dataset under user confirmation… 激活提示：当用户任务与“onboard”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`skills/onboard/SKILL.md`
- **plan**（skill）：Use when planning a task in a repository that has the repo-agent-harness — turning a task file, an issue, or an inline description into an approved implementation plan before any code is written. Runs the harness-native plan flow the explorer and read-only architect subagents, Serena-powered in place of the built-in Explore / Plan agents, and owns the plan-mode gate end to end. Invoked as /astrojones:plan . 激活提示：当用户任务与“plan”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`skills/plan/SKILL.md`
- **refactor**（skill）：Use when restructuring or cleaning up code without changing behavior in a repository that has the repo-agent-harness. Enforces a behavior-preserving, scope-limited refactor with impact analysis and verification. 激活提示：当用户任务与“refactor”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`skills/refactor/SKILL.md`
- **test**（skill）：Use when writing, repairing, or running tests in a repository that has the repo-agent-harness. Guides narrow, targeted testing and disciplined failure triage. 激活提示：当用户任务与“test”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`skills/test/SKILL.md`

## 证据索引

- 共索引 77 条证据。

- **Agent guide — astrojones**（documentation）：Working in this repo repo-agent-harness 证据：`AGENTS.md`
- **astrojones**（documentation）：The repo agent harness as a Claude Code plugin. Install it once and every git repo you open gets safe, deterministic, repo-aware tooling and symbol-level code navigation — instead of a coding agent improvising with raw shell, and with no harness files written into the repo . 证据：`README.md`
- **astrojones — opencode plugin**（documentation）：The opencode half of the dual-target astrojones harness plugin. Mirrors what the Claude Code half does, except: opencode does not auto-load .claude/ , so this plugin materializes the per-assistant surfaces skills, commands, agents into the locations opencode reads from. 证据：`opencode/README.md`
- **repo-agent-harness MCP server + CLI**（documentation）：repo-agent-harness MCP server + CLI 证据：`servers/harness-mcp/README.md`
- **Agent guide — REPO NAME**（documentation）：Working in this repo repo-agent-harness 证据：`servers/harness-mcp/repo_agent_harness/templates/AGENTS.md`
- **Marketplace**（structured_config）：{ "name": "astrojones-dev", "owner": { "name": "astrojones", "url": "https://github.com/astrojones" }, "metadata": { "description": "Self-hosting marketplace for developing the astrojones plugin from this repo's working-copy HEAD. Register it as a local marketplace and enable astrojones@astrojones-dev to run the local source instead of the released version." }, "plugins": { "name": "astrojones", "source": "./", "category": "developer-tools", "keywords": "harness", "mcp", "serena", "coding-agent", "safety", "code-navigation" , "description": "The repo agent harness as a Claude Code plugin, loaded from local HEAD: a bundled, auto-connecting MCP server repo tools + proxied serena code navigati… 证据：`.claude-plugin/marketplace.json`
- **Plugin**（structured_config）：{ "name": "astrojones", "version": "3.23.0", "description": "The repo agent harness as a Claude Code plugin: a bundled, auto-connecting MCP server deterministic repo tools + proxied serena code navigation , safety hooks, and generic coding-workflow skills and subagents bugfix/feature/refactor/test/implement; explorer/implementer/reviewer/test-runner/fullstack-architect . Harnesses any repo automatically on connect AGENTS.md is opt-out ; /harness-init is the explicit fallback for non-MCP clients.", "author": { "name": "astrojones", "url": "https://github.com/astrojones" }, "homepage": "https://github.com/astrojones/astrojones", "keywords": "harness", "mcp", "serena", "coding-agent", "safety"… 证据：`.claude-plugin/plugin.json`
- **Package**（package_manifest）：{ "name": "astrojones-opencode", "version": "0.7.0", "type": "module", "description": "opencode half of the astrojones plugin: materializes workflow skills/commands/agents from the harness MCP server SSOT and wires the policy hook.", "license": "MIT", "main": "plugin/astrojones.ts", "exports": { ".": { "import": "./plugin/astrojones.ts", "types": "./plugin/astrojones.ts" } }, "files": "plugin", "opencode.json", "README.md" , "scripts": { "test": "vitest run" }, "peerDependencies": { "@opencode-ai/plugin": " =1.15.0" }, "devDependencies": { "@opencode-ai/plugin": "1.15.13", "@types/node": "^20.0.0", "typescript": "^5.4.0", "vitest": "^2.1.9" } } 证据：`opencode/package.json`
- **cognee-doctor — diagnose the durable-memory stack**（skill_instruction）：cognee-doctor — diagnose the durable-memory stack 证据：`servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-cognee-doctor/SKILL.md`
- **graph-tune — pin the memory graph's type vocabulary**（skill_instruction）：graph-tune — pin the memory graph's type vocabulary 证据：`servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-graph-tune/SKILL.md`
- **mem-ingest-wisely — curated, cost-gated bulk memory loads**（skill_instruction）：mem-ingest-wisely — curated, cost-gated bulk memory loads 证据：`servers/harness-mcp/repo_agent_harness/.agents/skills/astrojones-mem-ingest-wisely/SKILL.md`
- **Bugfix workflow**（skill_instruction）：1. Reproduce / locate the failure — the error message, failing test, or stack trace. 2. Find the relevant code - Unfamiliar or multi-file territory? Dispatch the explorer subagent to map the relevant symbols and hand back a focused reading list — it absorbs the file noise instead of flooding this session. - A known single symbol? Go direct: Serena find symbol / find referencing symbols , with repo context relevant files for a heuristic shortlist. 3. Read only what you need with repo read range — never dump whole files. 4. Assess blast radius — if the fix touches a shared symbol, run repo impact file first. 5. Fix the root cause with the smallest possible edit. No unrelated cleanup. 6. Verif… 证据：`skills/bugfix/SKILL.md`
- **Commit Semantic**（skill_instruction）：Create semantic, chronological commits from working tree changes. Plans commit groups first, then fans out to Haiku subagents for parallel message-drafting, and commits sequentially in the correct order. 证据：`skills/commit/SKILL.md`
- **Feature workflow**（skill_instruction）：1. Orient — repo context overview for languages, entrypoints, and important paths. 2. Find a comparable feature already in the codebase and mirror its structure. In an unfamiliar area, dispatch the explorer subagent to locate it and return a reading list; in a familiar one, go direct with Serena + repo context relevant files . 3. Identify the files involved: API/interface, domain/logic, and tests. 4. Implement the smallest vertical slice that delivers value end-to-end. 5. Add or update tests alongside the code. 6. Verify with repo verify changed ; review repo diff current . 证据：`skills/feature/SKILL.md`
- **implement — Spec-Driven TDD Pipeline**（skill_instruction）：implement — Spec-Driven TDD Pipeline 证据：`skills/implement/SKILL.md`
- **onboard — one-time durable-memory onboarding for a harness repo**（skill_instruction）：onboard — one-time durable-memory onboarding for a harness repo 证据：`skills/onboard/SKILL.md`
- **plan — harness-native plan mode**（skill_instruction）：Produces an approved implementation plan using the harness's read-only subagents instead of the built-in Explore / Plan agents. The agents navigate by symbol Serena rather than reading whole files, and they are dispatched workers — they return findings/design and never touch the plan-mode gate. This skill is the only caller of EnterPlanMode / ExitPlanMode , and the only writer of the plan file. 证据：`skills/plan/SKILL.md`
- **Refactor workflow**（skill_instruction）：1. State the target — the behavior-preserving change you intend rename, extract, move, simplify . 2. Check impact — run repo impact file on the targets; note dependents and test coverage. If the blast radius is unfamiliar, dispatch the explorer subagent to map the dependents by symbol before you touch them. 3. Make the mechanical change only. Resist unrelated cleanup "while I'm here" is how refactors break . 4. Verify with repo verify changed — behavior must be unchanged. 5. Review repo diff current specifically for scope creep; revert anything outside the stated target. 证据：`skills/refactor/SKILL.md`
- **License**（source_file）：Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files the "Software" , to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 证据：`LICENSE`
- **Test workflow**（skill_instruction）：1. Identify the likely test target for the change the harness maps changed source files to tests . 2. Run the narrowest test via repo verify changed or agent/tools/test-changed — not the full suite. 3. On failure, classify before fixing: - test bug wrong assertion/setup , - setup/environment bug, - genuine product bug. 4. Fix at the right layer — don't paper over a product bug by weakening the test. 5. Never update snapshots without a concrete reason. 证据：`skills/test/SKILL.md`
- **Changelog**（documentation）：rename: the plugin was renamed from raisl to astrojones . The MCP tool prefix is now mcp plugin astrojones repo-agent-harness was mcp plugin raisl repo-agent-harness , the install ref is astrojones@astrojones was raisl@astrojones , and the command namespace is /astrojones: was /raisl: . The GitHub repo moved to astrojones/astrojones was astrojones/raisl . The MCP server name repo-agent-harness and the Python package repo agent harness are unchanged. 证据：`CHANGELOG.md`
- **Handover — Restarbeiten v2 2026-07-16**（documentation）：Handover — Restarbeiten v2 2026-07-16 证据：`HANDOVER-2026-07-16-restarbeiten-v2.md`
- **Hooks**（structured_config）：{ "description": "astrojones: safe-shell + secret-read guard PreToolUse plus the perception layer — verify feedback after edits PostToolUse , a per-turn repo-state digest UserPromptSubmit , and a bounded durable-memory recall at session start SessionStart , all piped through the trusted bundled harness", "hooks": { "SessionStart": { "hooks": { "type": "command", "command": "python3 \"${CLAUDE PLUGIN ROOT}/hooks/session start.py\"", "timeout": 10 } } , "PreToolUse": { "matcher": "Bash Read Edit MultiEdit Write NotebookEdit", "hooks": { "type": "command", "command": "python3 \"${CLAUDE PLUGIN ROOT}/hooks/pre tool use.py\"", "timeout": 10 } } , "PostToolUse": { "matcher": "Edit MultiEdit Write… 证据：`hooks/hooks.json`
- **Harness Shim**（source_file）：GIT TIMEOUT = 2 TIMEOUT = 7 SPEC RE = re.compile ⋮---- def empty - None ⋮---- def harness argv root: Path, event: str - list str None ⋮---- cfg = json.loads root / ".mcp.json" .read text entry = cfg "mcpServers" "repo-agent-harness" ⋮---- args = entry.get "args", trusted = ⋮---- def plugin bundle argv event: str - list str None ⋮---- project = Path file .resolve .parent.parent / "servers" / "harness-mcp" ⋮---- module = "-m", "repo agent harness.agent hooks", event venv py = project / ".venv" / "bin" / "python" ⋮---- def run event: str - None ⋮---- payload = sys.stdin.read ⋮---- proc = subprocess.run ⋮---- root = Path proc.stdout.strip argv = harness argv root, event or plugin bundle argv ev… 证据：`hooks/_harness_shim.py`
- **Pre Tool Use**（source_file）：EVENT = "pre-tool-use" GIT TIMEOUT = 2 TIMEOUT = 7 SPEC RE = re.compile ⋮---- def allow - None ⋮---- def harness argv root: Path - list str None ⋮---- cfg = json.loads root / ".mcp.json" .read text entry = cfg "mcpServers" "repo-agent-harness" ⋮---- args = entry.get "args", trusted = ⋮---- def plugin bundle argv - list str None ⋮---- project = Path file .resolve .parent.parent / "servers" / "harness-mcp" ⋮---- module = "-m", "repo agent harness.agent hooks", EVENT venv py = project / ".venv" / "bin" / "python" ⋮---- def main - None ⋮---- payload = sys.stdin.read ⋮---- proc = subprocess.run ⋮---- root = Path proc.stdout.strip argv = harness argv root or plugin bundle argv ⋮---- out = subproc… 证据：`hooks/pre_tool_use.py`
- **---------------------------------------------------------------------------**（source_file）：build-system requires = "hatchling" build-backend = "hatchling.build" 证据：`servers/harness-mcp/pyproject.toml`
- **Cli**（source_file）：def root - str ⋮---- root = git.repo root ⋮---- def hook event: str - int ⋮---- data = json.load sys.stdin out = agent hooks.dispatch event, data ⋮---- out = {} ⋮---- def cognee local action: str, , confirm: bool - dict ⋮---- actions = { ⋮---- def deploy status limit: int, root: str - dict ⋮---- p = Path root ⋮---- def deploy logs run id: str, tail: int, root: str - dict ⋮---- def main argv: list str None = None - int ⋮---- common = argparse.ArgumentParser add help=False ⋮---- p = argparse.ArgumentParser sub = p.add subparsers dest="cmd", required=True ⋮---- sp = sub.add parser "relevant-files", parents= common ⋮---- sp = sub.add parser "search-text", parents= common ⋮---- sp = sub.add pars… 证据：`servers/harness-mcp/repo_agent_harness/cli.py`
- **----------------------------------------- coexistence memory-API wrappers P2**（source_file）：DEFAULT TIMEOUT S = 30.0 ⋮---- IDEMPOTENT ATTEMPTS = 3 RETRY BACKOFF S = 0.5 ⋮---- NOT CONFIGURED HINT = ⋮---- class CogneeError RuntimeError ⋮---- def init self, message: str, status: int None = None - None ⋮---- class CogneeNotConfiguredError CogneeError ⋮---- def init self - None ⋮---- class CogneeUnavailableError CogneeError ⋮---- """Raised when the server is unreachable or the circuit breaker is open.""" ⋮---- class CogneeAuthError CogneeError ⋮---- """Raised when login fails or a refreshed token is still rejected.""" ⋮---- def remote base url - str None ⋮---- """The remote cognee root URL from COGNEE BASE URL, or None when unset.""" raw = os.environ.get "COGNEE BASE URL" or "" .strip… 证据：`servers/harness-mcp/repo_agent_harness/cognee_client.py`
- **--------------------------------------------------------------------------- health + auth**（source_file）：LOG = logging.getLogger name ⋮---- IN CONTAINER PORT = 8000 DEFAULT CONTAINER = "astrojones-cognee" DEFAULT VOLUME = "astrojones-cognee-data" DEFAULT PORT = 8765 DEFAULT IMAGE = "cognee/cognee:1.4.0" DEFAULT EMAIL = "harness@example.com" ⋮---- DEFAULT BACKEND = "postgres" PG IMAGE = "pgvector/pgvector:pg17" PG CONTAINER = "astrojones-cognee-postgres" PG VOLUME = "astrojones-cognee-pgdata" PG NETWORK = "astrojones-cognee-net" PG USER = "cognee" PG PASSWORD = "cognee" PG DB = "cognee db" PG PORT = 5432 ⋮---- PG MAX CONNECTIONS = "300" PG SHARED BUFFERS = "1GB" ⋮---- SUMMARIZE PROMPT FILE = Path file .parent / "cognee local summarize prompt.txt" SUMMARIZE PROMPT CONTAINER PATH = "/app/cognee/i… 证据：`servers/harness-mcp/repo_agent_harness/cognee_local.py`
- **Env override for the claude-mem store location tests point this at a fixture DB .**（source_file）：LOG = logging.getLogger name ⋮---- POLL SECONDS = 60.0 ⋮---- BATCH SIZE = 20 ⋮---- POLL BUDGET S = 120.0 POLL INTERVAL S = 2.0 ⋮---- STATUS TIMEOUT = "timeout" STATUS ERROR = "error" ⋮---- DATASET UNSAFE = re.compile r" ^a-z0-9 " ⋮---- Env override for the claude-mem store location tests point this at a fixture DB . CLAUDE MEM DB ENV = "CLAUDE MEM DB" ⋮---- def default claude mem db - Path ⋮---- env = os.environ.get CLAUDE MEM DB ENV or "" .strip ⋮---- def dataset for project: str - str ⋮---- class SyncBreaker ⋮---- @property def state self - str ⋮---- def allow self - bool ⋮---- def record success self - None ⋮---- def record failure self - None ⋮---- class CogneeSync ⋮---- ---------------… 证据：`servers/harness-mcp/repo_agent_harness/cognee_sync.py`
- **Context**（source_file）：LANG BY EXT = { ⋮---- PKG MANAGERS = { ⋮---- KNOWN TOOLS = ⋮---- ENTRYPOINT CANDIDATES = ⋮---- BINARY SNIFF = 4096 RG FIELD COUNT = 3 MIN TERM LEN = 2 HIGH CONFIDENCE SCORE = 4 ⋮---- def read manifest root: str - dict ⋮---- p = Path root / "agent" / "manifest.yml" ⋮---- def top level dirs rootp: Path - list str ⋮---- out = c.name + "/" for c in sorted rootp.iterdir if c.is dir and not c.name.startswith "." ⋮---- def entry names d: Path, , dirs: bool, suffix: str = "" - list str ⋮---- """Sorted names of files stem or dirs directly under d ; skips dot/underscore entries.""" ⋮---- out = ⋮---- def harness summary rootp: Path - dict ⋮---- agents md = rootp / "AGENTS.md" guide = None ⋮---- text =… 证据：`servers/harness-mcp/repo_agent_harness/context.py`
- **Git**（source_file）：def repo root cwd: str None = None - str None ⋮---- cwd = os.environ.get "CLAUDE PROJECT DIR" res = shell.run "git", "rev-parse", "--show-toplevel" , cwd=cwd, timeout=10 ⋮---- def require root cwd: str None = None - str ⋮---- root = repo root cwd ⋮---- msg = "not inside a git repository" ⋮---- def porcelain root: str - list tuple str, str ⋮---- out = shell.run "git", "status", "--porcelain" , cwd=root, timeout=15 rows = ⋮---- name = name.split " - ", 1 1 ⋮---- def status root: str - dict ⋮---- branch = shell.run "git", "rev-parse", "--abbrev-ref", "HEAD" , cwd=root, timeout=10 ⋮---- last = shell.run "git", "log", "-1", "--pretty=%h %s" , cwd=root, timeout=10 ⋮---- def head root: str - str ⋮… 证据：`servers/harness-mcp/repo_agent_harness/git.py`
- **Mem**（source_file）：DEFAULT DATASET = "agent sessions" ⋮---- NODE SET PROJECT DOCS = "project docs" NODE SET SESSION DIGEST = "session digest" NODE SET CODE MAP = "code map" TYPE TAG PREFIX = "type:" CONCEPT TAG PREFIX = "concept:" PROJECT TAG PREFIX = "project:" ⋮---- def resolve dataset root: str None - str ⋮---- onboarded = paths.onboarded dataset root ⋮---- CHARS PER TOKEN = 4 CHUNK TOKENS = 1024 USD PER MTOK ENV = "COGNEE INGEST USD PER MTOK" COST LIMIT ENV = "COGNEE INGEST COST LIMIT USD" DEFAULT USD PER MTOK = 5.0 DEFAULT COST LIMIT USD = 1.0 ⋮---- COGNEE PLUGIN DIR = Path "~/.cognee-plugin" SENTINEL RECENT S = 600 ⋮---- def client client: CogneeClient None - CogneeClient ⋮---- def error exc: CogneeErro… 证据：`servers/harness-mcp/repo_agent_harness/mem.py`
- **Perception**（source_file）：LOG = logging.getLogger name ⋮---- RUNNABLE KINDS = {"lint", "typecheck", "test"} ⋮---- COALESCE SECONDS = 0.75 ⋮---- def summary data: dict - str ⋮---- first = next ln for ln in str data.get "output" or "" .splitlines if ln.strip , "failed" ⋮---- def read snapshot root: str - PerceptionSnapshot None ⋮---- """Load the current perception snapshot from disk, or None when absent/unreadable.""" ⋮---- def git state root: str - GitState ⋮---- """Snapshot branch/HEAD/dirty/conflicts for transition detection cheap; safe in a thread .""" st = git.status root ⋮---- def current state root: str - dict ⋮---- """Return the current perception snapshot as a dict for the repo state tool. Falls back to a git… 证据：`servers/harness-mcp/repo_agent_harness/perception.py`
- **Server**（source_file）：msg = "the 'fastmcp' package is required: uv add fastmcp" ⋮---- LOG = logging.getLogger name ⋮---- serena = gateway.SerenaGateway git.repo root ⋮---- async def cancel task: asyncio.Task None - None ⋮---- def ensure local if enabled - str None ⋮---- async def bring up local sync: cognee sync.CogneeSync - None ⋮---- base = await asyncio.to thread ensure local if enabled ⋮---- rebuilt = cognee client.get client ⋮---- @asynccontextmanager async def lifespan app: FastMCP - AsyncIterator dict ⋮---- = app root = git.repo root ⋮---- perception daemon = perception.Perception root, gateway= serena if root else None ⋮---- def on repo change changed: set str - None ⋮---- repo watcher = watcher.RepoWatc… 证据：`servers/harness-mcp/repo_agent_harness/server.py`
- **Watcher**（source_file）：DEBOUNCE MS = 500 GIT META SUFFIXES = "/.git/HEAD", "/.git/index" ⋮---- class GitAwareFilter watchfiles.DefaultFilter ⋮---- def call self, change: watchfiles.Change, path: str - bool ⋮---- class RepoWatcher ⋮---- def init self, root: str, on invalidate: Callable set str , None - None ⋮---- async def run self - None ⋮---- paths = self. relevant {p for , p in changes} ⋮---- def stop self - None ⋮---- def relevant self, absolute: set str - set str ⋮---- prefix = self.root.rstrip "/" + "/" relative = {p len prefix : for p in absolute if p.startswith prefix } meta = {p for p in relative if p.startswith ".git/" } ⋮---- def not ignored self, paths: set str - set str ⋮---- unknown = sorted p for p… 证据：`servers/harness-mcp/repo_agent_harness/watcher.py`
- **Your job: read the bodies, then design**（documentation）：You are architect . You design implementation plans and weigh architectural trade-offs, and you return a plan a staff engineer would approve. You are the harness-native replacement for the built-in Plan agent : where it would read whole files, you navigate by symbol Serena and precise range the harness , absorbing the file noise in your own context and returning only the plan with path:line citations. 证据：`agents/architect.md`
- **Your one job: map the relevant symbols**（documentation）：You are explorer . You locate the code relevant to a task and return a map of the relevant symbols — the blast radius . You navigate by symbol, not by reading whole files, and you keep the caller's context window clean: you absorb the file noise in your own window and return only a cited reading list. You are read-only and never modify code. 证据：`agents/explorer.md`
- **Tools**（documentation）：You are implementer . You own one stream of a larger task: write the tests and the code for the files assigned to you, and nothing outside that set. 证据：`agents/implementer.md`
- **Reviewer**（documentation）：You are reviewer . Review the current change set; report, do not fix. 证据：`agents/reviewer.md`
- **Harness Init**（documentation）：Set up the agent harness in the current repository so a coding agent has safe, deterministic, repo-aware tooling. The heavy lifting is done by the bundled harness CLI — do not copy files by hand. 证据：`commands/harness-init.md`
- **Test Cli**（source_file）：def test cli overview repo, monkeypatch, capsys ⋮---- rc = cli.main "overview" ⋮---- out = json.loads capsys.readouterr .out ⋮---- def test cli check command deny repo, monkeypatch, capsys ⋮---- def test cli status repo, monkeypatch, capsys 证据：`servers/harness-mcp/tests/test_cli.py`
- **Test Cognee Client**（source_file）：pytestmark = pytest.mark.anyio ⋮---- @pytest.fixture def anyio backend ⋮---- async def test login is lazy and shared ⋮---- fake = FakeCognee datasets= "kolbe" client = CogneeClient fake.client kwargs ⋮---- async def test expired token refreshes once and succeeds ⋮---- async def test not configured fails closed with hint ⋮---- client = CogneeClient url=None, auth=None, key=None ⋮---- async def test idempotent reads retry on transport error ⋮---- async def test writes are never blind retried ⋮---- async def test http error raises with status ⋮---- fake = FakeCognee ⋮---- async def test circuit opens after threshold and recovers via probe ⋮---- now = 0.0 circuit = CogneeCircuit clock=lambda: n… 证据：`servers/harness-mcp/tests/test_cognee_client.py`
- **Test Cognee Local**（source_file）：@pytest.fixture autouse=True def isolated home tmp path, monkeypatch ⋮---- def completed returncode=0, stdout="", stderr="" ⋮---- def test enabled default auto does not autostart monkeypatch ⋮---- def test enabled off never monkeypatch ⋮---- def test enabled armed requires docker monkeypatch ⋮---- def test docker run args recipe ⋮---- args = cognee local.docker run args "me@example.com", "pw123" ⋮---- def test docker run args mounts summarize prompt when vendored ⋮---- mount = f"{cognee local. SUMMARIZE PROMPT FILE}:{cognee local. SUMMARIZE PROMPT CONTAINER PATH}:ro" ⋮---- def test docker run args skips prompt mount when file absent monkeypatch ⋮---- def test container env mirrors remote em… 证据：`servers/harness-mcp/tests/test_cognee_local.py`
- **Test Cognee Sync**（source_file）：pytestmark = pytest.mark.anyio ⋮---- @pytest.fixture def anyio backend ⋮---- def wired fake: FakeCognee, , never trip: bool = False - CogneeClient ⋮---- kwargs = fake.client kwargs ⋮---- def remember count fake: FakeCognee - int ⋮---- def test dataset defaults to repo basename ⋮---- sync = CogneeSync "/home/dev/astrojones" ⋮---- async def test cycle ships then verifies then records ok tmp path ⋮---- db = store tmp path ⋮---- fake = FakeCognee ledger = SyncLedger sync = CogneeSync str tmp path , db=db, project="myrepo", ledger=ledger ⋮---- seq = path for m, path, p in fake.requests if path in {"/api/v1/remember", "/api/v1/datasets/status"} ⋮---- async def test cycle replay dedup skips alread… 证据：`servers/harness-mcp/tests/test_cognee_sync.py`
- **Test Context**（source_file）：def test overview repo ⋮---- ov = context.overview str repo ⋮---- def test detect languages orders by count repo ⋮---- langs = context.detect languages str repo ⋮---- def test serena languages maps and dedupes repo ⋮---- keys = context.serena languages str repo ⋮---- def test overview configured tools present repo ⋮---- def test overview configured tools reads pyproject repo ⋮---- def test overview harness absent repo ⋮---- h = context.overview str repo "harness" ⋮---- def test overview harness present repo ⋮---- def test read range ok repo ⋮---- out = context.read range str repo , "src/payment.py", 1, 2 ⋮---- def test read range refuses secret repo ⋮---- out = context.read range str repo ,… 证据：`servers/harness-mcp/tests/test_context.py`
- **Test Git**（source_file）：def test repo root repo ⋮---- def test status clean repo ⋮---- st = git.status str repo ⋮---- def test status dirty repo ⋮---- def test diff current redacts repo ⋮---- d = git.diff current str repo ⋮---- def test repo root uses claude project dir monkeypatch, repo ⋮---- result = git.repo root ⋮---- def test repo root ignores claude project dir when cwd explicit monkeypatch, repo ⋮---- result = git.repo root cwd=str repo ⋮---- def test repo root falls back to process cwd when env unset monkeypatch, repo ⋮---- original = pathlib.Path.cwd ⋮---- def test repo root resolves linked worktree repo, tmp path ⋮---- wt = tmp path / "linked-wt" ⋮---- result = git.repo root cwd=str wt ⋮---- def test rep… 证据：`servers/harness-mcp/tests/test_git.py`
- **----------------------------------------------------------------------- remember**（source_file）：pytestmark = pytest.mark.anyio ⋮---- @pytest.fixture def anyio backend ⋮---- def wired fake: FakeCognee - CogneeClient ⋮---- def unconfigured - CogneeClient ⋮---- async def test search returns shaped result ⋮---- fake = FakeCognee datasets= "kolbe" out = await mem.search MemSearchIn query="what happened?", dataset="kolbe" , client= wired fake ⋮---- payload = next p for m, path, p in fake.requests if path == "/api/v1/search" ⋮---- async def test search forwards node name to client ⋮---- async def test search scopes to onboarded dataset by default tmp path ⋮---- root = tmp path / "repo" ⋮---- fake = FakeCognee datasets= "projX" out = await mem.search MemSearchIn query="q", dataset=None , clie… 证据：`servers/harness-mcp/tests/test_mem.py`
- **Test Perception**（source_file）：def test due first run is always true ⋮---- p = perception.Perception "/tmp/repo" ⋮---- def test due respects min interval ⋮---- def test due adaptive factor scales with runtime ⋮---- def test write read roundtrip repo ⋮---- p = perception.Perception str repo snap = PerceptionSnapshot ⋮---- loaded = perception.read snapshot str repo ⋮---- def test read snapshot absent is none repo ⋮---- def test current state baseline without snapshot repo ⋮---- state = perception.current state str repo ⋮---- def test refresh runs only auto runnable checks and writes repo, monkeypatch ⋮---- cfg = HealthConfig ⋮---- ran: list str = ⋮---- def fake run kind root, kind ⋮---- snap = perception.read snapshot str… 证据：`servers/harness-mcp/tests/test_perception.py`
- **Test Server**（source_file）：def test server instructions present ⋮---- text = server.mcp.instructions ⋮---- def test tool functions callable repo, monkeypatch ⋮---- def test tools registered ⋮---- tools = asyncio.run server.mcp.list tools names = {t.name for t in tools} expected = { ⋮---- def test res impact resource repo, monkeypatch ⋮---- result = json.loads server.res impact "src/payment.py" ⋮---- def test read range blocks code when not onboarded repo, monkeypatch ⋮---- out = server.repo read range "src/payment.py" ⋮---- def test read range allows non code when not onboarded repo, monkeypatch ⋮---- out = server.repo read range "pyproject.toml" ⋮---- def test read range allows code once onboarded repo, monkeypatch… 证据：`servers/harness-mcp/tests/test_server.py`
- **Test Watcher**（source_file）：pytestmark = pytest.mark.anyio ⋮---- @pytest.fixture def anyio backend ⋮---- async def wait until predicate, timeout: float = 5.0 - None ⋮---- async def test tracked change invalidates repo ⋮---- hits: list set str = w = watcher.RepoWatcher str repo , hits.append ⋮---- async def test gitignored path does not invalidate repo ⋮---- async def test branch switch invalidates via git meta repo ⋮---- async def test rapid writes all reported repo ⋮---- async def test stop terminates run repo ⋮---- w = watcher.RepoWatcher str repo , lambda paths: None ⋮---- async def test server lifespan wires watcher to health repo, monkeypatch ⋮---- root = git.repo root 证据：`servers/harness-mcp/tests/test_watcher.py`
- **2026-07-18 — SSH-Alias + Dev-Target**（documentation）：2026-07-18 — SSH-Alias + Dev-Target - Für jonaheidsick.de/nuroot-prod immer ssh jhj verwenden User-Korrektur; nicht jh , nicht Raw-IP — Raw-IP wird zudem vom Permission-Classifier geblockt . - Entwickeln/Testen der cognee-Memory-Fixes gegen das LOKALE Repo + lokalen cognee-Container cognee local.py , nicht gegen bartix.de. Prod nur für Deploy + Verify-Probes. 证据：`tasks/lessons.md`
- **Bugfix workflow**（documentation）：1. Reproduce / locate the failure — the error message, failing test, or stack trace. 2. Find the relevant code - Unfamiliar or multi-file territory? Dispatch the explorer subagent to map the relevant symbols and hand back a focused reading list — it absorbs the file noise instead of flooding this session. - A known single symbol? Go direct: Serena find symbol / find referencing symbols , with repo context relevant files for a heuristic shortlist. 3. Read only what you need with repo read range — never dump whole files. 4. Assess blast radius — if the fix touches a shared symbol, run repo impact file first. 5. Fix the root cause with the smallest possible edit. No unrelated cleanup. 6. Verif… 证据：`servers/harness-mcp/repo_agent_harness/prompts/bugfix.md`
- **Commit workflow semantic commits**（documentation）：Group working-tree changes into atomic, semantic commits. Each commit must contain a single logical change that could be reverted independently. 证据：`servers/harness-mcp/repo_agent_harness/prompts/commit.md`
- **Feature workflow**（documentation）：1. Orient — repo context overview for languages, entrypoints, and important paths. 2. Find a comparable feature already in the codebase and mirror its structure. In an unfamiliar area, dispatch the explorer subagent to locate it and return a reading list; in a familiar one, go direct with Serena + repo context relevant files . 3. Identify the files involved: API/interface, domain/logic, and tests. 4. Implement the smallest vertical slice that delivers value end-to-end. 5. Add or update tests alongside the code. 6. Verify with repo verify changed ; review repo diff current . 证据：`servers/harness-mcp/repo_agent_harness/prompts/feature.md`
- **/harness-init — one-time bootstrap of the per-repo harness**（documentation）：/harness-init — one-time bootstrap of the per-repo harness 证据：`servers/harness-mcp/repo_agent_harness/prompts/harness-init.md`
- **implement — Spec-Driven TDD Pipeline**（documentation）：implement — Spec-Driven TDD Pipeline 证据：`servers/harness-mcp/repo_agent_harness/prompts/implement.md`
- **Refactor workflow**（documentation）：1. State the target — the behavior-preserving change you intend rename, extract, move, simplify . 2. Check impact — run repo impact file on the targets; note dependents and test coverage. If the blast radius is unfamiliar, dispatch the explorer subagent to map the dependents by symbol before you touch them. 3. Make the mechanical change only. Resist unrelated cleanup "while I'm here" is how refactors break . 4. Verify with repo verify changed — behavior must be unchanged. 5. Review repo diff current specifically for scope creep; revert anything outside the stated target. 证据：`servers/harness-mcp/repo_agent_harness/prompts/refactor.md`
- **Settings**（structured_config）：{ "enabledPlugins": { "astrojones@astrojones": false }, "extraKnownMarketplaces": { "astrojones": { "source": { "source": "github", "repo": "astrojones/claude-plugins" } } } } 证据：`.claude/settings.json`
- **.Mcp**（structured_config）：{ "mcpServers": { "repo-agent-harness": { "command": "${CLAUDE PLUGIN ROOT}/run-mcp.sh" } } } 证据：`.mcp.json`
- 其余 17 条证据见 `AI_CONTEXT_PACK.json` 或 `EVIDENCE_INDEX.json`。

## 宿主 AI 必须遵守的规则

- **把本资产当作开工前上下文，而不是运行环境。**：AI Context Pack 只包含证据化项目理解，不包含目标项目的可执行状态。 证据：`AGENTS.md`, `README.md`, `opencode/README.md`
- **回答用户时区分可预览内容与必须安装后才能验证的内容。**：安装前体验的消费者价值来自降低误装和误判，而不是伪装成真实运行。 证据：`AGENTS.md`, `README.md`, `opencode/README.md`

## 用户开工前应该回答的问题

- 你准备在哪个宿主 AI 或本地环境中使用它？
- 你只是想先体验工作流，还是准备真实安装？
- 你最在意的是安装成本、输出质量、还是和现有规则的冲突？

## 验收标准

- 所有能力声明都能回指到 evidence_refs 中的文件路径。
- AI_CONTEXT_PACK.md 没有把预览包装成真实运行。
- 用户能在 3 分钟内看懂适合谁、能做什么、如何开始和风险边界。

---

## Doramagic Context Augmentation

下面内容用于强化 Repomix/AI Context Pack 主体。Human Manual 只提供阅读骨架；踩坑日志会被转成宿主 AI 必须遵守的工作约束。

## Human Manual 骨架

使用规则：这里只是项目阅读路线和显著性信号，不是事实权威。具体事实仍必须回到 repo evidence / Claim Graph。

宿主 AI 硬性规则：
- 不得把页标题、章节顺序、摘要或 importance 当作项目事实证据。
- 解释 Human Manual 骨架时，必须明确说它只是阅读路线/显著性信号。
- 能力、安装、兼容性、运行状态和风险判断必须引用 repo evidence、source path 或 Claim Graph。

- **仓库与插件概览**：importance `high`
  - source_paths: README.md, CHANGELOG.md, AGENTS.md, HANDOVER-2026-07-16-restarbeiten-v2.md, .claude-plugin/plugin.json
- **Harness MCP 服务器与 repo_* 工具**：importance `high`
  - source_paths: servers/harness-mcp/README.md, servers/harness-mcp/pyproject.toml, servers/harness-mcp/repo_agent_harness/server.py, servers/harness-mcp/repo_agent_harness/cli.py, servers/harness-mcp/repo_agent_harness/context.py
- **感知守护进程、记忆与 Serena 集成**：importance `high`
  - source_paths: servers/harness-mcp/repo_agent_harness/perception.py, servers/harness-mcp/repo_agent_harness/watcher.py, servers/harness-mcp/repo_agent_harness/mem.py, servers/harness-mcp/repo_agent_harness/cognee_client.py, servers/harness-mcp/repo_agent_harness/cognee_local.py
- **安全钩子、工作流技能与扩展**：importance `high`
  - source_paths: hooks/hooks.json, hooks/_harness_shim.py, hooks/pre_tool_use.py, hooks/post_tool_use.py, hooks/session_start.py

## Repo Inspection Evidence / 源码检查证据

- repo_clone_verified: true
- repo_inspection_verified: true
- repo_commit: `dd3f378d814931b97f4793a70a2ef578e03be23c`
- inspected_files: `README.md`

宿主 AI 硬性规则：
- 没有 repo_clone_verified=true 时，不得声称已经读过源码。
- 没有 repo_inspection_verified=true 时，不得把 README/docs/package 文件判断写成事实。
- 没有 quick_start_verified=true 时，不得声称 Quick Start 已跑通。

## Doramagic Pitfall Constraints / 踩坑约束

这些规则来自 Doramagic 发现、验证或编译过程中的项目专属坑点。宿主 AI 必须把它们当作工作约束，而不是普通说明文字。

### Constraint 1: 可能修改宿主 AI 配置

- Trigger: 项目面向 Claude/Cursor/Codex/Gemini/OpenCode 等宿主，或安装命令涉及用户配置目录。
- Host AI rule: 列出会写入的配置文件、目录和卸载/回滚步骤。
- Why it matters: 安装可能改变本机 AI 工具行为，用户需要知道写入位置和回滚方法。
- Evidence: capability.host_targets | https://github.com/astrojones/astrojones | host_targets=mcp_host, claude_code, claude
- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。

### Constraint 2: 能力判断依赖假设

- Trigger: README/documentation is current enough for a first validation pass.
- Host AI rule: 将假设转成下游验证清单。
- Why it matters: 假设不成立时，用户拿不到承诺的能力。
- Evidence: capability.assumptions | https://github.com/astrojones/astrojones | README/documentation is current enough for a first validation pass.
- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。

### Constraint 3: 维护活跃度未知

- Trigger: 未记录 last_activity_observed。
- Host AI rule: 补 GitHub 最近 commit、release、issue/PR 响应信号。
- Why it matters: 新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。
- Evidence: evidence.maintainer_signals | https://github.com/astrojones/astrojones | last_activity_observed missing
- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。

- Trigger: no_demo
- Evidence: downstream_validation.risk_items | https://github.com/astrojones/astrojones | no_demo; severity=medium
- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。

### Constraint 5: 存在评分风险

- Trigger: no_demo
- Why it matters: 风险会影响是否适合普通用户安装。
- Evidence: risks.scoring_risks | https://github.com/astrojones/astrojones | no_demo; severity=medium
- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。

### Constraint 6: issue/PR 响应质量未知

- Trigger: issue_or_pr_quality=unknown。
- Host AI rule: 抽样最近 issue/PR，判断是否长期无人处理。
- Why it matters: 用户无法判断遇到问题后是否有人维护。
- Evidence: evidence.maintainer_signals | https://github.com/astrojones/astrojones | issue_or_pr_quality=unknown
- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。

### Constraint 7: 发布节奏不明确

- Trigger: release_recency=unknown。
- Host AI rule: 确认最近 release/tag 和 README 安装命令是否一致。
- Why it matters: 安装命令和文档可能落后于代码，用户踩坑概率升高。
- Evidence: evidence.maintainer_signals | https://github.com/astrojones/astrojones | release_recency=unknown
- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。
