用途:geo-loop 用于在一个工作区域名上执行一次有边界的 eGEOagents 循环迭代。它只管理循环模式,一次性的 /geo <url> 保持不变,也不需要工作区。
主要能力:读取章程(charter)与新的采集数据,执行单个工作单元,把底层产物写入由 $EGEO_HOME(默认 ~/.egeo/)解析出的工作区。典型工作单元包括:目标 URL 排名移动≥3 位时写/更新 signal;目标反复不在前 10 时写 signal 加修复文档;被跟踪页面 content_hash 变化时写 signal;页面无 JSON-LD 时写可直接复制的 JSON-LD 文档;完全没有新数据时记为 outcome no-op,不发明工作。排名位置以 data/serp/ 为准,自行模拟的排名必须标 confidence: low 并在正文说明。
使用方式:先用 egeo loop run <domain> --dry-run 解析本次计划(这是运行的事实来源,不写任何内容;需要解析时加 --json);非零退出即停止并报告。然后读取状态:$EGEO_HOME/domains/<domain>/README.md(章程、节奏、focus、backlog、Timeline)、$EGEO_HOME/project.yaml(存在时)、$EGEO_HOME/data/<collector>/*.jsonl、$EGEO_HOME/signals/ 与 docs/、$EGEO_HOME/config.yaml、$EGEO_HOME/data/outcomes/ledger.jsonl。执行工作后按 SUBSTRATE.md 约定写产物:signals/<slug>.md 存证据,docs/<slug>.md 存持久知识,kebab-case 文件名、英文正文、按 kind 决定目录。没有新数据时先运行采集器:egeo loop collect serp --query "best geo tool" --target-domain example.com 或 egeo loop collect page --url https://example.com/pricing;serp 需要 BRAVE_API_KEY,二者都受 config.yaml 的每日预算限制并会显式失败而非写部分记录。最后追加一条 Timeline 条目和一行 LOG.md,并运行 python -m egeo.substrate_lint 与 egeo loop doctor 校验,再重读确认两次追加各只落一次。
限制与规则:绝不写入 eGEOagents 仓库树,所有写入都进工作区;每次运行只做一个工作单元,不批处理;每次恰好一条 Timeline 条目和一行 LOG.md;先写后验,退出前重读每个写过的文件;绝不编造,排名、竞争对手、指标只能来自 data/ 下的采集 JSONL 或本次会话的工具调用,无法引用的断言须标 confidence: low 并在正文说明不确定性;历史只追加,不编辑或删除已有 Timeline 条目或 LOG 行;重复观察到的证据不新建文件,而是在已有 signal 上递增 frequency、更新 updated 并追加一条带日期的 Timeline。Timeline 之前为当前事实可自由重写,Timeline 本身只追加、最新在底部。一次运行产生两个 Timeline 条目或两行 LOG、为已有证据新建 signal、无 data/serp/ 行却声称竞争对手排名、因数据有趣而做三个工作单元,都是常见错误。最终向用户用三行报告:工作单元、写入产物、结果(success/partial/failure/no-op)。