with one click
fish-trail
// 话题治理器 — topic governance, context isolation, contamination scoring, session management
// 话题治理器 — topic governance, context isolation, contamination scoring, session management
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | fish-trail |
| description | Use this skill when topic_detect is high risk, users ask to 整理/切换/合并/归档话题 or 清空上下文, or mention topic governance/上下文污染/继承隔离/session resume. It routes continue/fork/switch/merge/archive/reset/bridge, applies context policy, builds context packages, logs decisions, and manages session boundaries via context-state MCP. |
| mcp | {"context-state":{"command":"uv","args":["run","python","mcp/context-state/server.py"]}} |
以下情况自动加载本skill:
topic_detect返回风险等级high(分数61-100).petfish/fish-trail/目录已存在(首次使用时由topic_create自动创建)Fish-trail supports ONNX-based sentence embedding as a Tier 2 fallback for semantic drift detection. This is fully optional — without it, keyword-based detection works identically to v0.6.x.
Install (optional):
pip install onnxruntime>=1.23 tokenizers>=0.13 huggingface_hub numpy
Platform support: Linux x86_64/ARM64, macOS ARM64, Windows x64/ARM64. macOS Intel (x86_64) is not supported by onnxruntime >=1.24 and will fall back to keyword-only.
Python requirement: >=3.11 (onnxruntime 1.25.x requirement).
Model: sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 (ONNX int8, ~118MB, downloads on first use).
Configuration: Add to .petfish/fish-trail/config.json:
{
"embedding": {
"enabled": true,
"preload": false,
"timeout_ms": 2000
}
}
See docs/embedding-setup.md for offline/air-gapped setup and troubleshooting.
话题单元。每个topic有独立的scope、summary、status和Context Package。详见references/topic-model.md。
| 关系 | 含义 | 检测可靠性 | 自动执行 |
|---|---|---|---|
| continue | 继续当前话题 | 高 | 是 |
| fork | 从当前分叉 | 高 | 是 |
| switch | 切换到已有话题 | 高 | 是 |
| reset | 清空上下文重新开始 | 高 | 是 |
| merge | 合并两个话题 | 中 | 否,需确认 |
| archive | 归档完成话题 | 中 | 否,需确认 |
| bridge | 建立桥接关系 | 低 | 否,需确认 |
5维度评分(0-100),详见references/contamination-scoring.md。
| 等级 | 分段 | 行为 |
|---|---|---|
| low | 0-30 | 静默继续 |
| medium | 31-60 | 简要提示上下文范围 |
| high | 61-100 | 触发本skill完整工作流 |
为topic生成的Markdown上下文文件,详见references/context-package-spec.md。三种变体:标准包、桥接包、导出包。
会话单元。session绑定外部会话ID(如OpenCode session_id)或自动推断创建。每个session记录话题切换时间线、topic引用和工作摘要。存储在.petfish/fish-trail/sessions/。
external session: 由外部平台提供session_id,ID格式 oc_<external_id>inferred session: 无外部ID时自动创建,ID格式 inf_<YYYYMMDD>_<4位hex>会话边界由以下机制自动管理:
topic_detect检测到archive或reset信号时,自动关闭关联sessionsession_bind时自动关闭不活跃超过24小时的sessionsession_close手动关闭session并附带summarysession_close支持auto_close_inactive参数批量关闭过期sessionsession_resume返回resume context用于跨会话上下文继承:
resume_context包含:session summary、topic refs、最近10条timeline事件摘要ContextBuilder.build_resume_package()生成完整的Resume Package(Markdown格式).petfish/fish-trail/contexts/{session_id}.resume.md当本skill被触发时,按以下5步执行:
目标:判断用户当前消息与活跃topic的关系。
操作:
topic_detect,传入用户消息文本relation(关系类型)、confidence(置信度)、risk(污染风险分数)、suggestion(建议动作)MCP调用示例:
tool: topic_detect
input: {
"text": "<用户消息文本>",
"current_topic": "<当前活跃topic ID>"
}
output: {
"relation": "switch",
"confidence": 0.85,
"risk": 45,
"risk_level": "medium",
"target_topic": "topic_20260502_c3d4",
"suggestion": "切换到topic「部署配置」,加载其Context Package"
}
决策规则:
目标:确认关系类型,获取详细污染评分。
操作:
contamination_score获取5维度明细contamination_explainMCP调用示例:
tool: contamination_score
input: {
"topic_a": "<source topic ID>",
"topic_b": "<target topic ID>"
}
output: {
"total": 52,
"level": "medium",
"dimensions": {
"topic_distance": 12,
"goal_conflict": 10,
"term_overloading": 10,
"output_format_divergence": 10,
"history_bias": 10
}
}
目标:根据关系类型和风险等级决定上下文处理策略。
策略矩阵:
| 关系 | low风险 | medium风险 | high风险 |
|---|---|---|---|
| continue | 完全继承,静默 | 完全继承,提示范围 | 完全继承,提示+确认 |
| fork | 自动fork,继承部分 | 自动fork,列出继承项 | fork前确认继承范围 |
| switch | 自动switch | switch,提示两个topic差异 | switch前确认,高亮风险维度 |
| merge | — | 确认后merge | 确认后merge,详细解释风险 |
| archive | — | 确认后archive | 确认后archive |
| reset | 自动reset | 自动reset | 自动reset(用户意图明确) |
| bridge | — | 确认后bridge | 确认后bridge,详细解释交叉范围 |
目标:根据Step 3的策略生成或更新Context Package。
操作:
根据关系类型选择对应的MCP tool:
| 关系 | MCP Tool | 操作 |
|---|---|---|
| continue | context_build | 更新当前topic的Context Package |
| fork | topic_create + context_build | 创建子topic,生成新Context Package(继承部分父topic上下文) |
| switch | context_build | 为目标topic重新生成Context Package |
| merge | topic_create + context_build_bridge | 创建合并topic,生成包含两个来源的Context Package |
| archive | context_freeze + topic_archive | 冻结Context Package,归档topic |
| reset | topic_create + context_build | 创建全新topic,生成空白Context Package |
| bridge | topic_link + context_build_bridge | 建立桥接关系,生成交叉Context Package |
MCP调用示例(fork场景):
# 1. 创建子topic
tool: topic_create
input: {
"title": "JWT认证API设计",
"scope": "Express路由,JWT token生成与验证,中间件",
"parent": "topic_20260503_a1b2"
}
output: {
"id": "topic_20260503_e5f6",
"status": "active"
}
# 2. 生成Context Package
tool: context_build
input: {
"topic_id": "topic_20260503_e5f6"
}
output: {
"path": ".petfish/fish-trail/contexts/topic_20260503_e5f6.context.md",
"size": 1234
}
目标:持久化本次路由决策,更新topic状态。
操作:
decision_log记录本次路由决策topic_update更新相关topic的status和summaryMCP调用示例:
# 1. 记录决策
tool: decision_log
input: {
"relation": "fork",
"source_topic": "topic_20260503_a1b2",
"target_topic": "topic_20260503_e5f6",
"risk_score": 45,
"risk_level": "medium",
"action": "created child topic, inherited partial context",
"user_confirmed": false
}
# 2. 更新topic
tool: topic_update
input: {
"topic_id": "topic_20260503_e5f6",
"summary": "从父topic分叉,关注JWT认证API设计"
}
| Tool | 参数 | 返回 |
|---|---|---|
topic_create | title, scope, parent? | topic对象 |
topic_list | status? | topic列表 |
topic_show | topic_id | topic详情 + 关联topics |
topic_update | topic_id, fields... | 更新后的topic |
topic_archive | topic_id | 归档确认 |
topic_search | query | 匹配topic列表 |
topic_link | source, target, relation | link对象 |
topic_unlink | source, target | 删除确认 |
topic_graph | — | nodes + edges |
| Tool | 参数 | 返回 |
|---|---|---|
topic_detect | text, current_topic?, session_id?, agent_id? | relation, confidence, risk, suggestion, session_id? |
| Tool | 参数 | 返回 |
|---|---|---|
context_build | topic_id | Context Package路径 + 大小 |
context_build_bridge | topic_a, topic_b | Bridge Package路径 |
context_export | topic_id, reason?, session_id? | Export Package路径 |
context_freeze | topic_id | Frozen Package路径 |
| Tool | 参数 | 返回 |
|---|---|---|
contamination_score | topic_a, topic_b | total, level, dimensions |
contamination_explain | topic_a, topic_b | 各维度评分理由 |
| Tool | 参数 | 返回 |
|---|---|---|
decision_log | relation, source, target, risk, action, session_id?, agent_id?... | log entry |
decision_history | topic_id?, session_id?, limit? | 决策历史列表 |
| Tool | 参数 | 返回 |
|---|---|---|
session_bind | external_session_id?, topic_id?, metadata? | session记录 |
session_get | session_id | 完整session含timeline |
session_list | topic_id?, since?, status?, limit? | session列表 |
session_resume | topic_id?, session_id? | session + topic_id + resume_context |
session_close | session_id, summary?, auto_close_inactive?, threshold_hours? | closed session + auto_closed list |
session_timeline | session_id, max_events? | timeline summary with recent events |
session_query | since?, until?, topic_id?, agent_id?, limit? | activity summary + matched events |
session_agents | session_id?, topic_id? | by_agent + by_topic attribution maps |
| Tool | 参数 | 返回 |
|---|---|---|
topic_recommend | topic_id, max_depth? | related topics ranked by graph proximity |
当MCP server未启动或连接失败时:
当topic_detect返回异常或超时:
当.petfish/fish-trail/目录过大:
context_build在生成前检查目录大小topic_archive清理旧topic| Tool | 参数 | 返回 |
|---|---|---|
topic_route | query, current_topic_id? | route result with must_load/may_load/must_not_load firewall, writes active_context.md |
topic_report | — | TOPIC_REPORT.md with overview, hub topics, pollution risks, stale topics, maintenance suggestions |
topic_validate | — | validation result: status (pass/fail), errors[], warnings[] for topic_graph.json integrity |
references/topic-model.md — Topic数据模型与关系类型references/contamination-scoring.md — 污染风险评分算法references/context-package-spec.md — Context Package格式规范references/topic-schema.md — Topic Graph JSON Schema规范