[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DSY07VNAJRD0M7KXGCNG7C":3,"skill-same:01M6DSY07VNAJRD0M7KXGCNG7C":91},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":40,"linkOnly":41,"markdownContent":42,"markdownBody":43,"frontMatter":44,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":50,"ownerHtmlUrl":51,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":52,"install":53,"resources":66},"01M6DSY07VNAJRD0M7KXGCNG7C","mc-position-review",null,"Walk this project's standing positions and test whether any of their reasons have expired, then report to the human. TRIGGER when the task begins with a \"[Position review]\" marker, when a scheduled run asks you to review standing positions or check what has changed in the field, or when the user asks \"are any of our decisions stale?\" \u002F \"review our positions\" \u002F \"what's changed that we should reconsider?\". Do NOT trigger in ordinary sessions.","clayrune-io\u002Fclayrune","clayrune-io","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F324312123?v=4","01M6DSX1QQQMJ0FPCSHSX95Q9G","01M6DSX1ZXTZQSGRA5ZXH1ZZWM",17,"MIT","https:\u002F\u002Fgithub.com\u002Fclayrune-io\u002Fclayrune\u002Fblob\u002Fmaster\u002Fdata\u002Fskills\u002Fbuiltin\u002Fmc-position-review\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],"mc","position","mc position review","review","human","when","scheduled","you","with","trigger","project","positions","task","do","stale","user","decisions","check","report","run","sessions","test","2026-11-10 10:12:30",false,"---\nname: mc-position-review\ndescription: Walk this project's standing positions and test whether any of their reasons have expired, then report to the human. TRIGGER when the task begins with a \"[Position review]\" marker, when a scheduled run asks you to review standing positions or check what has changed in the field, or when the user asks \"are any of our decisions stale?\" \u002F \"review our positions\" \u002F \"what's changed that we should reconsider?\". Do NOT trigger in ordinary sessions.\n---\n\n# Reviewing standing positions — what would change our mind, and has it\n\nA **position** is a settled question: a subject, a verdict, a *reason*, and\n**`expires_when`** — the condition that would re-open it. That last field is why\nthis job is tractable. You are not re-reading an archive hoping to notice\nsomething stale; you are testing a short list of named conditions.\n\nThis also **is** the daily field-research job (MC-898). An open-ended sweep of\n\"what's new in agentic mission control\" has no stopping condition and no way to\ntell an interesting finding from a relevant one. The standing positions supply\nthe query set: *has anything changed that trips one of our own rulings?*\n\n## The one hard rule\n\n**You report. You never edit a position.** Changing a ruling that steers every\nother agent on this project is a human's call — the same reason the learning\nsystem's authority guard refuses artifacts that expand an agent's own\npermissions. Your writes go to the review sidecar and nowhere else.\n\nConcretely: never `POST …\u002Fmemory\u002Fpositions`, never `DELETE` one, never hand-edit\na `position_*.md`. If a position should change, say so and let Ron do it.\n\n## The cycle\n\n### 1. Get the worksheet\n\n```bash\npython tools\u002Fposition-review.py brief --project \u003Cproject_id>\n```\n\nDeterministic — it decides *which* positions are due (default: every 7 days, or\nimmediately if a human edited one since its last review). Judging whether a\ncondition has come true is your job; picking the set is not, because a model\npicking it would quietly review something different every night.\n\n### 2. Test each one, on its own terms\n\nRead the `what would change our mind` line and go check **that**, specifically.\nThe trigger tells you which tool to reach for:\n\n- **An internal claim** (\"our own graph machinery stops resolving links\") — run\n  it. `tools\u002Fmemory-link-check.py`, a test, a grep. Cheap and conclusive.\n- **An external claim** (\"X ships a feature that replaces Y\") — WebSearch, and\n  read the primary source, not a summary of it. A blog post *about* a release is\n  not the release.\n- **A usage claim** (\"its output starts feeding other agents\") — check the code\n  and the config, not your memory of them.\n\nTwo failure modes to refuse:\n\n- **Do not trip a position on vibes.** \"Obsidian is popular again\" is not the\n  recorded condition. Only the named condition counts. If you think the *wrong\n  condition* was recorded, that is a finding to report — not licence to\n  substitute your own.\n- **Do not confirm a position either.** You are testing for expiry, not\n  re-litigating the verdict. \"Still correct\" is a fine and common outcome.\n\n**A position with no `expires_when`** is flagged in the brief as\n`NOTHING RECORDED`. Do not test it — *propose a trigger for it*. A ruling nobody\nwrote a trigger for is one nobody has revisited since the day it was made, and\nthat is the most useful thing you can say about it.\n\n### 3. Log the outcome — always, for every position you checked\n\n```bash\npython tools\u002Fposition-review.py record --project \u003Cpid> \\\n    --file position_\u003Cslug>.md \\\n    --finding \"what you checked, and what you saw\" \\\n    [--tripped]\n```\n\n`--finding` is the point of the record: next review starts from what you already\nestablished rather than re-deriving it. Write what you *checked*, not what you\nconcluded — \"ran memory-link-check.py, 0 unresolved links across 412 notes\"\nbeats \"still fine\".\n\n`record` prints `newly_flagged`. **True exactly once per trip** — that is your\ncue to interrupt a human.\n\n### 4. Report\n\n**Always** append to the journal — `docs\u002F_journal\u002F\u003Citem-id>-\u003Cslug>.md`, newest\nat the bottom, dated. Every position you checked, what you checked it with, and\nthe outcome. This is the durable log. Unattended cycles never write backlog\nnotes (`CLAUDE.md`).\n\n**Email only when `newly_flagged` came back true**, or when you have a proposed\ntrigger for an untriggered position worth a decision. Reuse the mailer, do not\nbuild one:\n\n```bash\npython tools\u002Fnight-review\u002Fsend_mail.py \\\n  --subject \"[Clayrune positions] DECISION NEEDED: \u003Csubject> may have expired\" \\\n  --body-file \u002Ftmp\u002Fmail_body.txt\n```\n\nThe body must stand on its own — Ron may read it days later on a phone with no\nsession context. Include: the position as it stands (verdict + reason), the\nrecorded trigger, **what you found and where** (link the primary source), and\nthe three options with your recommendation:\n\n- **Keep** — the trigger did not really fire.\n- **Re-open with a new reason** — the verdict may still hold but the reasoning\n  moved. Ron edits the reason in the Memory modal; that supersedes in place and\n  keeps the old text under `## Previously`.\n- **Forget** — the ruling was wrong. Ron uses Forget in the Memory modal.\n\nThen **stop**. An emailed ask is not approval. The next cycle reads his reply\nvia the `mail` MCP server (`search_email(\"[Clayrune positions]\")`) before\nre-raising anything.\n\n**A quiet night gets no email.** Nothing expired is the expected result and the\njournal already records it. Mailing a nightly \"all clear\" is precisely how this\nchannel stops being read, and then you lose the one night it mattered.\n\n## Where things live\n\n| | |\n|---|---|\n| the positions | `\u003Cproject memory dir>\u002Fposition_*.md` |\n| review sidecar | `\u003Csame dir>\u002Fposition_review.json` — yours to write |\n| open flags | `python tools\u002Fposition-review.py flags [--json]` |\n| the design | `docs\u002FDAVE_DESIGN.md` §4 (positions), §9 (phase 3) |\n| the human's view | project menu → Memory → **Standing positions** |\n","# Reviewing standing positions — what would change our mind, and has it\n\nA **position** is a settled question: a subject, a verdict, a *reason*, and\n**`expires_when`** — the condition that would re-open it. That last field is why\nthis job is tractable. You are not re-reading an archive hoping to notice\nsomething stale; you are testing a short list of named conditions.\n\nThis also **is** the daily field-research job (MC-898). An open-ended sweep of\n\"what's new in agentic mission control\" has no stopping condition and no way to\ntell an interesting finding from a relevant one. The standing positions supply\nthe query set: *has anything changed that trips one of our own rulings?*\n\n## The one hard rule\n\n**You report. You never edit a position.** Changing a ruling that steers every\nother agent on this project is a human's call — the same reason the learning\nsystem's authority guard refuses artifacts that expand an agent's own\npermissions. Your writes go to the review sidecar and nowhere else.\n\nConcretely: never `POST …\u002Fmemory\u002Fpositions`, never `DELETE` one, never hand-edit\na `position_*.md`. If a position should change, say so and let Ron do it.\n\n## The cycle\n\n### 1. Get the worksheet\n\n```bash\npython tools\u002Fposition-review.py brief --project \u003Cproject_id>\n```\n\nDeterministic — it decides *which* positions are due (default: every 7 days, or\nimmediately if a human edited one since its last review). Judging whether a\ncondition has come true is your job; picking the set is not, because a model\npicking it would quietly review something different every night.\n\n### 2. Test each one, on its own terms\n\nRead the `what would change our mind` line and go check **that**, specifically.\nThe trigger tells you which tool to reach for:\n\n- **An internal claim** (\"our own graph machinery stops resolving links\") — run\n  it. `tools\u002Fmemory-link-check.py`, a test, a grep. Cheap and conclusive.\n- **An external claim** (\"X ships a feature that replaces Y\") — WebSearch, and\n  read the primary source, not a summary of it. A blog post *about* a release is\n  not the release.\n- **A usage claim** (\"its output starts feeding other agents\") — check the code\n  and the config, not your memory of them.\n\nTwo failure modes to refuse:\n\n- **Do not trip a position on vibes.** \"Obsidian is popular again\" is not the\n  recorded condition. Only the named condition counts. If you think the *wrong\n  condition* was recorded, that is a finding to report — not licence to\n  substitute your own.\n- **Do not confirm a position either.** You are testing for expiry, not\n  re-litigating the verdict. \"Still correct\" is a fine and common outcome.\n\n**A position with no `expires_when`** is flagged in the brief as\n`NOTHING RECORDED`. Do not test it — *propose a trigger for it*. A ruling nobody\nwrote a trigger for is one nobody has revisited since the day it was made, and\nthat is the most useful thing you can say about it.\n\n### 3. Log the outcome — always, for every position you checked\n\n```bash\npython tools\u002Fposition-review.py record --project \u003Cpid> \\\n    --file position_\u003Cslug>.md \\\n    --finding \"what you checked, and what you saw\" \\\n    [--tripped]\n```\n\n`--finding` is the point of the record: next review starts from what you already\nestablished rather than re-deriving it. Write what you *checked*, not what you\nconcluded — \"ran memory-link-check.py, 0 unresolved links across 412 notes\"\nbeats \"still fine\".\n\n`record` prints `newly_flagged`. **True exactly once per trip** — that is your\ncue to interrupt a human.\n\n### 4. Report\n\n**Always** append to the journal — `docs\u002F_journal\u002F\u003Citem-id>-\u003Cslug>.md`, newest\nat the bottom, dated. Every position you checked, what you checked it with, and\nthe outcome. This is the durable log. Unattended cycles never write backlog\nnotes (`CLAUDE.md`).\n\n**Email only when `newly_flagged` came back true**, or when you have a proposed\ntrigger for an untriggered position worth a decision. Reuse the mailer, do not\nbuild one:\n\n```bash\npython tools\u002Fnight-review\u002Fsend_mail.py \\\n  --subject \"[Clayrune positions] DECISION NEEDED: \u003Csubject> may have expired\" \\\n  --body-file \u002Ftmp\u002Fmail_body.txt\n```\n\nThe body must stand on its own — Ron may read it days later on a phone with no\nsession context. Include: the position as it stands (verdict + reason), the\nrecorded trigger, **what you found and where** (link the primary source), and\nthe three options with your recommendation:\n\n- **Keep** — the trigger did not really fire.\n- **Re-open with a new reason** — the verdict may still hold but the reasoning\n  moved. Ron edits the reason in the Memory modal; that supersedes in place and\n  keeps the old text under `## Previously`.\n- **Forget** — the ruling was wrong. Ron uses Forget in the Memory modal.\n\nThen **stop**. An emailed ask is not approval. The next cycle reads his reply\nvia the `mail` MCP server (`search_email(\"[Clayrune positions]\")`) before\nre-raising anything.\n\n**A quiet night gets no email.** Nothing expired is the expected result and the\njournal already records it. Mailing a nightly \"all clear\" is precisely how this\nchannel stops being read, and then you lose the one night it mattered.\n\n## Where things live\n\n| | |\n|---|---|\n| the positions | `\u003Cproject memory dir>\u002Fposition_*.md` |\n| review sidecar | `\u003Csame dir>\u002Fposition_review.json` — yours to write |\n| open flags | `python tools\u002Fposition-review.py flags [--json]` |\n| the design | `docs\u002FDAVE_DESIGN.md` §4 (positions), §9 (phase 3) |\n| the human's view | project menu → Memory → **Standing positions** |\n",{"name":5,"description":7},"master","ef008ef5ed969452bf69f2e0baeb9c441f3ac83d","data\u002Fskills\u002Fbuiltin\u002Fmc-position-review",2,"https:\u002F\u002Fgithub.com\u002Fclayrune-io\u002Fclayrune","https:\u002F\u002Fclayrune.io","https:\u002F\u002Fgithub.com\u002Fclayrune-io","2026-11-14 02:51:11",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add clayrune-io\u002Fclayrune --skill mc-position-review",{"tool":59,"command":60},"bunx","bunx skills add clayrune-io\u002Fclayrune --skill mc-position-review",{"tool":62,"command":63},"pnpm","pnpm dlx skills add clayrune-io\u002Fclayrune --skill mc-position-review","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fclayrune-io\u002Fclayrune\u002Fblob\u002Fmaster\u002Fdata\u002Fskills\u002Fbuiltin\u002Fmc-position-review\u002FSKILL.md",true,[67,73,79,83,87],{"path":68,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":72},"scripts\u002F.gitkeep","SCRIPT","脚本",0,"https:\u002F\u002Fgithub.com\u002Fjuanmvonvogler\u002FAI-tools\u002Fblob\u002Fmain\u002Fagents\u002Forchestrator\u002Fscripts\u002F.gitkeep",{"path":74,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":77,"sourceHtmlUrl":78},"soul\u002Fcommunication-style.md","REFERENCE","参考文档",118,"https:\u002F\u002Fgithub.com\u002Fjuanmvonvogler\u002FAI-tools\u002Fblob\u002Fmain\u002Fagents\u002Forchestrator\u002Fsoul\u002Fcommunication-style.md",{"path":80,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":81,"sourceHtmlUrl":82},"soul\u002Fdecision-framework.md",157,"https:\u002F\u002Fgithub.com\u002Fjuanmvonvogler\u002FAI-tools\u002Fblob\u002Fmain\u002Fagents\u002Forchestrator\u002Fsoul\u002Fdecision-framework.md",{"path":84,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":85,"sourceHtmlUrl":86},"soul\u002Fprinciples.md",153,"https:\u002F\u002Fgithub.com\u002Fjuanmvonvogler\u002FAI-tools\u002Fblob\u002Fmain\u002Fagents\u002Forchestrator\u002Fsoul\u002Fprinciples.md",{"path":88,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":89,"sourceHtmlUrl":90},"soul\u002FREADME.md",461,"https:\u002F\u002Fgithub.com\u002Fjuanmvonvogler\u002FAI-tools\u002Fblob\u002Fmain\u002Fagents\u002Forchestrator\u002Fsoul\u002FREADME.md",[92,112,122,132,142,165],{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":103,"publishedAt":40},"01M6DSYZRPBR2KVMJ9F05W02WR","prompt-injection-skill","TEST FIXTURE (MC-912) — do not install. Exercises the prompt-injection detector.","https:\u002F\u002Fgithub.com\u002Fclayrune-io\u002Fclayrune\u002Fblob\u002Fmaster\u002Ftests\u002Ffixtures\u002Fmalicious_skills\u002Fprompt-injection-skill\u002FSKILL.md",[98],{"categoryNo":99,"categoryName":100,"taxonomyType":101,"taxonomyTypeDesc":102},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[104,105,106,107,108,18,109,31,110,39,111],"prompt injection","prompt","injection","prompt injection skill","detector","fixture","install","prompt-injection",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":119,"publishedAt":40},"01M6DSYWKY8FQKJ2202HZTRZXN","persistence-skill","TEST FIXTURE (MC-912) — do not install. Exercises the persistence detector.","https:\u002F\u002Fgithub.com\u002Fclayrune-io\u002Fclayrune\u002Fblob\u002Fmaster\u002Ftests\u002Ffixtures\u002Fmalicious_skills\u002Fpersistence-skill\u002FSKILL.md",[118],{"categoryNo":99,"categoryName":100,"taxonomyType":101,"taxonomyTypeDesc":102},[120,121,39,110,31,109,18,108],"persistence","persistence skill",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":129,"publishedAt":40},"01M6DSYSTMXZJXN4VH879PSH06","exfiltration-skill","TEST FIXTURE (MC-912) — do not install. Exercises the exfiltration detector.","https:\u002F\u002Fgithub.com\u002Fclayrune-io\u002Fclayrune\u002Fblob\u002Fmaster\u002Ftests\u002Ffixtures\u002Fmalicious_skills\u002Fexfiltration-skill\u002FSKILL.md",[128],{"categoryNo":99,"categoryName":100,"taxonomyType":101,"taxonomyTypeDesc":102},[130,131,39,110,31,109,18,108],"exfiltration","exfiltration skill",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":139,"publishedAt":40},"01M6DSYP2HPFZS2D71SQTAK9WC","destructive-skill","TEST FIXTURE (MC-912) — do not install. Exercises the destructive-command detector.","https:\u002F\u002Fgithub.com\u002Fclayrune-io\u002Fclayrune\u002Fblob\u002Fmaster\u002Ftests\u002Ffixtures\u002Fmalicious_skills\u002Fdestructive-skill\u002FSKILL.md",[138],{"categoryNo":99,"categoryName":100,"taxonomyType":101,"taxonomyTypeDesc":102},[140,108,39,141,110,31,109,18],"destructive skill","command",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":154,"publishedAt":40},"01M6DSYK30Q44MPGK6QW8T6TSM","config-mod-skill","TEST FIXTURE (MC-912) — do not install. Exercises the agent-config-mod detector's write-API coverage (the gap Hermes's own scanner documents missing).","https:\u002F\u002Fgithub.com\u002Fclayrune-io\u002Fclayrune\u002Fblob\u002Fmaster\u002Ftests\u002Ffixtures\u002Fmalicious_skills\u002Fconfig-mod-skill\u002FSKILL.md",[148,149],{"categoryNo":99,"categoryName":100,"taxonomyType":101,"taxonomyTypeDesc":102},{"categoryNo":150,"categoryName":151,"taxonomyType":152,"taxonomyTypeDesc":153},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[155,156,110,39,157,158,159,160,161,162,31,109,163,164,18,108],"config mod skill","config","documents","api","hermes","write","coverage","scanner","gap","missing",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":172,"publishedAt":40},"01M6DSYFMVW71SEMTN11XFQMAG","benign-skill","TEST FIXTURE (MC-912) — negative control. Should produce zero scanner findings.","https:\u002F\u002Fgithub.com\u002Fclayrune-io\u002Fclayrune\u002Fblob\u002Fmaster\u002Ftests\u002Ffixtures\u002Fmalicious_skills\u002Fbenign-skill\u002FSKILL.md",[171],{"categoryNo":99,"categoryName":100,"taxonomyType":101,"taxonomyTypeDesc":102},[173,174,39,175,176,162,109,177,18],"benign","benign skill","produce","ZeRO","control"]