Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add personamanagmentlayer/pcl --skill research-expertgit clone --depth 1 https://github.com/personamanagmentlayer/pclWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/personamanagmentlayer/pcl/research-expert)<a href="https://agentmods.dev/skills/personamanagmentlayer/pcl/research-expert"><img src="https://agentmods.dev/badge/skills/personamanagmentlayer/pcl/research-expert/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/personamanagmentlayer/pcl/research-expert"><img src="https://agentmods.dev/badge/skills/personamanagmentlayer/pcl/research-expert.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00050 | $0.02635 |
| Opus 5 | $0.00025 | $0.01318 |
| Sonnet 5 | $0.00010 | $0.00527 |
| Haiku 4.5 | $0.00005 | $0.00264 |
Grade A, and why
research-expert scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 390 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Research Methodology Expert
Expert guidance for research methodology, experimental design, statistical analysis, and academic writing.
Core Concepts
Research Design
- Experimental vs observational studies
- Randomized controlled trials (RCTs)
- Cross-sectional, longitudinal, cohort studies
- Case-control studies
- Systematic reviews and meta-analysis
- Sample size determination
Statistical Analysis
- Descriptive statistics
- Hypothesis testing
- Confidence intervals
- Regression analysis
- ANOVA and t-tests
- Non-parametric tests
- Multiple testing correction
Academic Writing
- Literature review
- Research proposals
- Manuscript structure (IMR AD)
- Citation management
- Peer review process
- Publishing ethics
Experimental Design
from dataclasses import dataclass
from typing import List, Optional
import numpy as np
from scipy import stats
@dataclass
class Study:
name: str
design_type: str # 'RCT', 'observational', 'cohort'
sample_size: int
groups: List[str]
primary_outcome: str
secondary_outcomes: List[str]
class SampleSizeCalculator:
"""Calculate required sample size for studies"""
@staticmethod
def two_sample_ttest(effect_size: float, alpha: float = 0.05,
power: float = 0.8) -> int:
"""Calculate sample size for two-sample t-test"""
from statsmodels.stats.power import tt_ind_solve_power
n = tt_ind_solve_power(
effect_size=effect_size,
alpha=alpha,
power=power,
alternative='two-sided'
)
return int(np.ceil(n))
@staticmethod
def proportion_test(p1: float, p2: float, alpha: float = 0.05,
power: float = 0.8) -> int:
"""Calculate sample size for comparing proportions"""
from statsmodels.stats.power import zt_ind_solve_power
effect_size = (p2 - p1) / np.sqrt(p1 * (1 - p1))
n = zt_ind_solve_power(
effect_size=effect_size,
alpha=alpha,
power=power,
alternative='two-sided'
)
return int(np.ceil(n))
class ExperimentalDesign:
"""Design and randomize experimental studies"""
def __init__(self, n_subjects: int, n_groups: int):
self.n_subjects = n_subjects
self.n_groups = n_groups
def simple_randomization(self) -> List[int]:
"""Simple random assignment to groups"""
return np.random.choice(self.n_groups, size=self.n_subjects)
def block_randomization(self, block_size: int) -> List[int]:
"""Block randomization for balanced groups"""
n_blocks = self.n_subjects // block_size
assignments = []
for _ in range(n_blocks):
block = np.repeat(range(self.n_groups),
block_size // self.n_groups)
np.random.shuffle(block)
assignments.extend(block)
# Handle remaining subjects
remainder = self.n_subjects % block_size
if remainder > 0:
extra = np.random.choice(self.n_groups, size=remainder)
assignments.extend(extra)
return assignments
def stratified_randomization(self, strata: List[str]) -> List[int]:
"""Stratified randomization by covariates"""
assignments = np.zeros(self.n_subjects, dtype=int)
for stratum in set(strata):
stratum_indices = [i for i, s in enumerate(strata) if s == stratum]
stratum_n = len(stratum_indices)
stratum_assignments = np.random.choice(
self.n_groups,
size=stratum_n,
replace=True
)
for idx, assignment in zip(stratum_indices, stratum_assignments):
assignments[idx] = assignment
return assignments
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 5d ago Changed · +10 lines · +32 tokens per session 41eb1f94b096
- 6d ago First seen · 380 lines · 18 tokens per session scan A c1e66ad81245
research-expert is a skill published in the GitHub repository personamanagmentlayer/pcl (40 stars, last pushed 3d ago), licensed Apache-2.0. It adds 50 tokens to every session and 2,635 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.
Other skills, from other repositories
neuroskill-bci
Use live BCI cognitive and mood state from NeuroSkill.
saelens
Train sparse autoencoders to interpret model features.
jupyter-notebook
Iterative Python via live Jupyter kernel (hamelnb).
pydantic-ai
Build production-ready AI agents with PydanticAI — type-safe tool use, structured outputs, dependency injection, and multi-model support.
bioinformatics
Gateway to 400+ genomics and computational biology skills.
clawrouter
Hosted-gateway LLM router — save 84% on inference costs. A local proxy that forwards each request to the blockrun.ai gateway, which routes to the cheapest capable model across 76 models from OpenAI, Anthropic, Google, DeepSeek, xAI, Z.AI, and more. 7 free open-weight models included. Also exposes realtime market data…