.agents/skills/synthesize/SKILL.md
Merge multiple analysis artifacts into a single coherent report with provenance tracking. Reads existing artifacts from /deep-research, /analyze, and /compare.
npx skillsauth add tkstang/open-agent-toolkit synthesizeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Merges multiple analysis artifacts (from /deep-research, /analyze, and /compare) into a single coherent report with provenance tracking. Sits at the end of the pipeline -- consuming outputs from these artifact-producing skills. Reads existing artifacts only; does not perform new research or dispatch sub-agents.
Use when:
Don't use when:
Parse from $ARGUMENTS:
At least one directory or file path is required.
Print this banner once at start:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
/synthesize
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Then print step indicators before beginning work:
[1/6] Parsing arguments...[2/6] Discovering artifacts...[3/6] Classifying inputs and selecting output schema...[4/6] Extracting findings and provenance...[5/6] Reconciling across sources...[6/6] Producing output...For long-running operations (reading many artifacts), print a start line and a completion line:
→ Reading: {filename}...
→ Complete.
Keep it concise; don't print a line for every shell command.
[1/6] Parsing arguments...
Parse from $ARGUMENTS:
/ or pointing to a directory, use directory mode.If no paths are provided, ask the user for clarification:
AskUserQuestionThe prompt should ask: "Please provide a directory path or file paths to the artifacts you want to synthesize."
[2/6] Discovering artifacts...
Directory mode:
Scan the directory for .md files. For each file, read its YAML frontmatter and filter by the presence of all five required artifact keys (skill, schema, topic, model, generated_at). Only files with the complete artifact frontmatter contract are included.
Artifact frontmatter contract keys used for auto-detection:
| Key | Purpose |
| -------------- | -------------------------------------------- |
| skill | Which skill produced the artifact (required) |
| schema | Schema type used (required) |
| topic | Human-readable topic (required) |
| model | Model identifier slug (required) |
| generated_at | ISO date of generation (required) |
Report discovered artifacts:
→ Found N artifacts:
- {filename} (skill: {skill}, schema: {schema}, topic: {topic})
- ...
If no artifacts are found, inform the user and stop:
→ No artifacts with valid artifact frontmatter found in {directory}. Nothing to synthesize.
Explicit mode:
Read specified file paths directly. Validate that each file exists and contains artifact frontmatter. Warn and skip files that lack any of the required artifact frontmatter keys (skill, schema, topic, model, generated_at) — all five are required for both discovery modes.
If fewer than 2 valid artifacts are found, ask the user to confirm they want to proceed (synthesis of a single artifact produces limited value).
[3/6] Classifying inputs and selecting output schema...
Examine the schema values across all discovered artifacts:
| Input Mix | Output Schema | Behavior |
| ----------- | ------------------------------- | ------------------------------------------------------------------------------ |
| Homogeneous | Input schema + synthesis fields | All artifacts share the same schema; output extends it with synthesis sections |
| Mixed | synthesis (generic wrapper) | Artifacts use different schemas; output uses a generic synthesis structure |
Log the classification:
→ Input schemas: {list of unique schema values}
→ Output schema: {selected schema}
Superset output schema fields:
The output artifact includes all fields from the input schema (for homogeneous inputs) plus these synthesis-specific additions:
| Section | Purpose | | --------------------- | ---------------------------------------------------------- | | Source Agreement | Findings where multiple sources converge (high confidence) | | Contradictions | Points where sources disagree, with lean and rationale | | Unique Insights | Findings that appear in only one source | | Provenance Table | Source tracking: file, skill, model, date for each input | | Synthesis Methodology | How reconciliation was performed, what was prioritized |
[4/6] Extracting findings and provenance...
For each source artifact:
skill, model, generated_at, and schema for attribution.Print progress per artifact:
→ Reading: {filename}...
→ Complete.
Build an internal working set of:
[5/6] Reconciling across sources...
Apply the following reconciliation protocol:
Agreements:
Contradictions:
Deduplication:
[6/6] Producing output...
Artifact output (default):
Write synthesis document with the following structure:
Frontmatter:
---
skill: synthesize
schema: synthesis
topic: '{descriptive topic derived from input artifacts}'
model: { self-detected model identifier }
generated_at: { today's date }
source_count: { number of input artifacts }
---
Document structure:
Executive Summary: Unified overview of synthesized findings. Lead with the strongest conclusions (those with multi-source agreement).
Synthesis Methodology: How many artifacts were consumed, what schemas were represented, reconciliation approach used.
Source Agreement: Findings where multiple sources converge. Group by theme. Cite contributing sources.
Contradictions: Points of disagreement. For each: both positions, evidence for each, lean direction, and explicit note that the lean is not decided fact.
Unique Insights: Findings from individual sources not corroborated elsewhere. Attribute to source.
Consolidated Recommendations: Merged recommendations across all sources, deduplicated and prioritized.
Provenance Table: Tabular record of all input artifacts.
| Source File | Skill | Schema | Model | Generated At | | ----------- | ------- | -------- | ------- | ------------ | | {path} | {skill} | {schema} | {model} | {date} |
Sources & References: Any references cited by the input artifacts, consolidated.
Model-tagged filename: {topic-slug}-synthesis-{model-id}.md (e.g., event-driven-architecture-synthesis-opus-4-6.md)
Output destination resolution:
If an explicit output path was provided in $ARGUMENTS, use it directly — no prompt.
Otherwise, determine a default suggestion:
.oat/ at repo root (project-level OAT) → suggest .oat/repo/analysis/~/.oat/ (user-level OAT) → suggest ~/.oat/analysis/Then ask the user via AskUserQuestion (Claude Code), structured user-input tooling (Codex), or equivalent:
"Where would you like to write the synthesis? (default: {suggested path})"
Inline output (--inline flag):
Produce a condensed summary directly in the conversation:
Do not write a file when --inline is specified.
/synthesize research-output/
/synthesize event-driven-opus-4-6.md event-driven-analysis-sonnet-4.md
/synthesize research-output/ --inline
Synthesize all the research artifacts in the research/ directory into a single report.
Merge the deep-research and analyze outputs I just generated.
No artifacts found in directory:
.md files with skill frontmatter.Only one artifact found:
Mixed schemas produce generic output:
synthesis wrapper.Contradictions cannot be resolved:
--inline flag detected--inline is specified (no file written)documentation
Use when OAT implementation changes and repository reference docs must be synchronized. Updates .oat/repo/reference to match current behavior.
testing
Use when the user questions or suspects an agent claim is wrong. Adversarially gathers evidence to verify or refute the claim using the best sources available in the current environment.
tools
Use when prioritizing backlog work or evaluating a roadmap. Produces value-effort ratings, dependency mapping, and execution recommendations.
documentation
Use when preparing a shipping digest or weekly/biweekly wrap-up summarizing OAT projects and merged PRs over a time window. Reads local summary files and GitHub PR metadata; writes a version-controlled markdown report.