# Dependencies node_modules/ # Environment .env.local # OS files .DS_Store Thumbs.db # Logs *.log bot.log .logs/ .data/ # System agents runtime data (under system/) # 运行态**目录**的规则见文件末尾的白名单块(28 §5.5):深度 2 现在是任意公司 id, # 没法再像以前那样逐个枚举 conversations/ logs/ workspace/ … system/tasklog/ # 批 5 把派单存储统一进 tasks 表后,旧目录改名保留一版再清(27-P3C §十二.5) system/tasklog.bak-unify/ # ── Agent 自写的运行态文件(27-P3B W13 提出,28 批次 0 根治)───────────── # system agent 的 Claude CLI workDir **就是它自己的源码目录** system/agents//, # 所以它每跑一次就会重写自己的 todo.md / plan.md,Claude CLI 还会改 # .claude/scheduled_tasks.json。这些改动过去被整仓 git status 扫到, # 归属算到「当时正在跑的 work 节点」头上,让真正成功的节点被判越界 fail。 # 这些文件没有人工维护的内容(内容是任务流水日志,最大的 112KB), # 读侧一律走 agent-chat.js:loadFile()(try/catch → ''),缺失不崩; # 新 agent 的这两个文件由 AgentScaffold / company-service._copyTemplate # 从本体目录拷贝 —— **本体仍然被跟踪**,那才是源码。 # W13 当时只做到「守卫不冤枉节点」,注释里写的「根治要把运行态文件移出 git」 # 就是 28 批次 0 干的事:运行态整体下沉到 system/agents/{aid}/{cid}/{taskId}/, # 由文件末尾的白名单块一并 ignore(tasks/ 等枚举项从此被它覆盖,不再单列)。 # 留在这儿的只是本体**根上**的两个 agent 自写文件 —— 它们不在任何子目录里。 system/agents/*/todo.md system/agents/*/plan.md # .claude/scheduled_tasks.json 已被下方 `system/agents/*/.claude/*` 规则覆盖 # Company instance data (tenant-specific, under data/) data/companies/ data/agents/job-*/ # 迁移前的原目录快照(scripts/migrate-agent-registry.js,28 §七「回滚」): # 纯留档,不进版本库 —— 进了就会顶着 §5.5 那条「跑完真 agent 调用 git status 必须为空」的验收。 # 用通配而不是逐个列名:同一个脚本就写了两个备份根(BACKUP_ROOT = _migration-backup-agentdirs, # M2_BACKUP = _migration-backup-2026-08-17,178MB),只列前者时后者一直挂在 git status 里。 data/_migration-backup-*/ # 模板使用计数(27-P3B W13):每次 hire 都 +1 的纯运行态计数器, # 以前原地改写人工维护的 system/agents/_registry.json,于是任何一次真跑 # 都会在工作区留一条 diff。搬到这里,_registry.json 只留人工写的基线。 data/template-usage.json # API access logs (runtime generated by api-access-logger middleware) apiconversation/ # Legacy directories (removed from architecture) /conversations/ /skills/ # Build output dist/ web/dist/ # Temp files tmp/ *.tmp # IDE .idea/ .vscode/ *.swp *.swo # Lock files (keep package-lock, ignore pnpm if using npm) # pnpm-lock.yaml *.lock # === 运行时文件 (不提交) === .claude/ # ── system/agents 白名单(28 §5.5)─────────────────────────────────────── # 本体目录下,除 .claude 外的所有子目录都是运行态(公司态 {cid}/ + 任务态 {cid}/{taskId}/), # 深度 2 是任意公司 id,枚举法失效,所以反过来:先全排除,再把 .claude/skills 捞回来。 # 必须整块放在这里 —— 上方 `.claude/` 那条排除了任意 .claude 目录, # 而 gitignore 是「最后一条匹配的规则说了算」,负向规则只有排在它后面才生效; # 同理 `system/agents/*/*/` 也必须排在 `!system/agents/*/.claude/` **前面**, # 否则父目录 .claude 被重新排除,里面的 skills 就再也 ! 不回来了。 system/agents/*/*/ !system/agents/*/.claude/ system/agents/*/.claude/* !system/agents/*/.claude/skills/ !system/agents/*/.claude/skills/** # train/ 是唯一的第二个例外(原 system/templates/*/train/* 那组规则,28 批次 1 随目录一起搬过来): # hunt / digest / evolve 三个子目录装的是人工维护的训练基线(knowhow、benchmark、train/test 数据集), # 那是源码不是运行态;train/ 下的其余内容(评分中间件、迭代日志、FRAUDULENT_* 产物)照旧 ignore。 # 同样必须先 ! 回 train/ 本身,否则父目录被排除就再也捞不回子目录。 !system/agents/*/train/ system/agents/*/train/* !system/agents/*/train/hunt/ !system/agents/*/train/digest/ !system/agents/*/train/evolve/ .pylibs/ nohup.out data/agents/ data/workspace/ /workspace/ system/system/ system/workspace/ # Runtime memory/daily logs memory/ system/memory/ # SQLite databases (runtime data) *.sqlite *.sqlite-wal *.sqlite-shm # System company runtime data system/data/companies/ # Temp/backup files *.bak *.lock EOF PYEOF # Evolve engine intermediate artifacts (not final deliverables) *.FRAUDULENT_* *FRAUDULENT_* .batch_prompt*.txt .batch_score_prompt*.txt .sys_test.txt improved_test.jsonl iteration_*_scores_clean.json manual_optimizations_scores.json # Evolve iteration data (logs, generated, scores, runs) iteration_*_scores.json iteration_scores_*.json iteration_*_log.txt iteration_*_generated.json iteration_*_generated.jsonl iteration_*_run.json iteration_*_test.jsonl iteration_*_plain.jsonl # Evolve batch/eval/runner scripts & data batch_*.jsonl batch_*.json generated_test_*.json generated_test_*.jsonl eval_api.js eval_cli.js evolve.js generate_v3*.js batch_generate.js batch_score.js batch_scorer.js reliable_generate.js reliable_scorer.js run_eval*.js run_eval*.json runner.js runner_v*.js score_only.js # Evolve manual optimization & reference data manual_optimizations*.jsonl manual_optimized_*.json manual_scores.json perfect_scores.json perfect_test.jsonl reference_log.txt reference_scores.json train_sample.jsonl train_sample_scores.json test_scores.json # Evolve intermediate knowhow knowhow_v0.md # Evolve scorer intermediate versions (keep only final scorer.js) scorer_v*.js scorer_old.js scorer_batch.js scorer_fixed.js scorer_ai.js scorer_ai_fixed.js scorer_llm.js # Evolve SKILL intermediate versions (keep SKILL.md and SKILL_final.md) SKILL_v[0-9]*.md SKILL_v*_base.md SKILL_v*_premature.md SKILL_fake_*.md # Python cache __pycache__/ *.pyc # Environment (secrets) .env # ── 深度 >2 的「本体内容」例外(28 二轮修复,问题 1)─────────────────── # 上面 `system/agents/*/*/` 那条把本体目录下**所有**深度 2 子目录当运行态排除掉, # 前提是「深度 2 只可能是 companyId」。存量里有 5 处不成立:它们是 agent 的源码 / 知识, # 被历史目录结构挤到了深度 2 上。判据是「删掉它 agent 还认得自己吗」—— # 认不得的是本体(下面 !),认得的是它跑出来的产物(已 git rm --cached 退出跟踪)。 # 必须整块排在文件末尾:gitignore 最后一条匹配的规则说了算,而下面几条要覆盖的 # `system/agents/*/*/`、`evolve.js`、`scorer_v*.js`、`SKILL_v[0-9]*.md` 全在上面。 # # org-innovator/docs/ —— 它派发给下游的 SKILL 模板库(l1-*/l2-* 共 18 份 SKILL.md + # crawl_runner_template.py),没有这些它没东西可派 # org-innovator/agent_data/ —— story-architect 的 knowhow(剧本方法论),是知识不是流水 # lemonv_drama/docs/ —— create-drama 技能的实现(SKILL.md + 生图/入库脚本 + package.json) # youtube-crawler/code/ —— SKILL.md v2.0 描述的那份三级降级爬虫实现本身 !system/agents/org-innovator/docs/ !system/agents/org-innovator/docs/** !system/agents/org-innovator/agent_data/ !system/agents/org-innovator/agent_data/** !system/agents/lemonv_drama/docs/ !system/agents/lemonv_drama/docs/** !system/agents/youtube-crawler/code/ !system/agents/youtube-crawler/code/** # 注意这里**故意不**给 train/evolve/ 加通配负向规则。content-selector 的 # scorer_v1.js / scorer_v3.js / SKILL_v1_backup.md 曾被跟踪,但它们正是文件末尾 # 「Evolve scorer/SKILL intermediate versions」两条规则点名的迭代中间产物 —— # 那条策略是既有裁决,不是本次要推翻的。给整个 train/evolve/ 开 `**` 会连 # auto-publisher 的 SKILL_v1..v5、iteration_*_scores.json、.batch_prompt.txt 一起捞回来, # 用 300 条新噪声换 3 个文件,不划算。这 3 个改走 rm --cached。 # 顺序问题:`.claude/skills/**` 在上面被 ! 回来,末尾的 `evolve.js` 又把 # evolver-youtube-crawler/.claude/skills/evolving/evolve.js 排除了。skills/ 下的东西 # 是 Claude CLI 真的要加载的技能实现,不是 evolve 流水线的中间脚本。 !system/agents/*/.claude/skills/** # 上面的 `**` 负向规则会连密钥一起捞回来 —— lemonv_drama/docs/.env 里是真的生产库口令 # 和 OSS AK/SK,曾经被 git 跟踪(本次已 rm --cached)。这条必须是最后一条。 system/agents/**/.env # pnpm 依赖缓存(2026-08-28 补) .pnpm-store/ # .env 的手工备份(含密钥,永不入库) .env.bak* .env.*.bak # Hunt 阶段的网页原文缓存(sha256 母本在 sources_vN.json 里,原文只留磁盘、不入库; # digest 回查走本地文件路径,不依赖 git) system/agents/*/train/hunt/sources_raw/ # Evolve 迭代中间产物(与上方「evolve scorer/SKILL intermediate versions」既有裁决同口径: # scores/outputs/inputs 是轮次流水,不是源码) system/agents/*/train/evolve/_v*_artifacts/