Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Quantitative meta-analysis: effect-size extraction, FE/RE pooling, I²/τ²/95% PI, subgroup, meta-regression, publication bias (funnel/Egger/PET-PEESE/p-curve/RoBMA), psychology methods (RVE, three-level, MASEM, Hunter-Schmidt, reliability generalization). Generates R code (metafor, robumeta, clubSandwich, metaSEM, psychmeta, puniform, RoBMA); pairs ssci-plots. APA MARS/PRISMA-2020.
SkillScore68/100
Test results 68
3/3 safety checks passed
45%68%of test cases passed +23 pts
Passed 15 of 22 test cases with the skill, and 10 of 22 without it.
6 fixed9 passed either way6 still failing1 broke
One test taskWe are preparing a final meta-analysis manuscript on cognitive behavioral therapy for anxiety to submit to an APA journal. What specific reporting items must be included beyond standard PRISMA 2020 guidelines?
Adds every file the skill has, pinned so you can update it. No account needed.
pip install "decimalai>=0.15"
decimalai skills add o0000-code-meta-analysis
claude --plugin-dir "$(git rev-parse --show-toplevel 2>/dev/null || pwd)/.agents"The same install from Python, for a notebook or a setup script.
pip install "decimalai>=0.15"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("o0000-code-meta-analysis")
if result.exit_code:
raise SystemExit(result.problems)
print("Added. Start Claude Code with the command below.")claude --plugin-dir "$(git rev-parse --show-toplevel 2>/dev/null || pwd)/.agents"Type these in a Claude Code session. No account or API key. It writes the skill and any files it bundles, and asks first when its safety rating isn't Passed.
/plugin marketplace add decimal-labs/decimalai-claude-plugins
/plugin install decimalai@decimalai/decimalai:install o0000-code-meta-analysisThe plugin needs python3 and curl on your machine.
No Python or account. Claude Code picks it up in its next session.
curl -fsSL --create-dirs -o .claude/skills/o0000-code-meta-analysis/SKILL.md https://app.decimal.ai/s/o0000-code-meta-analysis/SKILL.md.claude/skills/o0000-code-meta-analysis/SKILL.mdThis gets SKILL.md only. The skill's 37 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[claude-agent-sdk]"
decimalai skills add o0000-code-meta-analysisimport asyncio
from claude_agent_sdk import ClaudeAgentOptions
from decimalai.claude_agent_sdk import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
async def main():
question = "Hello!"
async with support.run(question) as run: # one user message, one run
async for message in run.query(options=ClaudeAgentOptions(max_turns=6)):
print(message)
# In a notebook or async code: await main()
asyncio.run(main())Prefer its own loader? ClaudeAgentOptions(plugins=[skills_plugin()], skills="all") reads the same folder. Use one or the other: a skill delivered both ways reaches the prompt twice.
The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[claude-agent-sdk]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("o0000-code-meta-analysis")
if result.exit_code:
raise SystemExit(result.problems)
import asyncio
from claude_agent_sdk import ClaudeAgentOptions
from decimalai.claude_agent_sdk import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
async def main():
question = "Hello!"
async with support.run(question) as run: # one user message, one run
async for message in run.query(options=ClaudeAgentOptions(max_turns=6)):
print(message)
# In a notebook or async code: await main()
asyncio.run(main())Prefer its own loader? ClaudeAgentOptions(plugins=[skills_plugin()], skills="all") reads the same folder. Use one or the other: a skill delivered both ways reaches the prompt twice.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/o0000-code-meta-analysis/SKILL.mdimport asyncio
from pathlib import Path
from claude_agent_sdk import ClaudeAgentOptions, query
skill = Path(".agents/skills/o0000-code-meta-analysis/SKILL.md").read_text()
options = ClaudeAgentOptions(system_prompt=f"You are a helpful agent.\n\n{skill}", max_turns=6)
async def main():
async for message in query(prompt="Hello!", options=options):
print(message)
# In a notebook or async code: await main()
asyncio.run(main())This gets SKILL.md only. The skill's 37 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[openai-agents]"
decimalai skills add o0000-code-meta-analysisfrom agents import Agent, Runner
from decimalai.openai_agents import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = Agent(
name=support.name,
instructions=support.instructions, # your prompt, then the skill list
tools=[*support.tools], # your tools, then load_skill
)
# In a notebook or async code: result = await Runner.run(agent, "Hello!")
result = Runner.run_sync(agent, "Hello!")Using SandboxAgent? capabilities=[Shell(), decimalai.openai_agents.sandbox_skills()] points its own loader at the same folder.
The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[openai-agents]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("o0000-code-meta-analysis")
if result.exit_code:
raise SystemExit(result.problems)
from agents import Agent, Runner
from decimalai.openai_agents import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = Agent(
name=support.name,
instructions=support.instructions, # your prompt, then the skill list
tools=[*support.tools], # your tools, then load_skill
)
# In a notebook or async code: result = await Runner.run(agent, "Hello!")
result = Runner.run_sync(agent, "Hello!")Using SandboxAgent? capabilities=[Shell(), decimalai.openai_agents.sandbox_skills()] points its own loader at the same folder.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/o0000-code-meta-analysis/SKILL.mdfrom pathlib import Path
from agents import Agent, Runner
skill = Path(".agents/skills/o0000-code-meta-analysis/SKILL.md").read_text()
agent = Agent(name="support", instructions=f"You are a helpful agent.\n\n{skill}")
# In a notebook or async code: result = await Runner.run(agent, "Hello!")
result = Runner.run_sync(agent, "Hello!")This gets SKILL.md only. The skill's 37 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[openai]"
decimalai skills add o0000-code-meta-analysisimport json
from openai import OpenAI
from decimalai.openai import agent_config
client = OpenAI()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
def lookup_order(order_id: str) -> str:
return f"Order {order_id} shipped yesterday."
# Your tools, as Chat Completions takes them, and what answers each.
TOOLS = [{"type": "function", "function": {
"name": "lookup_order",
"description": "Look up the status of an order.",
"parameters": {"type": "object", "properties": {"order_id": {"type": "string"}},
"required": ["order_id"]},
}}]
FUNCTIONS = {"lookup_order": lookup_order}
question = "Where is order A1001?"
with support.run(question) as run: # one user message, one run
# run.system is your prompt, then the skill list.
messages = [{"role": "system", "content": run.system}, run.message]
while True:
reply = client.chat.completions.create(
model="gpt-5.4-mini",
messages=messages,
tools=[*TOOLS, *run.tools], # your tools, then load_skill
).choices[0].message
messages.append(reply)
if not reply.tool_calls:
break
for call in reply.tool_calls:
# load_skill is answered by the run; your own tools by FUNCTIONS.
function = FUNCTIONS.get(call.function.name)
messages.append(run.tool_result(call) or {
"role": "tool", "tool_call_id": call.id,
"content": function(**json.loads(call.function.arguments)) if function
else f"There is no tool named {call.function.name!r}.",
})
print(reply.content)
# The Responses API takes run.response_tools instead of run.tools.The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[openai]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("o0000-code-meta-analysis")
if result.exit_code:
raise SystemExit(result.problems)
import json
from openai import OpenAI
from decimalai.openai import agent_config
client = OpenAI()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
def lookup_order(order_id: str) -> str:
return f"Order {order_id} shipped yesterday."
# Your tools, as Chat Completions takes them, and what answers each.
TOOLS = [{"type": "function", "function": {
"name": "lookup_order",
"description": "Look up the status of an order.",
"parameters": {"type": "object", "properties": {"order_id": {"type": "string"}},
"required": ["order_id"]},
}}]
FUNCTIONS = {"lookup_order": lookup_order}
question = "Where is order A1001?"
with support.run(question) as run: # one user message, one run
# run.system is your prompt, then the skill list.
messages = [{"role": "system", "content": run.system}, run.message]
while True:
reply = client.chat.completions.create(
model="gpt-5.4-mini",
messages=messages,
tools=[*TOOLS, *run.tools], # your tools, then load_skill
).choices[0].message
messages.append(reply)
if not reply.tool_calls:
break
for call in reply.tool_calls:
# load_skill is answered by the run; your own tools by FUNCTIONS.
function = FUNCTIONS.get(call.function.name)
messages.append(run.tool_result(call) or {
"role": "tool", "tool_call_id": call.id,
"content": function(**json.loads(call.function.arguments)) if function
else f"There is no tool named {call.function.name!r}.",
})
print(reply.content)
# The Responses API takes run.response_tools instead of run.tools.No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/o0000-code-meta-analysis/SKILL.mdfrom pathlib import Path
from openai import OpenAI
client = OpenAI()
skill = Path(".agents/skills/o0000-code-meta-analysis/SKILL.md").read_text()
reply = client.chat.completions.create(
model="gpt-5.4-mini",
messages=[
{"role": "system", "content": f"You are a helpful agent.\n\n{skill}"},
{"role": "user", "content": "Hello!"},
],
).choices[0].messageThis gets SKILL.md only. The skill's 37 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[anthropic]"
decimalai skills add o0000-code-meta-analysisimport anthropic
from decimalai.anthropic import agent_config
client = anthropic.Anthropic()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
question = "Hello!"
with support.run(question) as run: # one user message, one run
answer = client.beta.messages.tool_runner(
model="claude-haiku-5-5",
max_tokens=4096,
system=run.system, # your prompt, then the skill list
tools=[*run.tools], # your tools, then load_skill
messages=[{"role": "user", "content": question}],
).until_done()The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[anthropic]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("o0000-code-meta-analysis")
if result.exit_code:
raise SystemExit(result.problems)
import anthropic
from decimalai.anthropic import agent_config
client = anthropic.Anthropic()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
question = "Hello!"
with support.run(question) as run: # one user message, one run
answer = client.beta.messages.tool_runner(
model="claude-haiku-5-5",
max_tokens=4096,
system=run.system, # your prompt, then the skill list
tools=[*run.tools], # your tools, then load_skill
messages=[{"role": "user", "content": question}],
).until_done()No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/o0000-code-meta-analysis/SKILL.mdfrom pathlib import Path
import anthropic
client = anthropic.Anthropic()
skill = Path(".agents/skills/o0000-code-meta-analysis/SKILL.md").read_text()
reply = client.messages.create(
model="claude-haiku-5-5",
max_tokens=4096,
system=f"You are a helpful agent.\n\n{skill}",
messages=[{"role": "user", "content": "Hello!"}],
)This gets SKILL.md only. The skill's 37 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[google-genai]"
decimalai skills add o0000-code-meta-analysisfrom google import genai
from google.genai import types
from decimalai.google_genai import agent_config
client = genai.Client()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
def lookup_order(order_id: str) -> str:
return f"Order {order_id} shipped yesterday."
# Your functions, as declarations for the model, and what answers each.
TOOLS = [{"function_declarations": [{
"name": "lookup_order",
"description": "Look up the status of an order.",
"parameters_json_schema": {"type": "object", "properties": {"order_id": {"type": "string"}},
"required": ["order_id"]},
}]}]
FUNCTIONS = {"lookup_order": lookup_order}
question = "Where is order A1001?"
with support.run(question) as run: # one user message, one run
config = types.GenerateContentConfig(
system_instruction=run.system, # your prompt, then the skill list
tools=[*TOOLS, *run.tool_params], # your functions, then load_skill
)
contents = [{"role": "user", "parts": [{"text": run.message}]}]
while True:
response = client.models.generate_content(
model="gemini-3.5-flash", contents=contents, config=config,
)
if not response.function_calls:
break
contents.append(response.candidates[0].content)
parts = []
for call in response.function_calls:
# load_skill is answered by the run; your own functions by FUNCTIONS.
# A loop of your own rather than automatic function calling, which
# raises KeyError when the model asks for a function you did not pass.
function = FUNCTIONS.get(call.name)
parts.append(run.tool_result(call) or {"function_response": {
"name": call.name, "id": call.id,
"response": {"result": function(**(call.args or {})) if function
else f"There is no function named {call.name!r}."},
}})
contents.append({"role": "user", "parts": parts})
print(response.text)The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[google-genai]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("o0000-code-meta-analysis")
if result.exit_code:
raise SystemExit(result.problems)
from google import genai
from google.genai import types
from decimalai.google_genai import agent_config
client = genai.Client()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
def lookup_order(order_id: str) -> str:
return f"Order {order_id} shipped yesterday."
# Your functions, as declarations for the model, and what answers each.
TOOLS = [{"function_declarations": [{
"name": "lookup_order",
"description": "Look up the status of an order.",
"parameters_json_schema": {"type": "object", "properties": {"order_id": {"type": "string"}},
"required": ["order_id"]},
}]}]
FUNCTIONS = {"lookup_order": lookup_order}
question = "Where is order A1001?"
with support.run(question) as run: # one user message, one run
config = types.GenerateContentConfig(
system_instruction=run.system, # your prompt, then the skill list
tools=[*TOOLS, *run.tool_params], # your functions, then load_skill
)
contents = [{"role": "user", "parts": [{"text": run.message}]}]
while True:
response = client.models.generate_content(
model="gemini-3.5-flash", contents=contents, config=config,
)
if not response.function_calls:
break
contents.append(response.candidates[0].content)
parts = []
for call in response.function_calls:
# load_skill is answered by the run; your own functions by FUNCTIONS.
# A loop of your own rather than automatic function calling, which
# raises KeyError when the model asks for a function you did not pass.
function = FUNCTIONS.get(call.name)
parts.append(run.tool_result(call) or {"function_response": {
"name": call.name, "id": call.id,
"response": {"result": function(**(call.args or {})) if function
else f"There is no function named {call.name!r}."},
}})
contents.append({"role": "user", "parts": parts})
print(response.text)No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/o0000-code-meta-analysis/SKILL.mdfrom pathlib import Path
from google import genai
from google.genai import types
client = genai.Client()
skill = Path(".agents/skills/o0000-code-meta-analysis/SKILL.md").read_text()
response = client.models.generate_content(
model="gemini-3.5-flash",
contents="Hello!",
config=types.GenerateContentConfig(system_instruction=f"You are a helpful agent.\n\n{skill}"),
)This gets SKILL.md only. The skill's 37 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[langchain]" langchain-openai
decimalai skills add o0000-code-meta-analysisfrom langchain.agents import create_agent
from decimalai.langchain import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = create_agent(
"openai:gpt-5.4-mini",
tools=[], # your tools; the middleware adds load_skill
middleware=[support.middleware], # your prompt, the skill list and load_skill
)
result = agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[langchain]" langchain-openaifrom decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("o0000-code-meta-analysis")
if result.exit_code:
raise SystemExit(result.problems)
from langchain.agents import create_agent
from decimalai.langchain import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = create_agent(
"openai:gpt-5.4-mini",
tools=[], # your tools; the middleware adds load_skill
middleware=[support.middleware], # your prompt, the skill list and load_skill
)
result = agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/o0000-code-meta-analysis/SKILL.mdfrom pathlib import Path
from langchain.agents import create_agent
skill = Path(".agents/skills/o0000-code-meta-analysis/SKILL.md").read_text()
agent = create_agent("openai:gpt-5.4-mini", tools=[], system_prompt=f"You are a helpful agent.\n\n{skill}")
result = agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})This gets SKILL.md only. The skill's 37 other files are not included.
CrewAI's own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" "crewai>=1.15.27"
decimalai skills add o0000-code-meta-analysisimport decimalai.crewai
from crewai import Agent, Crew, Task
agent = Agent(
role="Support", goal="Help the customer", backstory="A support agent.",
llm=llm, # your own CrewAI LLM
skills=decimalai.crewai.skills(), # the installed folder
tools=decimalai.crewai.skill_tools(), # reads a skill's files, runs its scripts
)
task = Task(description="Hello!", expected_output="an answer", agent=agent)
Crew(agents=[agent], tasks=[task]).kickoff()The same install from Python, for a notebook or a setup script. CrewAI's own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" "crewai>=1.15.27"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("o0000-code-meta-analysis")
if result.exit_code:
raise SystemExit(result.problems)
import decimalai.crewai
from crewai import Agent, Crew, Task
agent = Agent(
role="Support", goal="Help the customer", backstory="A support agent.",
llm=llm, # your own CrewAI LLM
skills=decimalai.crewai.skills(), # the installed folder
tools=decimalai.crewai.skill_tools(), # reads a skill's files, runs its scripts
)
task = Task(description="Hello!", expected_output="an answer", agent=agent)
Crew(agents=[agent], tasks=[task]).kickoff()No DecimalAI package. CrewAI's own loader reads the folder, and nothing pins or updates it.
.agents/skills/o0000-code-meta-analysis/SKILL.mdfrom pathlib import Path
from crewai import Agent, Crew, Task
agent = Agent(
role="Support", goal="Help the customer", backstory="A support agent.",
llm=llm, # your own CrewAI LLM
skills=[Path(".agents/skills")],
)
task = Task(description="Hello!", expected_output="an answer", agent=agent)
Crew(agents=[agent], tasks=[task]).kickoff()This gets SKILL.md only. The skill's 37 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[adk]"
decimalai skills add o0000-code-meta-analysisfrom decimalai.adk import DecimalAIPlugin, agent_config
from google.adk.agents import LlmAgent
from google.adk.apps import App
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = LlmAgent(
name="support", # ADK needs a Python identifier
model="gemini-3.5-flash",
instruction=support.instruction, # your prompt, then the skill list
tools=[*support.tools], # your tools, then load_skill
)
# DecimalAIPlugin makes each invocation of runners built from this App one trace.
app = App(name="support", root_agent=agent, plugins=[DecimalAIPlugin()])Prefer ADK's own loader? SkillToolset(skills=decimalai.adk.skills(), ...) reads the same folder. Use one or the other: a skill delivered both ways reaches the prompt twice.
The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[adk]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("o0000-code-meta-analysis")
if result.exit_code:
raise SystemExit(result.problems)
from decimalai.adk import DecimalAIPlugin, agent_config
from google.adk.agents import LlmAgent
from google.adk.apps import App
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = LlmAgent(
name="support", # ADK needs a Python identifier
model="gemini-3.5-flash",
instruction=support.instruction, # your prompt, then the skill list
tools=[*support.tools], # your tools, then load_skill
)
# DecimalAIPlugin makes each invocation of runners built from this App one trace.
app = App(name="support", root_agent=agent, plugins=[DecimalAIPlugin()])Prefer ADK's own loader? SkillToolset(skills=decimalai.adk.skills(), ...) reads the same folder. Use one or the other: a skill delivered both ways reaches the prompt twice.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/o0000-code-meta-analysis/SKILL.mdfrom pathlib import Path
from google.adk.agents import LlmAgent
skill = Path(".agents/skills/o0000-code-meta-analysis/SKILL.md").read_text()
agent = LlmAgent(
name="support",
model="gemini-3.5-flash",
instruction=lambda context: f"You are a helpful agent.\n\n{skill}",
)This gets SKILL.md only. The skill's 37 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[pydantic-ai]"
decimalai skills add o0000-code-meta-analysisfrom pydantic_ai import Agent
from decimalai.pydantic_ai import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = Agent(
"openai:gpt-4o-mini",
name=support.name,
tools=[], # your tools; the capability adds load_skill
capabilities=[support], # your prompt, the skill list and load_skill
)
# In a notebook or async code: result = await agent.run("Hello!")
result = agent.run_sync("Hello!")On the Pydantic AI harness, decimalai.pydantic_ai_harness.skills(project) uses its own loader instead.
The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[pydantic-ai]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("o0000-code-meta-analysis")
if result.exit_code:
raise SystemExit(result.problems)
from pydantic_ai import Agent
from decimalai.pydantic_ai import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = Agent(
"openai:gpt-4o-mini",
name=support.name,
tools=[], # your tools; the capability adds load_skill
capabilities=[support], # your prompt, the skill list and load_skill
)
# In a notebook or async code: result = await agent.run("Hello!")
result = agent.run_sync("Hello!")On the Pydantic AI harness, decimalai.pydantic_ai_harness.skills(project) uses its own loader instead.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/o0000-code-meta-analysis/SKILL.mdfrom pathlib import Path
from pydantic_ai import Agent
skill = Path(".agents/skills/o0000-code-meta-analysis/SKILL.md").read_text()
agent = Agent("openai:gpt-4o-mini", instructions=f"You are a helpful agent.\n\n{skill}")
# In a notebook or async code: result = await agent.run("Hello!")
result = agent.run_sync("Hello!")This gets SKILL.md only. The skill's 37 other files are not included.
Deep Agents' own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" deepagents
decimalai skills add o0000-code-meta-analysisimport decimalai.deepagents
from deepagents import create_deep_agent
agent = create_deep_agent(model=model, **decimalai.deepagents.skills())
agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})The default backend reads files but has no shell. To run a skill's scripts, pass skills(backend=LocalShellBackend(...)).
The same install from Python, for a notebook or a setup script. Deep Agents' own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" deepagentsfrom decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("o0000-code-meta-analysis")
if result.exit_code:
raise SystemExit(result.problems)
import decimalai.deepagents
from deepagents import create_deep_agent
agent = create_deep_agent(model=model, **decimalai.deepagents.skills())
agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})The default backend reads files but has no shell. To run a skill's scripts, pass skills(backend=LocalShellBackend(...)).
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/o0000-code-meta-analysis/SKILL.mdfrom pathlib import Path
from deepagents import create_deep_agent
skill = Path(".agents/skills/o0000-code-meta-analysis/SKILL.md").read_text()
agent = create_deep_agent(model=model, system_prompt=f"You are a helpful agent.\n\n{skill}")
agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})This gets SKILL.md only. The skill's 37 other files are not included.
Its own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" agent-framework
decimalai skills add o0000-code-meta-analysisimport asyncio
from agent_framework import Agent
from decimalai.agent_framework import skills
agent = Agent(client=client, instructions="You are a helpful agent.", context_providers=[skills()])
asyncio.run(agent.run("Hello!"))It caches skills by default, so restart the process after decimalai skills update.
The same install from Python, for a notebook or a setup script. Its own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" agent-frameworkfrom decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("o0000-code-meta-analysis")
if result.exit_code:
raise SystemExit(result.problems)
import asyncio
from agent_framework import Agent
from decimalai.agent_framework import skills
agent = Agent(client=client, instructions="You are a helpful agent.", context_providers=[skills()])
asyncio.run(agent.run("Hello!"))It caches skills by default, so restart the process after decimalai skills update.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/o0000-code-meta-analysis/SKILL.mdimport asyncio
from pathlib import Path
from agent_framework import Agent
skill = Path(".agents/skills/o0000-code-meta-analysis/SKILL.md").read_text()
agent = Agent(client=client, instructions=f"You are a helpful agent.\n\n{skill}")
asyncio.run(agent.run("Hello!"))This gets SKILL.md only. The skill's 37 other files are not included.
Strands' own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" strands-agents
decimalai skills add o0000-code-meta-analysisfrom decimalai.strands import skills
from strands import Agent
from strands.vended_tools import file_editor, shell
agent = Agent(
model=model, # always pass one: the default is Amazon Bedrock
system_prompt="You are a helpful agent.",
tools=[file_editor, shell],
plugins=[skills()],
)
agent("Hello!")Strands loads an agent's skills once, so build the agent again after decimalai skills update.
The same install from Python, for a notebook or a setup script. Strands' own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" strands-agentsfrom decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("o0000-code-meta-analysis")
if result.exit_code:
raise SystemExit(result.problems)
from decimalai.strands import skills
from strands import Agent
from strands.vended_tools import file_editor, shell
agent = Agent(
model=model, # always pass one: the default is Amazon Bedrock
system_prompt="You are a helpful agent.",
tools=[file_editor, shell],
plugins=[skills()],
)
agent("Hello!")Strands loads an agent's skills once, so build the agent again after decimalai skills update.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/o0000-code-meta-analysis/SKILL.mdfrom pathlib import Path
from strands import Agent
skill = Path(".agents/skills/o0000-code-meta-analysis/SKILL.md").read_text()
agent = Agent(model=model, system_prompt=f"You are a helpful agent.\n\n{skill}")
agent("Hello!")This gets SKILL.md only. The skill's 37 other files are not included.
Adds every file the skill has, pinned so you can update it. Cursor, Copilot, Cline and Warp read this folder by themselves.
pip install "decimalai>=0.15"
decimalai skills add o0000-code-meta-analysisNo Python or account. Cursor, Copilot, Cline and Warp read this folder by themselves.
curl -fsSL --create-dirs -o .agents/skills/o0000-code-meta-analysis/SKILL.md https://app.decimal.ai/s/o0000-code-meta-analysis/SKILL.md.agents/skills/o0000-code-meta-analysis/SKILL.mdThis gets SKILL.md only. The skill's 37 other files are not included.
Give its text to your model as instructions. No account or package needed.
This gets SKILL.md only. The skill's 37 other files are not included.
Raw files: /s/o0000-code-meta-analysis/SKILL.md · /s/o0000-code-meta-analysis.json
Fetch the file and give its text to your model as instructions. No account or package needed.
curl -fsSL https://app.decimal.ai/s/o0000-code-meta-analysis/SKILL.mdcurl -fsSL https://app.decimal.ai/s/o0000-code-meta-analysis.jsonThis gets SKILL.md only. The skill's 37 other files are not included.
You don't need a DecimalAI account.
Saved prompts and skills, pinned versions, and traces of this skill in your runs. DecimalAI does not run your agent.
Claude Code reads files from your project, so DecimalAI config does not apply there.
On Claude Agent SDK: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On OpenAI Agents: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On OpenAI SDK: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On Anthropic: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On Gemini API: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On LangChain: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On CrewAI: set DECIMAL_API_KEY and add decimalai.init(crewai=True) to record runs and skill use. The skill version stays in your repo.
On Google ADK: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On Pydantic AI: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On Deep Agents: set DECIMAL_API_KEY and add decimalai.init(langchain=True) to record runs and skill use. The skill version stays in your repo.
On Microsoft Agent Framework: set DECIMAL_API_KEY and add decimalai.init(otel=True, agent_name="support") to record runs and skill use. The skill version stays in your repo.
On Strands: set DECIMAL_API_KEY and add decimalai.init(otel=True, agent_name="support") to record runs and skill use. The skill version stays in your repo.
Editors read files from your project, so DecimalAI config does not apply there.
Anywhere else: record a use with decimalai.log_skill_activation() inside a trace.
定量元分析专用 Skill。在 systematic-review 完成 L1-L8 之后,从 L9 起大幅扩展为完整定量合并工作流。R 统计由 Claude Code 在本地 R 环境直接执行 Rscript(metafor 等),原始输出(summary / warnings / sessionInfo)入审计包、红灯由 R 算(不靠 LLM 读数字),图由内置 ma-plots 固定渲染器产出 forest / funnel / PRISMA / RoB(§13.2;样式底座 ssci-plots)。
快速入口:第一可执行步骤见 §3 主 Agent 启动流程 + §4.2 L9.1 效应量提取。详细方法见 references/ + scripts/ + 底座 SSOT。
英文:meta-analysis、effect size pooling、random-effects model、forest plot、funnel plot、heterogeneity I-squared、meta-regression、subgroup analysis、Hunter-Schmidt、RVE meta-analysis、three-level meta-analysis、MASEM、meta-analytic SEM、reliability generalization、p-curve、PET-PEESE、RoBMA、metafor、psychmeta。
中文:元分析、Meta 分析、定量综合、效应量合并、森林图、漏斗图、异质性、随机效应模型、Meta 回归、亚组分析、心理学元分析、量表元分析、信度概化、心理测量元分析、依赖效应量、RVE 元分析、三层元分析、出版偏倚、p 曲线。
| 用户场景 | 切到 |
|---|---|
| 只做检索/筛选/RoB(L1-L8),不做合并 | systematic-review |
| 只做定性证据综合(无效应量) | systematic-review(质性路径)或 literature-set-review |
| 已收集文献集,要写综述但不做合并 | literature-set-review |
| 叙述综述 / 范围综述 / 整合综述 | field-overview-review |
| 50 年/30 年的领域发展史综述 | field-evolution-review |
| 理论建构 / 构念分析 / 对立理论比较 | theoretical-review |
| MA 四件套图(forest / funnel / PRISMA / RoB)渲染 | 本 Skill 内置 ma-plots 渲染器(§13.2,非切出) |
| 非 MA 通用统计图渲染 | ssci-plots |
SSOT-PSYCHOLOGY-SUPPLEMENTS.md(含 8 议题)。SSOT-CHINESE-CONTEXT.md。SSOT-SYNTHESIS-METHODS.md §4。本 Skill 假设 L1-L8 已就绪:用户已通过 systematic-review 或自行完成研究问题构造、检索、筛选、提取、RoB(详见 §13.1 联合工作流)。如未完成 L1-L8,主 Agent 应建议先切到 systematic-review。
你是协调者、判断者、规划者,不是执行者。 每个 SubAgent 必须使用当前可用的最强模型(与主 Agent 同级,不为省成本降级);默认阻断;同消息内多 Agent 调用 = 并行。
主 Agent 在 Skill 触发后立即加载 review-methodology-foundations/references/LAUNCH-DIGEST.md(启动即必读,正文 ≤10k)——它蒸馏了原"启动即必读三件套"(SSOT-LIFECYCLE-12-PHASES + SSOT-METHODOLOGY-TERMINOLOGY + SSOT-AI-FAILURE-DEFENSES,≈72k)的全部载荷条款 + §1.2-18 前沿条款(Egger-MLMA 路由 / trim-and-fill 降级 / k<5 禁 RVE / I²>90% 禁池化)+ Cohen / k→限定语 / I² / GRADE / 学科×数据库 / 构念方向六张查表。读完这一份即掌握全流程载荷红线。
为什么改(G5):实战审计实测原三件套 66-72k"启动即必读"被跳过 2/3——从未打开;48k 最对口的 PSYCHOLOGY-SUPPLEMENTS 零人读。被读率是主 Agent 派发 prompt 是否点名的函数,不是"必读"规定的函数。故三层修复:①启动只读 ≤10k digest(真读);②三件套 + 深层 SSOT 全文降级"按需下钻"(路径经
SSOT-INDEX.md全库 resolver,见 §8);③关键载荷投放到 SubAgent 靠PROMPT-COPY-BLOCKS.md复制块(§6/§14 · 内容进 prompt 的构造性保证),不靠自觉去读深文件。
深层全文按需下钻(不在启动加载,resolver 定位):SSOT-EFFECT-SIZE-DECISION(L9.1 效应量 + §4.10 设计9 单组前后测)/ SSOT-SYNTHESIS-METHODS(L9.4/L9.5/L9.9 方法本体)/ SSOT-PSYCHOLOGY-SUPPLEMENTS(心理学 8 议题 + §2.1.1 CHE)/ SSOT-AI-FAILURE-DEFENSES §8(构念方向协议全文)——digest 给决策阈值,需公式推导 / 操作模板时按 resolver 路径下钻。
MA 在 AI-FAILURE 的强防御项(digest §2 已含核心,此处保留 MA 专属加强):
派发顺序按 §4 工作流:
0. MA 入口 preflight(关 BK-1):派 L9.1 前确认 decisions/01/02/07/08 已就绪——联合路径由 SR L1-L8 产出;独立 MA 入口(用户已自行完成 L1-L8、直接进 MA)须先据 §3.3"独立 MA 入口脚手架"从 decisions_templates/ 拷模板填好这 4 档。缺任一即阻断 L9.1(不读决策档案直接执行违反 §3.3 强制必读)。
主 Agent 在每阶段产出后将决策结论写入 decisions/ 子目录(与本任务工作目录平级)。每个决策档案为独立 md 文件(YAML frontmatter + 正文,≤ 100 行/档),不复制 SSOT 内容。
MA 决策档案目录结构(与 SR 联合时复用 SR 的 01-08):
decisions/
01_type_decision.md # L1:含心理学场景判定(关键 — 决定 L11 加载 JARS-Quant)
02_research_question.md # L2:PICO + 效应量预设
03_mode_decision.md # L3:严格 vs 学习
07_data_types.md # L7:双人提取字段
08_rob_tool_decision.md # L8:RoB 工具
09_synthesis_decision.md # L9:FE/RE/RVE/三层/MASEM 选择 + k 阈值
09.1_effect_size.md # L9.1:效应量类型 + SE 反算
09.4_model_selection.md # L9.4:FE vs RE
09.5_heterogeneity.md # L9.5:I² / Q / τ² / 95% PI
09.6_subgroup.md # L9.6:k≥10 启用
09.9_publication_bias.md # L9.9:4+ 工具
10_grade_decision.md # L10
11_reporting_standard.md # L11:APA MARS Table 9 + PRISMA 2020 + 12 处差异
独立 MA 入口决策档案脚手架(关 BK-1,必读):MA 第一可执行步骤 L9.1 必读 decisions/01/02/07/08(§3.3 跨阶段强制必读 + decision-provenance §3),但这 4 档的生产者在 SR L1-L8。两条入口分别这样落地,避免独立入口"必读却无人创建"而卡死:
path: combined_with_sr):SR L1-L8 已产 01/02/03/07/08(共用同一 decisions/ 目录)→ MA 直读不重写(衔接门见 §13.1 N-4)。path: standalone,用户已自行完成 L1-L8、直接进 MA):主 Agent 在派 L9.1 之前,把用户已完成的 L1-L8 结论落成 01_type_decision.md(含心理学判定)/ 02_research_question.md(PICO + 效应量预设)/ 07_data_types.md(数据类型 + 信度 + n)/ 08_rob_tool_decision.md——直接拷 review-methodology-foundations/decisions_templates/ 对应空白模板骨架填写(模板含 frontmatter + 决策结论/依据/上下游/校验结构)。01/02/07/08 缺任一 → preflight 阻断 L9.1(视作"未读决策档案直接执行");不允许主 Agent 即兴补写无模板的决策档案,也不允许跳过这 4 档直接派 Extractor。
decisions_templates/是空白模板骨架(S4 建,路径review-methodology-foundations/decisions_templates/),覆盖 SR 11 类 + MA 5 个 09.x 子阶段 + 监督产物04a/07a/09.x_audit。它是"给 01/02/07/08 一个可拷的起点",本身不是决策实例。
跨阶段强制必读:L9/L10/L11/L12 阶段的所有 SubAgent prompt 必含:
**必读(决策档案)**:
- decisions/01_type_decision.md(含心理学判定 → L11 加载 JARS-Quant 的依据)
- decisions/02_research_question.md
- decisions/03_mode_decision.md
- decisions/07_data_types.md
- decisions/08_rob_tool_decision.md
- decisions/09*.md(按本阶段需要选 09.1/09.4/09.5 等)
- decisions/10_grade_decision.md(仅 L11/L12)
- decisions/11_reporting_standard.md(仅 L12)
追认①(G5 · 公理 8 好偏离追认)——规划文档=上下文容器:实战中 SubAgent prompt 未逐档点名上列 decisions,而由主 Agent 用"每轮专属规划文档"承载上下文(内嵌决策档指针),效果更优。此模式予以规范承认:上列决策档必读可由"读本轮规划文档(规划文档内嵌所需
decisions/*.md指针)"等价满足;构造性底线 = §6 派发复制块把关键决策载荷直接写进 SubAgent prompt(填空题),不依赖 SubAgent 自觉去开 decisions 档。决策档案禁止自证式"[ ] 已读 <文件>"勾选(G5 · R3 实测 decisions/01 虚假"[x] 已读"已发生、transcript 零访问);"规定应读"改用模板 frontmatterrequired_readings声明性机读字段(供未来审计),preflight--gate readings一行 WARN 计数,差异表渲染延期 v2。
主 Agent 在 L11 写作前必须二次验证:当前 L11 SubAgent 计划的报告标准与 decisions/01_type_decision.md(含心理学判定)+ decisions/11_reporting_standard.md 一致。心理学场景必须叠加 JARS-Quant Table 9 在 PRISMA 2020 上。不一致即阻断。详见 references/decision-provenance.md。
| 必须亲自做 | 必须外包给 SubAgent |
|---|---|
| 阅读用户需求 + 关键文件 | 任何 R 代码生成(按 §5 R 包路径选择 + 模板) |
| 决定是否走"SR L1-L8 + MA L9-L12"联合工作流 | 任何效应量提取/转换的具体执行 |
| 撰写规划文档(L9 子顺序、R 包、模型选择理由) | 任何模型拟合输出的解读 |
| 评估每轮 SubAgent 产出(计算正确性 / 模型合理性 / PB 稳健性) | 任何出版偏倚检验的具体执行与解读 |
| 与用户的关键沟通(数据格式确认、模型仲裁、最终交付) | 任何 APA MARS 报告章节的撰写 |
| 决策档案的写入与维护 | — |
按 12 阶段对齐(参见 SSOT-LIFECYCLE-12-PHASES.md)。MA 在 SR 基础上 L9 大幅扩展为 10 子阶段。
| 阶段 | 关键产出 | 决策档案 | SSOT |
|---|---|---|---|
| L1 | 类型识别(含心理学判定) | 01_type_decision.md | SSOT-REVIEW-TYPES |
| L2 | PICO + 效应量预设 | 02_research_question.md | SSOT-PICO-FRAMEWORKS |
| L3 | 严格 vs 学习模式 | 03_mode_decision.md | SSOT-MODE-PROFILES |
| L4 | 检索(PsycINFO + ClinicalTrials.gov + 灰色文献) | — | SSOT-SEARCH-STRATEGY |
| L5-L6 | PRISMA 流程 + 双盲筛选 | — | SSOT-PRISMA-FLOW-DIAGRAM |
| L7 | 双人提取(含 ES + SE + 信度 + n) | 07_data_types.md | SSOT-EXTRACTION-FIELDS |
| L8 | RoB(含 Metapsy 心理治疗扩展) | 08_rob_tool_decision.md | SSOT-ROB-TOOL-MAPPING |
| L9 | 定量合并(10 子阶段,本 Skill 核心) | 09*.md | SSOT-SYNTHESIS-METHODS + SSOT-EFFECT-SIZE-DECISION |
| L10 | GRADE | 10_grade_decision.md | SSOT-GRADE-FRAMEWORK |
| L11 | APA MARS + PRISMA 2020 + ma-plots 渲染器产图(§13.2) | 11_reporting_standard.md | SSOT-REPORTING-STANDARDS |
| L12 | AMSTAR 2 自评 | — | SSOT-AMSTAR-2-CHECKLIST |
如果用户未完成 L1-L8,主 Agent 先建议切到 systematic-review。
L9.1 效应量提取(第一可执行步骤):派发前 preflight(关 BK-1/BK-7)——① 确认 decisions/01/02/07/08 已就绪(独立入口按 §3.3 脚手架先建、联合入口由 SR 产;缺则阻断);② 联合路径必读 decisions/09_synthesis_decision.md 的切换结论(≠"推荐切 MA"则阻断,见 §13.1 N-4)。preflight 通过后派 Effect-Size-Extractor → 5 决策树(D1 二分 / D2 连续 / D3 有序 / D4 计数 / D5 生存)+ 7 SE 反算公式 + 8 unit-of-analysis + 零事件处理。详见 references/L9.1-effect-size-extraction.md。SSOT:SSOT-EFFECT-SIZE-DECISION §1-§5。
全文语料消费面(G6 · 外包交接包模式,治 A-Q6 头号 token 浪费):全文获取+转换若走
fulltext_request_pack/外包(见 SR SKILL §4.2.6),Effect-Size-Extractor 与数值核对 SubAgent 默认消费02_全文MD/<id>/<id>.md(MD)+ 按锚点回01_原始PDF/<id>.pdf关键页(p.N Table M粒度,anchors.json派生);整本重读 PDF 降为例外(这是实战最大 token 浪费=提取/核对 agent 整本读 PDF 4-6 遍的根治)。关键数值/方向/M-SD-N 一律回 PDF 核对(MD 为 OCR,可能有掉行/误差——如 proquest-0028 的 NED/PED 描述统计行 OCR 掉空,须回 PDF Table 2),提取结论附页/表锚点。全文语料回执须先过systematic-review/scripts/validate_fulltext.py质量门(MD 质量抽检抓 OCR 结构性掉行/元噪声)。
L9.2 效应量校正:派 Correction-Agent → Hedges' g 校正(默认 N < 60 关键,校正失败回退见 §11.6)+ Hunter-Schmidt artifact correction(仅心理学量表)。Bare-bones vs Psychometric 模式选择。详见 references/L9.1-effect-size-extraction.md §3 + references/L9-psychology-special.md。
L9.3 依赖性处理(k 阈值决策):判断依赖性 → 选择方法。
| 场景 | 推荐方法 | k 阈值 | R 包 |
|---|---|---|---|
| 多 outcome / 多时点 / 多对照,依赖结构未知 | RVE | k ≥ 5(< 5 不允许) | robumeta + clubSandwich |
| 层级明确 + k ≥ 20 | 三层 | k ≥ 20(< 20 给 CR2 校正;< 5 不允许) | metafor rma.mv() |
| 多变量关系建模(中介/调节) | MASEM | k ≥ 10 | metaSEM |
| k < 5 | 不允许 RVE / 三层 | — | 走单研究叙述 + sensitivity 单独报告(A 级替代路径) |
派 Dependency-Agent。详见 references/L9-psychology-special.md。
L9.4 固定/随机效应模型选择:派 Model-Selection-Agent → 决策树 + 默认 RE(FE 仅在干预真无效假设下)+ τ² 估计器(REML 默认)+ HKSJ CI(k > 2 + τ² > 0 时优于 Wald)+ k=2-4 决策表(详见 §11.4)。详见 references/L9.4-fixed-random-models.md。
默认 RE 模型的诚实披露(L9.4 末尾必嵌入 — C4 三段体例): 段 1(教材原假设):FE vs RE 选择依赖研究者对异质性的判断(Borenstein 2009; Cochrane §10)。 段 2(LLM 实现差异):本元分析默认采用 RE,FE 仅在干预真无效假设下使用。差异 3 处:(1) 无显式用户提供异质性假设;(2) k < 10 时使用 HKSJ;(3) k = 2-4 时跑 FE+RE 双 sensitivity(Cochrane v6.5 §10.10.4)。 段 3(缓解 + Limitations):报告 FE+RE 双结果;k ≥ 5 报 PI;心理学场景 + k < 5 报 PI 但显式标注"normal 假设不稳健"。在 Discussion 披露默认 RE 的方法学选择。
L9.5 异质性检验:派 Heterogeneity-Agent → Q + I² + τ² + 95% PI(k ≥ 5 必报;心理学必报)。I² > 75% 不允许仅呈现合并效应;I² > 90% 完全禁止合并 + 强制 subgroup / meta-regression(详见 §11.5)。详见 references/L9.5-heterogeneity.md。
L9.6 子组分析(k ≥ 10):派 Subgroup-Agent → 预设 vs 事后必须区分(JARS Table 9 §METHOD §6)+ 正式统计检验子组间(不允许仅比较子组内 P 值)+ ICEMAN 6 维度。详见 references/L9.6-subgroup-metaregression.md。
L9.7 Meta-regression(k ≥ 10):派 Metaregression-Agent(与 L9.6 可并行)→ 每分类特征 ≥ 10 项观察 + 比率类用 log-transformed。详见 references/L9.6-subgroup-metaregression.md。
L9.8 敏感性分析:派 Sensitivity-Agent(串行于 L9.5 之后——leave-one-out / FE vs RE / τ² 估计器对照 / 排除高 RoB 复算都需要 L9.5 已定的模型基线,不与 L9.5 并行;与 L9.9 可并行)→ Leave-one-out + FE vs RE vs HKSJ + 不同 τ² 估计器 + 不同 effect measure + 排除高 RoB 复算。
L9.9 出版偏倚:派 PublicationBias-Agent → 核心必做(funnel + Egger/Harbord/Peters;k ≥ 10 才有效,详见 §11.5);心理学补充 ≥ 1(p-curve / PET-PEESE / RoBMA / Selection models)。依赖效应量(L9.3 判定三层/RVE)→ 发表偏差用 Egger-MLMA(scripts/egger_mlma.R),非单水平 Egger;RoBMA 需 JAGS 默认不选(缺则降级 puni_star+PET-PEESE)。Trim-and-fill 已被 Cochrane v6.5 降级(仅作敏感性分析)。详见 references/L9.9-publication-bias.md。
L9.10 MASEM(按需):仅中介/调节 SEM 综合启用。TSSEM / One-Stage MASEM。详见 references/L9-psychology-special.md §3。
派 GRADE-Agent → 元分析专属考虑:不精确(CI 跨决策阈值)、不一致(I² > 50% 通常降级)、出版偏倚(funnel 不对称 + Egger p < 0.10 降级)+ 结合 RoB 2 / ROBINS-I。SSOT:SSOT-GRADE-FRAMEWORK。
派 Write-Agent(短稿 2-2-1 备份法 / 长稿分章变体见下追认②)+ 报告标准核对 SubAgent。
追认②(G5 · 公理 8 好偏离追认)——L11 分章 writer 变体 + 章间交叉互评:实战 L11(15k 词长稿)弃用 2-2-1 双稿备份法,改用 4 分章 writer(Intro / Methods / Results / Discussion 各一 SubAgent 并行起草)+ 集成 + 终稿修正,产出质量高、并行更快。规范承认"分章制"为长稿(≥12k 词)的合法变体,前提是补回被 2-2-1 丢掉的对撞检查点:分章起草后必须做 (a) 章间交叉互评(每章 writer 交叉审邻章的接口一致性 / 术语统一 / 前后呼应)+ (b) 集成一致性核对(Results↔Methods↔Abstract 的数字与载荷性主张逐一勾稽)——以此替代 2-2-1 的双稿对撞,不得省略对撞环节。短稿(<12k 词)仍用 2-2-1。两法均须过 SP6 claims-vs-data + SP7 引用终审(§9.1 /
references/L11-mars-reporting.md §8)。
详见 references/L11-mars-reporting.md。SSOT:SSOT-REPORTING-STANDARDS §1.3.1 + §3。
派 Self-Assessment Agent → AMSTAR 2 16 项 + 7 关键域。SSOT:SSOT-AMSTAR-2-CHECKLIST。
| 议题 | 主 R 包 | 代码模板 |
|---|---|---|
| 标准元分析(FE/RE) | metafor | scripts/metafor_basic.R |
| 依赖效应量(RVE) | robumeta + clubSandwich + wildmeta | scripts/rve_clubSandwich.R |
| 依赖效应量发表偏差(Egger-MLMA) | metafor rma.mv / robumeta+clubSandwich | scripts/egger_mlma.R |
| 三层元分析 | metafor rma.mv() | scripts/metafor_basic.R(含 rma.mv 块) |
| 心理测量(Hunter-Schmidt) | psychmeta | scripts/psychmeta_hunter_schmidt.R |
| MASEM | metaSEM(+ OpenMx / lavaan) | scripts/metaSEM_masem.R |
| p-curve / p-uniform | puniform · dmetar::pcurve | scripts/puniform_pcurve.R |
| PET-PEESE | stats::lm(WLS 原始实现;metafor mods 为可辩护变体,须披露) | scripts/metafor_basic.R §11 + references/L9-r-code-templates.md §8 |
| Selection models | weightr | (示例代码) |
| RoBMA | RoBMA | 需 JAGS 系统库(运行时检测缺失时)→ 默认不选,降级 puni_star + PET-PEESE(见 §11.2 / L9.9 §4.3) |
| 贝叶斯元分析 | brms · rstanarm · bayesmeta | (高级,按需) |
桥接哲学:本 Skill 由 Claude Code 在本地 R 环境直接执行 Rscript(metafor 等)跑出统计结果——不再生成代码让用户复制到外部环境跑后回填。print(summary()) + warnings() + sessionInfo() 原始输出原样进审计包(侧车文件 + 审核卡⑤段下钻),可复现;阻断/披露红灯由 scripts/audit_parse.R 从 rma 对象字段直接算出 flag JSON,不靠 LLM 读 summary 文本。保留的原则内核:不编造统计结果、人在签核点担责、可复现。详见 references/L9-r-code-templates.md。
LLM 介导本地执行工作流的诚实披露(嵌入
references/L9-r-code-templates.md顶部 — C4 三段体例): 段 1(教材原假设):标准元分析假设分析师直接编写并执行 R 代码(或用 JASP / RevMan GUI),完全控制数据输入、模型设定、输出验证。 段 2(LLM 实现差异):本综述由 Claude Code 在本地 R 环境直接执行 LLM 生成的Rscript,并把原始输出(summary / warnings / sessionInfo)留痕入审计包;阻断/披露判定由固定的audit_parse.R从 rma 对象字段算出,不靠 LLM 解读输出文本。这消除了"复制粘贴回填 / 预期与实际数据格式错配"那一类旧风险。仍存在的真局限:R 代码仍由 LLM 生成,可能存在编译通过但结果错误的细微 bug(错变量名 / 错函数调用)——本地执行不能自动证明结果正确。 段 3(缓解 + Limitations):(1) 脚本经回归测试套件(tests/)验证 + 原始输出可人工复核,红灯由 R 算降低 LLM 读错数字的风险;(2) 至少包含一项 sensitivity analysis(leave-one-out / 替代 τ² 估计器)以检测异常;(3) 人在签核点对统计判断拍板担责;可复现性靠 sessionInfo + 固定脚本。在 Discussion/Limitations 仍应披露"统计由 LLM 介导的本地自动化工作流完成"是方法学特征。
详见 references/L9-r-code-templates.md。
机制(治实战病根):实测一个 reference 文件被不被读,100% 取决于主 Agent 派发 prompt 是否点名它——没被点名的没人自发读。故本表不再是"何时去加载 X"(选择题),而是"派发某阶段 SubAgent 时,把该阶段复制块整段贴进 SubAgent 的 prompt"(填空题=关键载荷进 prompt,SubAgent 读不读深文件不再决定成败)。复制块全文见 review-methodology-foundations/references/PROMPT-COPY-BLOCKS.md;每次派发前置其 §A 共享底座块(四铁律 + 引用防御 + Cohen 表 + 构念方向协议 + k→限定语,同 LAUNCH-DIGEST.md §0/§2/§3)。深文件全文按需下钻,路径经 §8 的 SSOT-INDEX.md 全库 resolver(治两次 wrong-path)。
| 阶段·角色 | 复制块 | 该阶段最高危载荷(一句;全条款在复制块内) |
|---|---|---|
| L9.1 Effect-Size-Extractor | COPY-BLOCKS §B·L9.1 | 5 决策树×7 SE 反算;连续默认 Hedges' g;单组前后测走设计9(SMCR 同池/SMCC 不同池、ri 四级、1−ICC 逆序) |
| L9.2 Correction-Agent | §B·L9.2 | Hedges' g 默认;H-S artifact 校正仅心理学量表;无信度→不校正+披露 |
| L9.3 Dependency-Agent | §B·L9.3 | k<5 禁 RVE/三层;RVE k≥5、三层 k≥20、MASEM k≥10;CHE rho=0.6+CR2(<40) |
| L9.4 Model-Selection-Agent | §B·L9.4 | 默认 RE;REML+HKSJ(τ²>0,k>2);k=2-4 FE+RE 双 sensitivity;k≥5 必报 PI |
| L9.5 Heterogeneity-Agent | §B·L9.5 | 4 指标全报;I²>75% 不呈现合并、I²>90% 禁池化+强制 subgroup/meta-reg |
| L9.6/9.7 Subgroup/Metaregression | §B·L9.6 | k≥10 才做;预设 vs 事后必区分;正式统计检验子组间(禁只比子组内 P) |
| L9.8 Sensitivity-Agent | §B·L9.8 | 串行于 L9.5 后;leave-one-out+FE/RE+τ²+排高 RoB;方向 unresolvable 双向敏感性 |
| L9.9 PublicationBias-Agent | §B·L9.9 | 依赖效应量→Egger-MLMA 强制路由(禁单水平),全契约 L9.9:82-129;trim-fill 仅敏感性;k<10 不跑 |
| L10 GRADE-Agent | §B·L10 | L10-grade.md 住 SR 不住 MA;"研究数少"≠imprecision(用 OIS);升级前先 5 降级 |
| L11 Write-Agent | §B·L11 | MARS/JARS 12 差异;每 ES 配 CI;长稿分章 writer+章间交叉互评(追认2,§4.4) |
| 任何 Review-Agent 前 | references/quality-control.md | 四铁律 + AI 失败防御 4 类对接 |
| 写/查决策档案 | references/decision-provenance.md + COPY-BLOCKS §D | 规划文档=上下文容器(追认1,§3.3);09.x_audit 卡替代 09.x 决策档(追认3,§12.2) |
R 代码生成 SubAgent 另读
references/L9-r-code-templates.md(Chart-Bridge + 诚实披露)。subagent-templates.md= 各角色 6 段完整模板(on-demand 深潜;复制块 = 其"必读段"的即用压缩,主 Agent 无需先开模板即可派发)。
字数公式、矩阵与调整因子详见 SSOT-WORDCOUNT-RULES.md §3.1(综述类型 × 文献规模矩阵第 5 行:元分析)+ §3.3(调整因子)+ §3.4.5(元分析特殊条款)+ §4(字数纪律)。本节不复制 SSOT 数字。
三种确认模式(参见 SSOT §5):
按 SSOT §3.3 调整因子取值:
不硬凑 / 不铺陈 / 质量优先(详细定义参见 SSOT §4)。
启动阶段确认:在 L1(类型识别)后、L2(PICO + 效应量预设)前向用户确认字数目标。字数严重不匹配时按 §11.7 决策。
路径唯一权威 =
review-methodology-foundations/references/SSOT-INDEX.md(全库 file-resolver):阶段/关键词 → 唯一正确路径,覆盖三 skill 全部 references(治两次实战 wrong-path,尤L10-grade.md/L11-prisma-reporting.md/L12-amstar2.md住 systematic-review 却被 MA 阶段编号引用——resolver §B 跨 skill 陷阱表专列)。下表给"哪个阶段吃哪个 SSOT 的载荷",全文按需下钻时用 resolver 解析路径,不凭阶段编号直觉猜路径。
| 何时加载(具体决策动作粒度) | 加载 SSOT |
|---|---|
| 主 Agent 启动后立即必读(不等触发表) | LAUNCH-DIGEST.md(≤10k 启动即必读,蒸馏三件套全部载荷 + 前沿条款六表);三件套全文(AI-FAILURE / LIFECYCLE / TERMINOLOGY)降级为按需下钻 |
| 当主 Agent 在 L1 需要确认综述类型时 | SSOT-REVIEW-TYPES |
| 当主 Agent 在 L2 需要选 PICO 框架时 | SSOT-PICO-FRAMEWORKS |
| 当主 Agent 在 L9.1 需要做效应量类型决策(连续/二分/相关 + 标准化)+ SE 反算时 | SSOT-EFFECT-SIZE-DECISION §1-§5 |
| 当主 Agent 在 L9.4-L9.10 需要做综合方法(FE/RE、I²、出版偏倚)决策时 | SSOT-SYNTHESIS-METHODS §3-§10 |
| 当心理学场景触发(L9.2 校正 / L9.3 依赖 / L9.10 MASEM / L9.9 PB 心理学补充 / 复制危机) | SSOT-PSYCHOLOGY-SUPPLEMENTS §2 8 议题 |
| 当主 Agent 在 L8 需要按设计选 RoB 工具(含 Metapsy 心理治疗扩展)时 | SSOT-ROB-TOOL-MAPPING |
| 当主 Agent 在 L10 启用 GRADE 时 | SSOT-GRADE-FRAMEWORK |
| 当主 Agent 在 L11 写作前需要确定报告标准(APA MARS Table 9 + PRISMA 2020 + 12 处差异)时 | SSOT-REPORTING-STANDARDS §1.3.1 + §3 |
| 当主 Agent 在 L11 写作 PRISMA 流程图 / PRISMA-S 时 | SSOT-PRISMA-FLOW-DIAGRAM + SSOT-PRISMA-S-TEMPLATE |
| 当主 Agent 在 L7 需要确定提取字段时 | SSOT-EXTRACTION-FIELDS |
| 当主 Agent 在 L12 自评时 | SSOT-AMSTAR-2-CHECKLIST |
| 当中文场景触发(CNKI / GB/T 7714 / 中文心理学三大期刊) | SSOT-CHINESE-CONTEXT |
| 当主 Agent 在 L3 需要决定严格 vs 学习模式时 | SSOT-MODE-PROFILES |
| 当主 Agent 在 L1 / L11 需要确定字数公式时 | SSOT-WORDCOUNT-RULES |
底座 SSOT 路径前缀:review-methodology-foundations/references/(跨 skill 文件按 SSOT-INDEX.md resolver 解析,勿凭阶段编号猜前缀)。本 Skill 引用而不复制粘贴;关键载荷经 §6 复制块 + LAUNCH-DIGEST 投放,不靠"按需自觉去读"。
参见 SSOT-MODE-PROFILES.md v2.0.0(元分析子集 §4.5 + 三模式定义 §1)。
学习模式不允许跳过 L9.5(异质性披露)和 L9.9(核心出版偏倚)—— 这是元分析的科学合理性骨架。
学习模式简化点的诚实披露按 C4 三段体例(应用 SR L6 §6.1 范本,详见 references/L11-mars-reporting.md §"学习模式披露原文")。
一句话:AI 把粗活干完(检索、双盲筛选、双人提取、跑 R、出图、初稿),人只在机器判不了的 7 个关键节点拍板——方法学和严格模式一样完整,但每个不可逆的决策都有人亲自签字担责。定义见 SSOT-MODE-PROFILES.md §1.4。
什么时候选它:教授/导师要的"AI 初编、人 check、确保不出错、达发表级"——既不放心让 AI 全自动一路跑过关键判断(那是严格模式的全自动假设),又不能用课程级的随机抽查(达不到发表级)。一个研究者 + AI 协作产出可投稿的元分析、但要对每个关键判断亲自把关时,选监督模式。
它和严格模式差在哪:方法学完整度一模一样(都是发表级 Tier 1 全覆盖),唯一区别是把"最后人验收一次"换成"7 个不可逆点各审一次"。这 7 个点(元分析侧主要落在 L7 提取校准/低置信、L9 模型+异质性、L9.6/9.9 解读+发表偏差、L11 引用终审)每点产一张为它定制的审核卡,人看卡拍板"接受还是打回"。
为什么是"真门"而不是"提醒一下":每个签核点的裁决落进 decisions/ 对应文件的 user_signoff 标记。下游阶段启动前由 preflight 脚本读它——没签字 / pending / 打回 → 脚本退出码 ≠ 0,下游根本启动不了。同时红灯由 R 算(不是 AI 读 summary)、可复现性硬检查(缺 sessionInfo / 退出码 ≠ 0 / 红灯 / κ 太低 / 种子召回不足)先于人审直接阻断。7 门的运行时操作契约(每门触发时机、产物路径、preflight 命令、缺签阻断哪个下游、硬检查、审核面上限)见 review-methodology-foundations/references/SUPERVISED-MODE-GATES.md。
签核体验(G1 vNext,2026-07-03 · 两段式):监督模式 = 运行中知情确认 + 事后审核包独立走查。运行中的门是心流优先的知情确认(Agent 推荐+理由+后果+可下钻+可打回,保留「(推荐)」预标——它是 Agent 基于你不掌握的知识给的知情建议);真正的独立人类审核在事后署名人审核包(L12.5)。卡/gate 合一:唯一人面审核文档 = decisions/ 下 gate markdown(六段骨架 a-f),HTML 卡为可选增强。每门判断点由结构化决策块单一源头驱动,gate(e)段与 AskUserQuestion 题面双渲染同源、question_hash 锁;signoff_ask.py 是唯一合规提问/回填通道(agent 不许手写 signed、不许手打题面)。preflight 除签核/红灯外,additive 强制:同源 hash / 判断点引用的图表文件必存在 / 叙事不与数字矛盾 / 三字段机读披露。L9.9 发表偏差卡渲染必带 --funnel <真实存在的图>(图物理存在才配问「看漏斗图」)。完整机制见 review-methodology-foundations/references/SUPERVISED-MODE-GATES.md §0.5。
平衡(两边都不过拟合):不处处拦人审——绿档字段免审、双盲一致项自动放行、统计无红灯则该点无人审队列、可逆中间产物不设门;也不放任 AI 跑过关键判断——7 个不可逆冻结点、双提取分歧/低置信/关键数值/红档字段必审。每个签核点待审条数设上限,超限收紧上游过滤而非把长清单甩给人。运行中不做负样本注入、不加考验人的摩擦(独立判断在事后审核包,非运行中)。
披露:监督模式产出须披露"哪些步 AI 做、人在 7 签核点各审了什么"(RAISE:人类监督 + 透明披露 + 最终责任在人)。披露强度由签核事实机读生成、单调不超过事实(presented_via/evidence_opened/签字页状态 → 措辞映射,语义用 attestation)——两段式如实写作:in-run informed confirmations with drill-down access + post-hoc independent audit via structured audit package,不由 agent 措辞自定。详见 SSOT §6.6。
负责任使用(单一 SSOT):监督模式的立场、两段式监督模型、7 门与诚实边界的完整表述见发布仓根
RESPONSIBLE_USE.md——核心:AI 初编 + 人在 7 门签核 + 署名人负全责;运行中=知情确认(非独立判断),事后审核包=真正的独立人类审核;披露强度机读生成、单调不超过事实;不支持无人审核的自动投稿。
触发判定:按 SSOT-PSYCHOLOGY-SUPPLEMENTS.md §0.4 4 类信号清单(APA 期刊 / 量表名 / 心理学构念 / 复制危机 + JARS 关键词)扫描,任 1 类命中即触发;判定结果(yes/no/boundary)写入 decisions/01_type_decision.md 心理学判定字段(决定 L11 是否叠加 JARS-Quant + L9.x 是否启用 8 议题)。
参见 SSOT-PSYCHOLOGY-SUPPLEMENTS.md §2 心理学元分析 8 议题:
scripts/egger_mlma.R),非单水平检验心理学元分析必报清单(在标准 Cochrane 元分析报告之外):
详见 references/L9-psychology-special.md。
参见 SSOT-CHINESE-CONTEXT.md。
paper-search-pro(HTTP,无 MCP);OpenAlex/SS/CrossRef/PubMed 对中文覆盖有限 → 0 命中时主 Agent 引导用户人工导出 CNKI/万方题录 → ingest_search_exports.py 摄入;详见 §11.1本章节按"诊断信号 + 阈值 + 回退路径"三件套组织。故障切换决策写入 decisions/<阶段>_failure_switch.md。
检索主路径 =
paper-search-proSkill(OpenAlex / Semantic Scholar / CrossRef / PubMed 均走 HTTP API,需在环境中配置对应 API key,无需任何 MCP server)。若运行环境未提供semantic-scholar/openalexMCP server(常见默认情况)——因此故障诊断信号以"paper-search-pro检索结果异常"为准,不以"SS/OpenAlex MCP 报错"为准(该环境下这类报错不会出现)。中文检索因 OpenAlex/SS/CrossRef/PubMed 覆盖中文文献有限,主路径 = 用户人工导出 CNKI/万方 →systematic-review/scripts/ingest_search_exports.py摄入。
| 故障信号 | 阈值 / 触发条件 | 回退路径 |
|---|---|---|
| 英文检索 0 命中 / 召回过低 | 关键词为英文,paper-search-pro 命中明显不足 | 扩展同义词 / 放宽布尔逻辑重检;跨源交叉(OpenAlex↔CrossRef↔PubMed)补召回 |
中文检索经 paper-search-pro 0 命中 | 0 命中 + 关键词为中文 | (a) 用户人工导出 CNKI / 万方 / VIP 题录 → ingest_search_exports.py 摄入统一字段;(b) 已有文献集时转 literature-set-review。SubAgent 不擅自降级英文检索代替中文检索 |
| 检索整体不可用(HTTP 持续失败 / 网络受限 / key 失效) | 持续失败 ≥ 3 次 | 阻断 + 警示用户 + 主 Agent 不强行降级到本地推理凭记忆编造文献;引导用户人工导出题录后走 ingest_search_exports.py |
| 检索元数据不完整(abstract 缺失 ≥ 50%) | 缺失率 ≥ 0.5 | (a) 派 firecrawl-abstract Skill 补抽(见下注降级路径);(b) 退回扩展同义词重检 |
firecrawl-abstract降级注:若运行环境无semantic-scholarMCP server → 该 Skill 的paper_details(Semantic Scholar API / SS 法)通道不可用;默认走 Firecrawl Scrape / Firecrawl Extract 两法(Firecrawl key 在场可用),按 DOI / URL 抓取并解析摘要。
| 故障信号 | 触发条件 | 回退路径 |
|---|---|---|
metafor 不可用 | library(metafor) 报错 | (a) 提示 install.packages("metafor");(b) 给 Python statsmodels 等价代码(仅基础 RE);(c) 警示替代方法的解读差异(statsmodels 不实现 HKSJ) |
puniform 不可用 | 报错 | 给 dmetar::pcurve 替代;或 R 代码模板让用户安装 |
robumeta / clubSandwich 不可用(RVE) | 报错 | 提示安装;或转单研究叙述(k 不足时) |
metaSEM / psychmeta 不可用 | 报错 | 提示安装;或转 Hunter-Schmidt 手算模板 |
| RoBMA / JAGS 不可用 | jags_ok=FALSE(Sys.which("jags")="" 或 RoBMA/rjags 缺) | 自动降级 puni_star + PET-PEESE(无需 JAGS);披露"因缺 JAGS 未执行 RoBMA",不写"已通过" |
| 完全无 R 环境 | 用户声明无 R | (a) 转手算模板(基础 RE / FE);(b) Python statsmodels + scipy.stats 等价基础代码;(c) 阻断高级方法(RVE / 三层 / MASEM 不允许) |
R 包替代方法的诚实披露(C4 三段体例,必嵌入 Limitations):
段 1:原方法假设使用
metafor(Viechtbauer 2010)+ HKSJ 小样本调整。 段 2:本元分析使用 Pythonstatsmodels因 R 不可用。差异:(1) HKSJ 未实现,使用标准 Wald CI(k 小时低估不确定性);(2) τ² 估计器仅 DerSimonian-Laird;(3) Cochran's Q 计算同 metafor。 段 3:通过 leave-one-out 与 PI 报告缓解差异 1;在 Discussion 披露此局限。
| 场景 | 阈值 | 决策 |
|---|---|---|
identify_count > 10000 | 10000 | 强烈建议降级(PICO 扩窄 / 切到 FO) |
identify_count > 50000 | 50000 | 强制降级(不允许继续作为 SR/MA) |
identify_count < 5 | 5 | 阻塞 + 切到 LS 或扩展 PICO |
identify_count 在 5-20 之间 | 区间 | 警示 + 询问用户是否扩展 PICO 或转 LS |
应用 W5_FIX_PLAN F.P0.5 + Cochrane v6.5 §10.10.4:
| k 值 | 决策 | 详细处理 |
|---|---|---|
| k = 1 | 不元分析 | 无法合并,单研究叙述 |
| k = 2 | 不元分析 | 转 SWiM/Popay;标注"k 不足以合并";如必须给数值,仅报每研究效应 + CI |
| k = 3 | 元分析允许但谨慎 | FE+RE 双跑 + Discussion 显式 "k 不足"局限段 + sensitivity(leave-one-out) |
| k = 4 | 同 k=3 + PI 警示 | FE+RE 双跑 + sensitivity + 报 PI 但显式标注"normal 假设不稳健" |
| k ≥ 5 | 默认 RE | REML + HKSJ(k > 2 + τ² > 0)+ 必报 95% PI |
心理学场景特别约束:心理学场景 + k < 5 → 仍报 PI 但显式标注"normal 假设不稳健"(应用 W5_FIX_PLAN F.P1.3);非心理学 + k < 5 → 不报 PI,给 sensitivity 分析。
| 场景 | 阈值 | 决策 |
|---|---|---|
I² > 75% | 75% | 不允许仅呈现合并效应;改用 subgroup / meta-regression(Cochrane v6.5 Ch.10) |
I² > 90% | 90% | 完全禁止合并 + 必须 subgroup / meta-regression / SWiM(W5_FIX_PLAN F.P1.4) |
k < 5 异质性高 | k 阈值 | 不元分析,转 SWiM/Popay;或叙述综合 |
| k < 10 时出版偏倚检验不可用 | 10 | Egger / Harbord / Peters 在 k < 10 时低功效 → 不报检验结果;改给定性披露"由于研究数 < 10,未做 publication bias 检验"+ 在 Discussion 披露 |
| 故障 | 决策(应用 W5_FIX_PLAN F.P1.5 Correction-Agent 决策表) |
|---|---|
| Hedges' g J 因子计算失败(degrees of freedom 不可获取) | 退回 Cohen's d + 标注"未做小样本校正" |
| Hunter-Schmidt:构念测量误差是否报告 | 已报告 → 应用 artifact correction |
| Hunter-Schmidt:多研究信度/范围限制不齐全 | 文献级抽样校正 + sensitivity(不校正版本作 baseline) |
| Hunter-Schmidt:语料无信度数据 | 不校正 + 显式披露"无信度数据,不应用 H-S 校正" |
| 偏差 | 决策 |
|---|---|
| 偏差 ≥ 30% | 报告用户 + 建议调整(写作完成后) |
| 偏差 ≥ 50% | 强制调整或转 Skill |
00_交付清单_manifest.md,五节模板 references/delivery-manifest-template.md,§12.4)decisions/
01_type_decision.md ... 11_reporting_standard.md
09.1_effect_size.md / 09.4_model_selection.md / 09.5_heterogeneity.md / 09.6_subgroup.md / 09.9_publication_bias.md
追认③(G5 · 公理 8 好偏离追认)——audit 卡替代 09.4/09.5 决策档 · 档名消歧:实战未单建
09.4_model_selection.md/09.5_heterogeneity.md,而由render_audit_card.R产的09.4_audit.md/09.5_audit.md审核卡承载(卡已含判断点 + 红黄绿灯 + 数据 + 签核块,功能完全覆盖决策档)。规范消歧:同阶段09.x_audit审核卡在场即视为该阶段 09.x 决策档到位,不要求两者并存(消除"§12.2 档名规定 vs 门产物命名"两套并行冲突,实战 D12 偏离)。文件命名唯一权威仍见 §12.3。
L<N>_<task>.<ext> — 唯一标准)这是全库产出文件命名的唯一权威(关 BK-11)。subagent-templates / L9-r-code-templates /
scripts/*.R的读写名一律对齐本表,不得另起裸名(如effect_sizes.csv/*_results_summary.txt等旧裸名已废弃)。扩展名按语义:数据.csv/ 文档.md/ 图.png(ma-plots 渲染器) 或.R/ R 原始输出.txt。
# —— L9 数据 / 决策产出 ——
L9.1_effect_sizes.csv # L9.1 效应量数据(R-ready:study_id/outcome_name/yi/vi/sei/n_total + 可选 effect_id/subgroup/year/reliability_xx/reliability_yy)
L9.1_extraction_decisions.md # L9.1 提取决策记录(原 extraction_decisions.md)
L9.2_corrections.csv # Hedges' g + Hunter-Schmidt 校正后值
L9.3_dependency.md # 依赖结构判断
L9.4_model_selection.md # FE/RE 决策 + τ² 估计器
L9.5_heterogeneity.md # I² + Q + τ² + 95% PI
L9.6_subgroup.md # 子组分析(k ≥ 10)
L9.7_metaregression.md # meta-regression(k ≥ 10)
L9.8_sensitivity.md # leave-one-out 等
L9.9_publication_bias.md # funnel + Egger + 心理学补充
L9.10_masem.md # 按需(MASEM 结论)
L9_psychology_special.md # (S5) 心理学专题 SubAgent 产出(替原裸名 psychology_special.md)
L10_grade.md # GRADE 评估
L11_draft_A.md / L11_draft_B.md / L11_merged_1.md / L11_merged_2.md / L11_final.md # 2-2-1
L11_mars_compliance.md # MARS-Compliance-Agent 产出(原 mars_compliance.md)
L11_claims_vs_data.md / L11_ref_verify_report.md # 监督模式 SP6/SP7 产物(S6 接线)
L12_amstar2.md # 自评
# —— R 脚本 / 原始输出(统一 L9_/L9.x_ 前缀,替代旧 *_results_summary.txt 散名)——
L9_meta_analysis_main.R # 完整工作流主 R 脚本(原 meta_analysis_main.R)
L9_meta_results.txt # metafor 基础 R 原始输出(原 meta_results_summary.txt)
L9.3_rve_results.txt # RVE R 原始输出(原 rve_results_summary.txt)
L9.2_psychmeta_results.txt # Hunter-Schmidt R 原始输出(原 psychmeta_results_summary.txt)
L9.9_pcurve_results.txt # p-curve/p-uniform R 原始输出(原 pcurve_results_summary.txt)
L9.9_egger_mlma_results.txt # (S5) Egger-MLMA(依赖效应量多水平/RVE 发表偏差)R 原始输出
L9.10_masem_results.txt # MASEM R 原始输出(原 metaSEM_results_summary.txt)
# —— Chart-Bridge 数据 + 图(见 §13.2 + L9-r-code-templates §10)——
L9_forest_data.csv # Chart-Bridge 森林图 per-study 数据(列 study/es/ci_lo/ci_hi/weight;R 导出 → ma-plots 渲染器消费)
L9_forest_pooled.csv # 森林图 pooled diamond + 异质性侧车(es_overall/ci_lb/ci_ub/I2/Q/tau2)
L9_funnel_data.csv # Chart-Bridge 漏斗图 per-study 数据(列 study/es/sei)
L9_funnel_pooled.csv # 漏斗图 pooled 标量 + Egger 侧车(pooled/egger_intercept/egger_p/k)
L11_forest_plot.pdf / L11_funnel_plot.pdf # metafor 直出(草图/敏感性速览)
L11_forest_plot.png / L11_funnel_plot.png # ma-plots 渲染器渲染(发表级,§13.2 产出)
图扩展名裁定(锁4 §4.2.4):保留两条产图路径各自原生扩展名、前缀统一
L11_——pdf()出的草图(快速自检);.png= ma-plots 渲染器经 Chart-Bridge 渲染的发表级图(APA 7 + CVD-safe,样式复用 ssci-plots)。两者并存不冲突。
L12 自评(§4.5)完成后,交付打包按以下五步执行(治实战病根:交付打包零规范——全库 grep manifest|交付清单|打包 0 命中,实战那份高质量交付清单是临场发明,下次运行归零):
03_交付/,最终交付物复制进入(非移动);命名 [name]_v[N].[M].[ext](禁"最终版 / final"式主观后缀)。python3 <manuscript-typeset>/scripts/typeset.py --request typeset_request.yaml --outdir <03_交付/子目录>(四元组与降级见 §13.4;fidelity fail = exit 2 阻断该件,缺 xelatex 降级 docx+md 两件)。python3 <review-methodology-foundations>/scripts/audit_package.py build --run <运行根> --content <_audit_content.json> --out <运行根>/03_交付/ 产 00_审核入口.md + 审核包(规范 = review-methodology-foundations/references/SIGNING-AUTHOR-AUDIT-PACKAGE.md;就绪硬门 = signoff_preflight.py --gate L12.5 --decisions-dir <运行根>/decisions)。references/delivery-manifest-template.md(五节模板)产 03_交付/00_交付清单_manifest.md——其 §1 登记 typeset 实产件数(含降级如实);其 §3a 逐条覆盖步骤②产出 PLACEHOLDERS.md 的全部条目(占位符不允许静默漏交待);其 §2 必含名值绑定抽查记录(带 study 标签的图/表抽 N 行核"显示名↔study_id↔数值"三方一致,G7 教训,§13.2 labels 纪律的交付面收口);头部互链行指向步骤③已产出的 00_审核入口.md。00_ 文件分离互链核对,不合并:00_交付清单_manifest.md = 投稿物索引(给要投稿的人);00_审核入口.md = 署名人终审动线(给要签字担责的人)——职责分离、彼此链接(G2 边界,D-8)。gate 六段 / 审核站五栏 / manifest 五节的三结构职责对照(含"gate 签核 vs 终审签字 = 两次独立签署勿去重")见 review-methodology-foundations/references/THREE-STRUCTURE-MAP.md。之后 → 署名人终审。纯 SR 路径的 L12 打包同此规范(manifest 模板住本 Skill references/ 被 systematic-review 引用;SR 侧指针见其 §12 尾)。
推荐路径:
用户场景:定量合并 23 项 RCT
↓
Step 1:先调用 systematic-review 完成 L1-L8
- L1 类型识别(含心理学判定)→ decisions/01_type_decision.md(MA 沿用)
- L2-L8 全部
↓
Step 2:切换到 meta-analysis 完成 L9-L12
- L9.1-L9.10 定量合并
- L10 GRADE
- L11 APA MARS(含 forest plot=内置渲染器 §13.2)
- L12 AMSTAR 2 自评
主 Agent 在用户表达"我已完成检索/筛选/RoB,需要做定量合并"时,可直接进入本 Skill(独立 MA 入口,按 §3.3 脚手架先建 01/02/07/08);表达"完整系统综述含定量合并"时建议联合工作流。
联合路径 decisions/ 共用 + 09↔09.1 衔接门(关 BK-7,N-1..N-4):
decisions/ 目录:联合路径 SR 与 MA 共用同一 decisions/(与工作目录平级)。MA 不新建独立目录,直读 SR 已产的 01..08 + 09_synthesis_decision.md。09_synthesis_decision.md 共用、MA 只读不覆盖:SR 在 L9 产它(含"切 MA"结论 + 推荐模型族);MA 接力只读不重写,当"是否进 MA + 模型族"输入。09.1 续编:MA 在同目录新建 09.1/09.4/09.5/09.6/09.9 子阶段档,与 09 并存(小数层级天然区分,不存在覆盖)。decisions/09_synthesis_decision.md:若其切换结论 ≠ "推荐切 MA" → 阻断(不应进 MA,回 SR L9 SWiM/Popay);若 = 推荐切 MA → 读取其推荐模型族(FE/RE/RVE/三层/MASEM)作为 L9.3/L9.4 的输入约束。这把 BK-7 从"易漏的手工搭桥"升级为"阻断门保护的写死接力"。联合路径 L10-L12 归属(锁4 §4.4 裁定):以元分析为终点的联合路径,meta-analysis 拥有 L9-L12——由 MA 产 10_grade_decision.md + 11_reporting_standard.md + L12_amstar2.md(依据 MA §12.1 交付物清单 + 本 §13.1 联合工作流)。纯 SR 路径(无 MA)的 L10-L12 仍由 SR 完成。
SR L7 → MA L9.1 字段映射:详见 systematic-review references/L7-extraction-dual.md §11(映射表本体,对接本 Skill L9.1-effect-size-extraction.md §8.2 输入契约——study-level 原始统计量;L9.1 负责把原始量经 escalc 算成 ES/SE/yi/vi/sei)。
本 Skill 不直接现场写渲染代码。图 = 固定渲染器 scripts/plots/ 参数化直出 + 内置 QC 断言 exit≠0(G7;治实战病根:SubAgent 现场写 500 行 matplotlib + 无 QC 门 → Fig6 图例压末行数据点带伤交付)。四渲染器:forest.py / funnel.py(Python 固定渲染器)+ prisma_flow.py(薄包装官方 PRISMA2020 R 包)+ rob_traffic.py(薄包装官方 robvis R 包)。三步硬契约:
references/L9-r-code-templates.md §10 Chart-Bridge,在 metafor_basic.R 的 res_re 之后跑):L9_forest_data.csv(列 study, es, ci_lo, ci_hi, weight + pooled 侧车)+ L9_funnel_data.csv(列 study, es, sei + pooled 侧车)。PRISMA counts YAML / RoB domains CSV 新契约见 references/prisma-flow-contract.md / references/rob-figure-contract.md。python3 scripts/plots/forest.py --data L9_forest_data.csv --pooled L9_forest_pooled.csv --labels <study→显示名> --out L11_forest_plot [--pi lo,hi] [--subgroup-col C] [--ilab n_int,n_ctrl] [--width single|double]python3 scripts/plots/funnel.py --data L9_funnel_data.csv --pooled L9_funnel_pooled.csv --out L11_funnel_plot [--width]python3 scripts/plots/prisma_flow.py --counts prisma_counts.yaml --out L11_prisma_flow [--width]python3 scripts/plots/rob_traffic.py --data rob_domains.csv --labels <study→显示名> --tool both --out L11_rob [--summary-bar --weights-from <cell>] [--width]apply_style/get_palette/save_figure);标签纪律硬门(禁 ~2019/Anon./裸内部 ID 上图,gap 入 Note)。命令行签名权威见 scripts/plots/README.md。--labels 文件必须从特征表 / G2 ID 对照卡机械生成并落盘(含 ~2019 尾注等内部记法净化),禁止手造——手造 labels 曾致对比样张名值错位 8/13 + 编造研究名(渲染器本体键 join 无缺陷,缺陷在输入)。名值绑定是"版式 QC + 数值 oracle"之外的第三类检查:凡带 study 标签的交付图,验收必须抽 N 行核显示名 ↔ study_id ↔ 数值三方一致(交付面登记入 manifest §2 抽查记录,§12.4)。--warn-only 可降)/ 3(空)。失败阻断门保留:CSV 缺失或 0 行 → 阻断(不编图数据、不空跑;结构性人在环门 BK-12)。ssci-plots 退居 ma-plots 的样式依赖 + 非 MA 四件套通用图出口。| 用户需求 | 切到 |
|---|---|
| 已收集文献,要写综述但不做合并 | literature-set-review |
| 50 年/30 年的领域发展史 | field-evolution-review |
| 整合综述(量化 + 质性 + 理论) | field-overview-review |
| 严格 PRISMA 系统综述(不含定量合并) | systematic-review |
| MA 四件套图(forest / funnel / PRISMA / RoB) | 本 Skill 内置 ma-plots 渲染器(§13.2/§13.4,非切出) |
| 非 MA 通用统计图 | ssci-plots |
| 验证引用准确性 | academic-ref-check(四元组见 §13.4) |
| 找文献 | paper-search-pro(四元组见 §13.4) |
定位:本表把每个卫星调用锁成四元组命令行契约【何时调 / 命令或入口 / IO 契约 / 缺失时降级】,替代"联动 X"式叙述性动词(E-Q4 病根:叙述性依赖可被合法绕开——实战 L11 现场手写 500 行 matplotlib 翻车)。四元组为新立契约形态(照 §11.1 故障表"信号 / 阈值 / 回退"精神扩展)。每行"缺失时降级"给出明确的阻断或降级动作,禁止静默跳过。表内文件路径 = skill-根相对路径;命令中
<skill>= 该 skill 根目录(严禁解析到 runtime~/.claude/skills/或裸相对skills/)。
| 卫星 | 何时调 | 命令或入口 | IO 契约 | 缺失时降级 |
|---|---|---|---|---|
| ma-plots(本 Skill 内置渲染器,非独立 skill) | L11 产图(forest / funnel / PRISMA 流程图 / RoB 图) | 四条固定命令:<meta-analysis>/scripts/plots/ 下 forest.py / funnel.py / prisma_flow.py / rob_traffic.py(完整调用式见 §13.2 步骤 2;CLI 签名权威 = meta-analysis/scripts/plots/README.md) | 进:Chart-Bridge CSV(L9_forest_data.csv / L9_funnel_data.csv + pooled 侧车)+ references/prisma-flow-contract.md(counts YAML)+ references/rob-figure-contract.md(domains CSV)。出:<stem>.pdf + <stem>.png。labels 纪律:--labels 文件必须从特征表 / G2 ID 对照卡机械生成并落盘、禁手造;交付验收含"显示名↔study_id↔数值三方一致"抽查(第三类检查,§13.2)。退出码 0/1/2/3;QC exit≠0(码 2 非 warn-only)不落盘 | 渲染器或其依赖缺失 → 阻断交付图并明确报告缺什么(不静默、绝不回退现场写渲染代码顶替)。PRISMA/RoB 官方 R 包缺(R / PRISMA2020≥1.1.4 / DiagrammeRsvg / rsvg;robvis≥0.3.1 + ggplot2)→ exit 1 明确报错(--warn-only 不降)→ 装包后重跑;QC 断言失败(exit 2)才可 --warn-only 知情降级仍出图(README 退出码契约)。样式依赖 ssci-plots 缺(解析序:SSCI_PLOTS_SCRIPTS env → 同级部署相对路径 → 内联降级底座)→ 降级底座样式 + WARN(仅字体/色,布局不受影响);ssci-plots 另任非 MA 四件套通用统计图出口 |
| manuscript-typeset(独立通用 skill) | L12 成稿后交付打包(§12.4 步骤③);默认产投稿四件,不待用户追加 | python3 <manuscript-typeset>/scripts/typeset.py --request typeset_request.yaml --outdir <dir> | 进:typeset_request.yaml(契约权威 = manuscript-typeset/references/MANUSCRIPT-INPUT-CONTRACT.md)。出:四件(投稿 docx / 投稿 PDF man / 发表预览 PDF jou / 干净 md)+ 三附件(BUILD_NOTES / PLACEHOLDERS / STRIP_REPORT)+ 每件 FIDELITY 报告。退出码 0/1/2/3;fidelity fail = exit 2 该件不落 + 整体阻断(无 --warn-only) | 缺 xelatex → 降级出 docx + md 两件(exit 0,PDF 标 skipped + BUILD_NOTES 声明);缺 pandoc → exit 1 阻断并报告(docx 也出不了);fidelity fail 永不降级 |
| academic-ref-check | SP7 引用终审(L11 终稿 + 引用表定稿后、交付/定稿前最后一道门) | python3 <academic-ref-check>/scripts/verify_http.py --in L11_refs.json --out-dir decisions/ --topic "终稿引用"(或 --in-text L11_references.md 自解析);现行接线细节 = references/L11-mars-reporting.md §8.3 | 进:终稿全部引用 100%(结构化 JSON 或 md 列表)。出:decisions/L11_ref_verify_report.md(人读,持 user_signoff)+ L11_ref_verify_report.json(机读,preflight 消费);逐条核验 (1)存在 (2)第一作者姓 (3)期刊 (4)年份 + 补回 DOI。退出码:有红→1 / 否则 unverified→3 / 否则有黄→2 / 全绿→0;signoff_preflight.py --gate SP7 存在红项即 exit≠0 拦终稿 | 核验能力缺失(HTTP 持续失败 / unverified)≠ 通过——SP7 门语义不变(fail-closed):改人工多源核验(OpenAlex / CrossRef 手查)且负担显式披露;unverified 须重跑至可判;绝不"跳过核验照交付"(单条幻觉引用 = 信誉摧毁级) |
| paper-search-pro | 主要属 SR L4/L5(检索主路径);MA 侧仅独立 MA 入口补检索时触发 | Skill 工具显式加载并触发(HTTP API:OpenAlex / Semantic Scholar / CrossRef / PubMed,key 已配,无 MCP) | 进:检索式。出:题录导出 → systematic-review/scripts/ingest_search_exports.py 摄入 | → §11.1 回退表(中文 0 命中 → 人工导出 CNKI/万方 → ingest 摄入;整体不可用 → 阻断警示、不凭记忆编造文献)+ G6 检索请求包人工路线(SR SKILL §4.2.4)。本行指针即可,不复述 §11.1 |
| document-to-markdown + paper-downloader-portable | L6 全文获取 + PDF→MD 转换(MA 侧 = L9.1 前全文语料在场性消费面,§4.2 L9.1 blockquote) | G6 全文请求包机制(不直接调 CLI):主 session 产 fulltext_request_pack/(download_list CSV + download_policy.yaml + 自包含执行 Prompt)外包给可插拔执行器——模式 = review-methodology-foundations/references/OUTSOURCING-HANDOFF-PATTERN.md;操作细节 = SR SKILL §4.2.6 | 进:download_list.csv + download_policy.yaml(allow_scihub 一次性预先点头 / 渠道白名单 8 枚举 / 依赖档位)。出:回执按 references/FULLTEXT-RECEIPT-FORMAT.md(8 字段 fulltext_receipt.csv + 人读清单);systematic-review/scripts/validate_fulltext.py 硬门验收(exit≠0 不摄入;--receipt --policy 渠道纪律 fail-closed) | G6 依赖档位(download_policy.downloader.tier):本地 paper-downloader-portable 优先;缺 → 第三方下载 skill paper-fetch(MIT · DOI→PDF 7 源兜底链 · pure-stdlib · github.com/Agents365-ai/paper-fetch;分发档位·安装·Sci-Hub 合规外置〔默认须 PAPER_FETCH_NO_SCIHUB=1,仅 allow_scihub:true 授权〕见仓库根 docs/DEPENDENCY-MATRIX.md)或 manual-only 手工逐库指引。d2m(执行 Prompt 必需转换器)缺 → 换具备 d2m 的执行器,或该篇转换缺件如实进回执(anchors=none(降级) / validate_fulltext 抓)+ 主 session 阻断消费并披露——主 session 不回退自己下载/转换(程序性外部劳动纪律) |
详见 references/subagent-templates.md。所有模板按 L9 子阶段重组,每个 SubAgent 含 6 段标准结构(角色 / 必读 / 任务步骤 / 输出契约 / 自检清单 / 失败回退)+ 占位符决策框架。
派发投放(G5):
subagent-templates.md= 各角色 6 段完整模板(on-demand 深潜)。运行时关键载荷投放 = §6 派发复制块(review-methodology-foundations/references/PROMPT-COPY-BLOCKS.md,整段进 SubAgent prompt = 填空题构造性保证),主 Agent 无需先开模板即可派发;模板供需要完整脚手架时下钻。L11 长稿(≥12k 词)用分章 writer 变体 + 章间交叉互评替代 2-2-1(追认②,§4.4)。
主要角色:Effect-Size-Extractor (L9.1) · Correction-Agent (L9.2) · Dependency-Agent (L9.3) · Model-Selection-Agent (L9.4) · Heterogeneity-Agent (L9.5) · Subgroup-Agent (L9.6) · Metaregression-Agent (L9.7) · Sensitivity-Agent (L9.8) · PublicationBias-Agent (L9.9) · MASEM-Agent (L9.10) · GRADE-Agent (L10) · Write-Agent A/B + Evaluate-Agent 1/2 + Final-Agent (L11, 2-2-1) · Review-Citation/Logic/Expression/Format (L11) · MARS-Compliance-Agent (L11) · Self-Assessment Agent (L12, AMSTAR 2)。
主 Agent 编排建议:L9.1 → L9.2/L9.3/L9.4 串行;L9.5 异质性先行 → L9.6/L9.7 可并行;L9.8 敏感性串行于 L9.5 之后(依赖 L9.5 模型基线,不与 L9.5 并行;可与 L9.9 并行);L9.9 单独(依赖 09.4/09.5);L9.10 按需。
双人提取 LLM 编排(应用 SR L6 §6.1 范本 — C4 三段体例):派 2 个独立 Effect-Size-Extractor SubAgent(A/B prompt 隔离)+ Cohen's κ 字段级 + 仲裁 SubAgent。详见 references/L9.1-effect-size-extraction.md §双人提取章。
decision-provenance.md:跨阶段决策档案机制说明L9.1-effect-size-extraction.md:5 决策树 + 7 SE 反算 + 8 unit-of-analysis + 零事件 + Hedges' g + Hunter-Schmidt + 双人提取 LLM 编排L9.4-fixed-random-models.md:FE/RE 选择决策树 + τ² 估计器 + HKSJ CI + k=2-4 决策L9.5-heterogeneity.md:I²/Q/τ²/95% PI 阈值与披露(含 I² > 90% 极端)L9.6-subgroup-metaregression.md:k ≥ 10 + ICEMAN 6 维度L9.9-publication-bias.md:funnel / Egger / Harbord / PET-PEESE / p-curve / RoBMA / Selection models(含 k < 10 不可用披露)L9-r-code-templates.md:按议题分组的 R 代码模板(含 Chart Bridge 调用 + LLM 生成 R 代码诚实披露)L9-psychology-special.md:RVE / 三层 / MASEM / Hunter-Schmidt / RG / 8 议题决策路径 + Correction-Agent 决策表L11-mars-reporting.md:APA MARS Table 9 完整 13 章节 + JARS-Quant 12 处差异 + 学习模式简化点披露subagent-templates.md:按 L9 子阶段重组的 SubAgent 模板(统一"输出契约"命名)quality-control.md:与四铁律 + AI 失败防御 4 类(§1 §2 §3 §4 全部)对接metafor_basic.R:基础元分析(FE/RE + heterogeneity + subgroup + meta-regression + funnel + Egger + PET-PEESE)rve_clubSandwich.R:RVE 依赖效应量元分析psychmeta_hunter_schmidt.R:Hunter-Schmidt 心理测量元分析metaSEM_masem.R:MASEM(TSSEM + One-Stage)puniform_pcurve.R:p-curve + p-uniform*参见 §8。所有 SSOT 位于 review-methodology-foundations/references/,由该底座 Skill 维护。本 Skill 引用而不复制粘贴。
Rscript 真跑——原始输出(summary/warnings/sessionInfo)入审计包、红灯由 audit_parse.R 算、人在签核点担责;不再"AI 生成代码 + 用户外部跑后回填"。保留"LLM 生成代码可能有编译通过但结果错误的细微 bug"这条真局限(未洗白)。未触碰 §5 R 包路径映射表。review-methodology-foundations/decisions_templates/ 全集空白模板。②BK-12 L9.8 串行:§3.2/§4.2/§14 把 L9.8 敏感性从"与 L9.5 并行"改为"串行于 L9.5 之后"(依赖 L9.5 模型基线)。③BK-11 命名统一:§12.3 补全为全产物唯一标准命名表(含 R 原始输出 / Chart 数据 / 图扩展名裁定),全库对齐。④BK-7 衔接门 + 锁4 L10-L12 裁定:§13.1 加 N-1..N-4 共用 decisions/ + 09↔09.1 阻断门 + L10-L12 归 MA。⑤BK-12 Chart-Bridge:§13.2 改为"R 导出 CSV → 主 Agent 协调转 Python 列表 → ssci-plots 渲染 + 无图数据阻断门"(ssci-plots 吃列表非 metafor 对象)。未触碰 §5 桥接段(S2)/ R 包表 RoBMA 行(S5)。scripts/egger_mlma.R),非单水平 Egger/Harbord/Peters;§5 R 包表新增 Egger-MLMA 行、§4.2 L9.9 + §10.1 议题8 加路由提示、§12.3 登记 L9.9_egger_mlma_results.txt(R 原始输出)+ L9_psychology_special.md(替原裸名 psychology_special.md)。②BK-10 RoBMA 降级:RoBMA 需 JAGS 系统库(运行时缺失,jags_ok=FALSE)→ 默认不选,缺 JAGS 自动降级 puni_star + PET-PEESE(无需 JAGS),全链不停;§5/§10.1/§11.2/§12.1 标注。诚实降级:RoBMA 因缺 JAGS 未执行=未验证,未写"已跑/已通过"。review-methodology-foundations/references/SUPERVISED-MODE-GATES.md + SSOT-MODE-PROFILES v2.0.0。用户面文字按 scripts/CARD_NARRATIVE_VOICE.md 精神去黑话。仅改 §9(OWNER_MAP §2.1 段落 owner),未触碰 §5 桥接段/R 包表/其余章节。batch_search 报错 / phantom limit / fields 类型 / "SS MCP 不返回 CNKI"),主路径改为 paper-search-pro(HTTP,OpenAlex/SS/CrossRef/PubMed key 已配)/ 中文人工导出 CNKI 万方 → ingest_search_exports.py 摄入;保留真实回退(中文 0 命中→人工导出+摄入/转 literature-set-review、整体不可用→阻断警示不凭记忆编造、元数据补抽)与关键约束"不擅自降级英文检索代替中文检索";§10.2 中文检索回退 cross-ref 同步去 SS MCP 框架。新增 firecrawl-abstract SS 法降级注:运行环境无 SS MCP → paper_details(SS 法) 不可用,默认走 Firecrawl Scrape/Extract 两法。仅改 §10.2/§11.1(OWNER_MAP §2.1 S7 段落 owner),未触碰 §11.2(S5 RoBMA 降级)/其余章节。LAUNCH-DIGEST.md(≤10k)——蒸馏三件套(LIFECYCLE/TERMINOLOGY/AI-FAILURE ≈72k)全部载荷 + §1.2-18 前沿条款六张查表,三件套/深层全文降级按需下钻;②§6 从"何时加载"(选择题)改"派发复制块"(填空题)——关键载荷经新建 PROMPT-COPY-BLOCKS.md 整段进 SubAgent prompt,最高危载荷一句内联本表(构造性保证,内容进 prompt);③§8 路径权威改指 SSOT-INDEX.md 全库 resolver**(阶段→绝对路径,治 L10/L11/L12 住 SR 却被 MA 阶段引用的两次 wrong-path);④四项好偏离追认(公理 8 首次正式应用):①规划文档=上下文容器(§3.3)/ ②L11 分章 writer 变体 + 章间交叉互评替代 2-2-1(§4.4/§14)/ ③audit 卡替代 09.4/09.5 决策档消歧(§12.2)/ ④自动预筛进 SR L6(SR 侧落地);⑤required_readings 保字段砍报表 + 禁自证式"已读"勾选(模板删 + preflight --gate readings 一行 WARN 计数,差异表→v2)。新建 LAUNCH-DIGEST.md / PROMPT-COPY-BLOCKS.md,SSOT-INDEX.md 转型 resolver。仅改 §3.1/§6/§8/§3.3/§4.4/§12.2/§14/§16(OWNER_MAP §5.5 登记),未触碰 §5(S2/S5)/§9.1(G1)/§11.1(S7)/§12.3 命名表(S4)/§13.1(S4)/§4.2 各阶段红线内容。delivery-manifest-template.md[§2 名值绑定抽查+§3a 覆盖 PLACEHOLDERS] → manuscript-typeset 默认四件 → L12.5 审核包 build → 两 00_ 文件分离互链[D-8]),纯 SR 路径同规范;③§13.2 标题双锁定化 + 追加 labels 机械同源纪律 additive 段(G7 复验教训:labels 禁手造、显示名↔study_id↔数值三方一致=第三类检查;G7 段后继 additive,蓝图 §5-G9 授权);④陈旧"联动 ssci-plots"事实同步(frontmatter pairs_with 加 manuscript-typeset / 行17 intro 尾句 / §1.2 表 / §2 行53 / §3.2 / §4.1 表 / §4.4 标题+bullet / §12.1 / §12.3 四处注释 / §13.1 图注 / §13.3 表)——仅措辞事实同步:S2 桥接哲学句、S4 §12.3 表体行名与锁4 扩展名并存裁定实质、G5 §4.4 追认②段、G6 §4.2 blockquote 全部一字未动。避开 §5(S2/S5)/§9.1(G1)/§11.1(S7)/G5 owned §3.1/§6/§8/§3.3/§12.2/§14。⑤references 消费面同源同步(全库验收口径):subagent-templates.md §15 Chart-Bridge 模板改固定渲染器四命令+labels 纪律(原教手构列表喂 ssci-plots+runtime 路径必读=与 §13.2 矛盾的活指令)/ L9-r-code-templates.md TOC+§10 标题+§10.0 尾句+§10.1 注+:114 R 注释 / L11-mars-reporting.md :26 导语+§6.3 / L9.9-publication-bias.md :49 注释+§7 / quality-control.md 核对行 / L9.6-subgroup-metaregression.md bubble 行指针化(ssci-plots=通用图出口的正确角色,非残留)。⑥critic 交叉复核(G9_execution/12)后加修:§12.4 五步调序(typeset→审核包→manifest,治"manifest 必填输入依赖后续步骤"倒置);L9.9 :328 自检行 / L9-r §10.2 尾块与表头 / SSOT-PICO :820 等消费面漏网 ssci-plots 活指令清零(验收 grep 关键词从"联动"扩为"联动|ssci-plots 渲染|调用 ssci-plots")。SKILL.md 结束。详细方法论见 references/ + scripts/ + 底座 SSOT。
Automatically, when a task matches. Use when user requests meta-analysis, 元分析, 心理学元分析, 量表元分析, effect size pooling, forest plot, random-effects model, me
Skills that do similar work, with their headline benchmark lift.
From the same source and nearby in the catalogue.