[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M734Y0XAAEAWM3J2X7JFDZSM":3,"skill-same:01M734Y0XAAEAWM3J2X7JFDZSM":50},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":29,"commitSha":30,"skillDirectory":31,"forksCount":32,"repositoryHtmlUrl":33,"repositoryHomepageUrl":34,"ownerHtmlUrl":35,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":36,"install":37,"resources":49},"01M734Y0XAAEAWM3J2X7JFDZSM","advisor",null,"Read-only second opinion from a different model family.","Morrison-Lab\u002Fai-config","Morrison-Lab","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F104235520?v=4","01M734G0451S2G35MN4HFQK7XP","Morrison Lab","01M734G059BYFDFQA8YTPDGPMH",4,"MIT","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fadvisor\u002FSKILL.md",[],[],"2026-11-11 15:11:14",false,"---\nname: advisor\ndescription: \"Read-only second opinion from a different model family.\"\nuser-invocable: true\nallowed-tools:\n  - Bash\n  - Read\n  - Write\n---\n\n# advisor --- one bounded consult from an independent model\n\nAn advisor consult sends one decision point to a model from a different family and brings back an opinion.\nThe advisor reads and answers.\nIt does not edit files, implement, or take over the task.\nClaude stays the orchestrator and decides what to do with the answer.\n\nThe pattern comes from the `advisor` skill in `scdenney\u002Fopen-science-skills`.\nIt is CC BY-NC 4.0, so this skill takes the pattern only and copies nothing.\n\n## When this fires\n\n- \"advisor\", \"ask an advisor\", \"get a second opinion on this decision\".\n- Before an approach crystallizes, when a wrong choice would be costly to undo.\n- Before declaring done, when the claim being made is one you cannot check against a primary source.\n\nDo not use it for a diff review.\nUse [`adv`](..\u002Fadv\u002FSKILL.md) for that.\nDo not use it for fan-out reading or drafting.\nUse [`delegate-to-opencode`](..\u002Fdelegate-to-opencode\u002FSKILL.md) or [`delegate-to-agy`](..\u002Fdelegate-to-agy\u002FSKILL.md) for that.\n\n## Parameters\n\nEach value below is a parameter with today's default, so a caller can change it without editing this file\n([`configurable-parameters`](..\u002F..\u002Fshared\u002Fcoding\u002Fconfigurable-parameters.md)).\n\n| Parameter | Default | Meaning |\n|---|---|---|\n| `engine` | `opencode` | The CLI or endpoint that reaches the advisor. `agy` is the other seat. Codex is never a seat, because the lab allows it only in UCDH projects (`bcs`, `hac`) and this skill is for the rest. |\n| `model` | the strongest model `engine` offers outside the caller's family | Look it up at call time; do not hard-code a model name in a brief. |\n| `effort` | the highest the engine offers | Pinned, not inherited: a cheap consult on a hard question wastes the reason for asking. |\n| `briefing_path` | a file in the scratchpad directory | Where the briefing is written before the call. |\n\n## Procedure\n\n### 1. Make the deliverable durable first\n\nA consult takes real time, and a session can end during it.\nWrite down the work product (commit it, or save the draft) before the call, so the answer has something to attach to.\n\n### 2. Write a self-contained briefing\n\nNothing carries over from this session except the working directory.\nThe briefing file states:\n\n- the task and why it matters;\n- what has been done so far;\n- the current approach, or the exact claim to be checked;\n- the precise question, with file paths and line numbers.\n\n\"Does this look right?\" is not a question.\n\"Does `shared\u002Fworkflow\u002Fx.md` line 40 contradict the rule at line 12?\" is one.\nDo not send restricted data (FERPA records, PHI): the briefing leaves the machine.\n\n### 3. Call the advisor read-only\n\nRun the advisor in the engine's read-only or plan mode, with no session persistence where the engine supports it.\nPass `model` and `effort` explicitly.\n`scripts\u002Frun-advisor.py` makes the call and runs step 4's seat check before it, and after it where the engine names the model that answered:\n\n```bash\npython3 scripts\u002Frun-advisor.py --caller-model \u003Ccaller> --engine opencode --model \u003Cmodel> --effort \u003Ceffort> --briefing \u003Cbriefing_path>\n```\n\nFor `opencode`, it sends one streamed request with no tools to the OpenCode Go endpoint, so the advisor can only answer, and it checks the model the reply names.\nIt relies on the cloud proxy for the API key, and whether the endpoint honours its `reasoning_effort` field is unmeasured.\nFor `agy`, it runs `agy --mode plan --print=\u003Cbriefing>`, which names no model, so the wrapper labels that seat unverified.\nEngine invocation details are in the delegate skills' memories (`memories\u002Fdelegation.md`, `memories\u002Fantigravity.md`).\n\n### 4. Never fall back to the caller's family\n\nIf the chosen model is unavailable, report that and stop, or pick another engine outside the caller's family.\nA same-family substitute is not independent, so it defeats the point of asking.\nA different model in the caller's own family is a weaker and cheaper option: name it as weaker in the result, and do not call it equivalent.\n\n`scripts\u002Fcheck-advisor-seat.py` checks this rule and step 3's explicit `model` and `effort`.\n`run-advisor.py` runs it for you.\nFor a call the wrapper does not make, run it before the call, and again after with `--reported-model` set to the model the reply names:\n\n```bash\npython3 scripts\u002Fcheck-advisor-seat.py --caller-model \u003Ccaller> --engine \u003Cengine> --model \u003Cmodel> --effort \u003Ceffort>\n```\n\nIt exits 2 on a same-family seat, an engine whose name contains `codex`, an effort that names no level (blank, or a word such as `default` or `inherit`), a model name that is unknown or names two families, or a reply from a model other than the one requested or its dated snapshot.\n`--allow-same-family` accepts a same-family seat and prints it as weaker, and `--family PREFIX=FAMILY` classifies a model the built-in table does not know.\nThe `adversarial-reviewer` agent's \"Advisor consults from the caller's own family\" item is the reviewer's layer for this rule.\n\n- **Do:** run the script before and after the call, and stop on exit 2.\n- **Don't:** take an answer from whatever model the engine fell back to, since a substitute from your own family is not the independent read you asked for.\n\n### 5. Treat the answer as evidence\n\nThe advisor's answer is a lead, not a verdict.\nA primary source or an observed failure outranks it.\nCheck each claim against the file or command output before acting on it, and label anything unchecked as an unverified lead (see [`adv`](..\u002Fadv\u002FSKILL.md#verify-cross-model-findings-before-presenting-them)).\nWhen the advisor and the evidence conflict, state the conflict plainly in one more consult.\nDo not settle it by coin flip.\n\n## Not covered yet\n\n[ai-config#884](https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fissues\u002F884) tracks the last open question: whether `context: fork` can replace a separate process (it isolates conversation history but stays on an agent type in this session, so it is not a cross-family consult).\n","# advisor --- one bounded consult from an independent model\n\nAn advisor consult sends one decision point to a model from a different family and brings back an opinion.\nThe advisor reads and answers.\nIt does not edit files, implement, or take over the task.\nClaude stays the orchestrator and decides what to do with the answer.\n\nThe pattern comes from the `advisor` skill in `scdenney\u002Fopen-science-skills`.\nIt is CC BY-NC 4.0, so this skill takes the pattern only and copies nothing.\n\n## When this fires\n\n- \"advisor\", \"ask an advisor\", \"get a second opinion on this decision\".\n- Before an approach crystallizes, when a wrong choice would be costly to undo.\n- Before declaring done, when the claim being made is one you cannot check against a primary source.\n\nDo not use it for a diff review.\nUse [`adv`](..\u002Fadv\u002FSKILL.md) for that.\nDo not use it for fan-out reading or drafting.\nUse [`delegate-to-opencode`](..\u002Fdelegate-to-opencode\u002FSKILL.md) or [`delegate-to-agy`](..\u002Fdelegate-to-agy\u002FSKILL.md) for that.\n\n## Parameters\n\nEach value below is a parameter with today's default, so a caller can change it without editing this file\n([`configurable-parameters`](..\u002F..\u002Fshared\u002Fcoding\u002Fconfigurable-parameters.md)).\n\n| Parameter | Default | Meaning |\n|---|---|---|\n| `engine` | `opencode` | The CLI or endpoint that reaches the advisor. `agy` is the other seat. Codex is never a seat, because the lab allows it only in UCDH projects (`bcs`, `hac`) and this skill is for the rest. |\n| `model` | the strongest model `engine` offers outside the caller's family | Look it up at call time; do not hard-code a model name in a brief. |\n| `effort` | the highest the engine offers | Pinned, not inherited: a cheap consult on a hard question wastes the reason for asking. |\n| `briefing_path` | a file in the scratchpad directory | Where the briefing is written before the call. |\n\n## Procedure\n\n### 1. Make the deliverable durable first\n\nA consult takes real time, and a session can end during it.\nWrite down the work product (commit it, or save the draft) before the call, so the answer has something to attach to.\n\n### 2. Write a self-contained briefing\n\nNothing carries over from this session except the working directory.\nThe briefing file states:\n\n- the task and why it matters;\n- what has been done so far;\n- the current approach, or the exact claim to be checked;\n- the precise question, with file paths and line numbers.\n\n\"Does this look right?\" is not a question.\n\"Does `shared\u002Fworkflow\u002Fx.md` line 40 contradict the rule at line 12?\" is one.\nDo not send restricted data (FERPA records, PHI): the briefing leaves the machine.\n\n### 3. Call the advisor read-only\n\nRun the advisor in the engine's read-only or plan mode, with no session persistence where the engine supports it.\nPass `model` and `effort` explicitly.\n`scripts\u002Frun-advisor.py` makes the call and runs step 4's seat check before it, and after it where the engine names the model that answered:\n\n```bash\npython3 scripts\u002Frun-advisor.py --caller-model \u003Ccaller> --engine opencode --model \u003Cmodel> --effort \u003Ceffort> --briefing \u003Cbriefing_path>\n```\n\nFor `opencode`, it sends one streamed request with no tools to the OpenCode Go endpoint, so the advisor can only answer, and it checks the model the reply names.\nIt relies on the cloud proxy for the API key, and whether the endpoint honours its `reasoning_effort` field is unmeasured.\nFor `agy`, it runs `agy --mode plan --print=\u003Cbriefing>`, which names no model, so the wrapper labels that seat unverified.\nEngine invocation details are in the delegate skills' memories (`memories\u002Fdelegation.md`, `memories\u002Fantigravity.md`).\n\n### 4. Never fall back to the caller's family\n\nIf the chosen model is unavailable, report that and stop, or pick another engine outside the caller's family.\nA same-family substitute is not independent, so it defeats the point of asking.\nA different model in the caller's own family is a weaker and cheaper option: name it as weaker in the result, and do not call it equivalent.\n\n`scripts\u002Fcheck-advisor-seat.py` checks this rule and step 3's explicit `model` and `effort`.\n`run-advisor.py` runs it for you.\nFor a call the wrapper does not make, run it before the call, and again after with `--reported-model` set to the model the reply names:\n\n```bash\npython3 scripts\u002Fcheck-advisor-seat.py --caller-model \u003Ccaller> --engine \u003Cengine> --model \u003Cmodel> --effort \u003Ceffort>\n```\n\nIt exits 2 on a same-family seat, an engine whose name contains `codex`, an effort that names no level (blank, or a word such as `default` or `inherit`), a model name that is unknown or names two families, or a reply from a model other than the one requested or its dated snapshot.\n`--allow-same-family` accepts a same-family seat and prints it as weaker, and `--family PREFIX=FAMILY` classifies a model the built-in table does not know.\nThe `adversarial-reviewer` agent's \"Advisor consults from the caller's own family\" item is the reviewer's layer for this rule.\n\n- **Do:** run the script before and after the call, and stop on exit 2.\n- **Don't:** take an answer from whatever model the engine fell back to, since a substitute from your own family is not the independent read you asked for.\n\n### 5. Treat the answer as evidence\n\nThe advisor's answer is a lead, not a verdict.\nA primary source or an observed failure outranks it.\nCheck each claim against the file or command output before acting on it, and label anything unchecked as an unverified lead (see [`adv`](..\u002Fadv\u002FSKILL.md#verify-cross-model-findings-before-presenting-them)).\nWhen the advisor and the evidence conflict, state the conflict plainly in one more consult.\nDo not settle it by coin flip.\n\n## Not covered yet\n\n[ai-config#884](https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fissues\u002F884) tracks the last open question: whether `context: fork` can replace a separate process (it isolates conversation history but stays on an agent type in this session, so it is not a cross-family consult).\n",{"name":5,"description":7,"allowed-tools":24,"user-invocable":28},[25,26,27],"Bash","Read","Write",true,"main","318afa4c9cc956b6eaffd2801469c4108a9bd6db","skills\u002Fadvisor",1,"https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config","https:\u002F\u002Fmorrison-lab.github.io\u002Fai-config\u002F","https:\u002F\u002Fgithub.com\u002FMorrison-Lab","2026-11-14 04:56:47",{"source":8,"skillName":5,"commands":38,"prompt":48,"zipAvailable":28},[39,42,45],{"tool":40,"command":41},"npx","npx skills add Morrison-Lab\u002Fai-config --skill advisor",{"tool":43,"command":44},"bunx","bunx skills add Morrison-Lab\u002Fai-config --skill advisor",{"tool":46,"command":47},"pnpm","pnpm dlx skills add Morrison-Lab\u002Fai-config --skill advisor","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fadvisor\u002FSKILL.md",[],[51,58,65,72,79,86],{"skillNo":52,"name":53,"nameZh":6,"description":54,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":55,"categories":56,"keywords":57,"publishedAt":19},"01M735ADD75T5N3CYSMV3PKZN7","stack-prs","Stack dependent PR on another.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fstack-prs\u002FSKILL.md",[],[],{"skillNo":59,"name":60,"nameZh":6,"description":61,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":62,"categories":63,"keywords":64,"publishedAt":19},"01M7353JY4NDFPQEMYDBJSTYGC","finish-wave","Finish the current wave; start no new one.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Ffinish-wave\u002FSKILL.md",[],[],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":19},"01M73593BZ33TKTNBDX8JNKYN8","resolve-conflicts","Resolve merge conflicts.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fresolve-conflicts\u002FSKILL.md",[],[],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":19},"01M73584TVDWNA1HMAQ8XXGSZV","rec","Provide recommendations for choices.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Frec\u002FSKILL.md",[],[],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":19},"01M7357KC2MZNHTDDSY4DT9CGJ","push","Pre-push check for active sessions.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fpush\u002FSKILL.md",[],[],{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":19},"01M7354D93G0P37BRHR2T3HD82","handoff","Snapshot state to forge\u002Fmemory.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fhandoff\u002FSKILL.md",[],[]]