Data Skill
Two modes. Match the request to a section.
| Signal | Mode |
|---|---|
| Analyze data, CSV, metrics, A/B test, trend, KPI, funnel, distribution | A. Data Analysis |
| Enrich references, generate references, decompose skill, improve depth | B. Reference Enrichment |
A. Data Analysis
Every analysis starts with the decision it supports, works backward to evidence required, then touches the data. Analysis without a decision is arithmetic.
Phase 1: FRAME
Establish what decision this analysis supports.
- Identify the decision, decision-maker, options, and default action if no analysis is done.
- If the user cannot articulate a decision, ask: "What will you do differently based on this analysis?" If exploratory, switch to Exploratory Mode (apply rigor gates, make no causal claims).
- Define evidence requirements: what evidence favors each option, minimum threshold for changing the default, deal-breakers.
- Save
analysis-frame.md.
Gate: Decision identified, options enumerated, evidence requirements saved.
Phase 2: DEFINE
Lock metric definitions before loading data. Defining after seeing data enables cherry-picking.
For each metric: name, exact formula (numerator/denominator), population (included/excluded), time window, segments. For comparisons: define groups and verify fairness.
Save metric-definitions.md. Definitions are locked once Phase 3 starts. If data reveals a definition is unworkable, return here, update, and document the change.
Gate: All metrics defined with formulas and populations.
Phase 3: EXTRACT
Load data. Assess quality. No interpretation.
- Detect tools: try
import pandas; fall back tocsv.DictReader+statistics. - Profile: row count, column types, missing values, date range, distribution stats.
- Quality checks (load
references/rigor-gates.mdGate 1):
| Check | Minimum | If failed |
|---|---|---|
| Sample fraction | Report N of M | Warn if <5% coverage |
| Time window | No gaps >10% | Adjust or note limitation |
| Segment size | 30+ per segment | Merge small segments or exclude |
| Missing rate | <20% per critical column | Impute with disclosure or exclude |
- Save
data-quality-report.md.
Gate: Data loaded, quality assessed, failures documented as limitations.
Phase 4: ANALYZE
Compute metrics per Phase 2 definitions. Report confidence intervals, not point estimates.
- Compute using exact formulas. Wilson score CI for proportions.
- Fairness gate (comparisons): same time window, same population, confounders documented, survivorship checked (load
references/rigor-gates.mdGate 2). - Multiple testing (6+ comparisons): apply Bonferroni (threshold = 0.05/N). Report all segments tested (Gate 3).
- Practical significance: report effect size alongside statistical significance. Base-rate context ("from 2.1% to 2.3%", not "+10% lift") (Gate 4).
- Save
analysis-results.md.
Gate: All metrics computed. Rigor gates applied.
Phase 5: CONCLUDE
Lead with insights. Return to the decision.
- Headline finding: one sentence addressing the Phase 1 decision.
- Supporting evidence: primary metric with CI, secondary metrics, segment breakdowns.
- Limitations: wide CIs are the finding, not a formatting problem.
- Decision mapping: does evidence meet threshold? Deal-breakers triggered? Recommended action? Additional data needed?
- Save
analysis-report.md(loadreferences/output-templates.mdfor analysis-type templates).
Gate: Report saved with headline, limitations, recommendation tied to decision.
Error Handling (Data Analysis)
| Error | Recovery |
|---|---|
| No decision context | Ask "What will you do differently?" Switch to Exploratory if none. |
| Parse failure | Try utf-8, latin-1, utf-8-sig. Detect delimiter. Max 3 attempts. |
| Insufficient segment data (<30) | Merge small segments, remove segmentation, or accept with disclosure. |
| Metrics changed after seeing data | Return to Phase 2, document changes. Max 2 revisions. |
| Wide CI on primary metric | State: "Data does not support a confident decision." Suggest more data. |
B. Reference Enrichment
Enrich agent/skill reference files from Level 0-2 to Level 3+, or decompose bloated body files by extracting domain content into references.
Phase 0: DECOMPOSE (when --decompose or "extract references")
Extract domain-heavy content from a bloated SKILL.md into reference files.
- Run
python3 scripts/detect-decomposition-targets.py --skill {name}(or--agent). - If no extractable blocks, report "nothing to decompose" and stop.
- Snapshot:
cp {path} /tmp/decomp-before-{name}.md. - For each block: create reference file, remove from body (MOVE, not copy), add loading table entry.
- Retain in body: frontmatter, overview, phase workflow, loading table, error handling.
- Validate:
python3 scripts/validate-decomposition.py --before /tmp/decomp-before-{name}.md --after {path} --refs {refs_dir}/. - If fails: restore from snapshot. If passes:
python3 scripts/validate-references.py --skill {name}.
Load references/decomposition-prompt.md for the autonomous decomposition prompts.
Gate: Validation passes. Body reduced. All extracted content in references.
Phase 1: DISCOVER
- Run
python3 scripts/gap-analyzer.py --agent {name}(or--skill). - Read the component's .md and existing references. Map coverage.
- Compare stated domains against covered domains. Output gap report.
Gate: At least one gap identified. If Level 3 already, stop.
Phase 2: RESEARCH
For each gap: identify version-specific patterns, failure modes with detection commands (grep -rn "pattern"), error-fix mappings, project conventions. Dispatch up to 5 parallel research agents per sub-domain.
Gate: Each gap has 10+ concrete findings (version numbers, function names, grep patterns). Generic advice does not count.
Phase 3: COMPILE
Create one reference file per sub-domain (max 500 lines) following references/reference-file-template.md. Include: overview, pattern table with version ranges, failure mode table with detection commands, error-fix mappings.
Do-pairing rule: every failure mode needs a "Do instead" counterpart. No bare negative blocks.
Validate: python3 scripts/validate-references.py --agent {name} and --check-do-framing. Both must exit 0. Then run condense on each file.
Gate: Each file 80-500 lines. Both validations pass.
Phase 4: VALIDATE
Tier 1: python3 scripts/audit-reference-depth.py --agent {name} --json. Level must be 3.
Tier 2: Apply references/quality-rubric.md. For each pattern: detection command present? Would a reviewer using only this file produce Level 3 output?
Gate: Both tiers pass. Max 2 loops per gap before flagging for manual review.
Phase 5: INTEGRATE
- Add/update loading table in the component body.
- Validate:
python3 scripts/validate-references.py --agent {name}andpython3 -m pytest scripts/tests/test_reference_loading.py -k {name} -v. - Stage changes.
Gate: Validation passes. Report level change (was N, now M) and new file list.
Error Handling (Reference Enrichment)
| Error | Recovery |
|---|---|
| Gap analyzer fails | Check both agents/ and skills/ directories. |
| Phase 2 gate fails (<10 findings) | Domain may be narrow. Flag for manual enrichment. |
| Phase 4 still below Level 3 | Files too generic. Target Phase 2 at weakest section. |
| Decomposition validation fails | Restore from snapshot. Check for partial extractions. |
Deep References
All references are >100 lines of domain-specific content. Load as directed by sections above.
| Signal | Reference | Lines |
|---|---|---|
| Phase 3-4: statistical gates, sample adequacy, fairness | references/rigor-gates.md | 378 |
| Phase 5: report templates (A/B, trend, distribution, cohort) | references/output-templates.md | 489 |
| Failure mode recognition (p-hacking, survivorship, Simpson's) | references/preferred-patterns.md | 240 |
| Classifying reference depth Level 0-3 | references/quality-rubric.md | 173 |
| Writing new reference files | references/reference-file-template.md | 166 |
| Running headless decomposition | references/decomposition-prompt.md | 205 |
| Running headless enrichment | references/enrichment-prompt.md | 117 |


