Tech Evaluation
Investigate a candidate library, dependency, or file format against a fixed question set, and end with exactly one
verifiable recommendation -- never "it depends." A production decision recorded without cited evidence is a guess,
not a finding; this skill exists to close that gap. Produces a schema-validated structured record plus a
human-readable write-up in the project's dated findings directory (see
Finding Record Layout for the exact path and shape).
Prerequisites
- A concrete technology to evaluate (an npm package, a file format, a spec) and, ideally, the alternatives already
ruled out or being compared against.
- This skill REQUIRES the
create-context-file skill to persist the human-readable finding, and the context-index
skill to regenerate the index afterwards -- do not run this evaluation if neither is available in the current
environment.
- A subagent capable of both web research and reading this repository's own source (to check integration/bundling
fit against real code, not just documentation).
Mindset
A verdict without a cited source is a guess, not a finding -- the schema enforces at least one piece of evidence
per question for exactly this reason. needs_more_research is a legitimate recommendation when the evidence is
genuinely inconclusive, but it MUST NEVER be used to avoid picking a side when the evidence already points one
way. One recommendation, not a comparison table with no conclusion: the point of this skill is to convert
"it depends" into a decision someone can act on in production.
When to Use
- Choosing between candidate crates/dependencies for a specific integration point (e.g. a CLI-parser
decision such as
usage/usage-rs vs. clap, recorded in a dated plan under .context/plans/).
- A plan or ADR decision hinges on a factual claim about a library that keeps getting revisited because nobody
wrote the answer down with evidence.
- The user explicitly asks to "investigate," "research," or "properly evaluate" a technology option mid-decision.
When NOT to Use
- Purely subjective preference calls with no verifiable claims to check -- there's nothing for the schema to
validate.
- A technology choice already settled by an existing ADR -- supersede that ADR instead, don't re-litigate via a
finding.
- One-line lookups ("what's the latest version of X") -- this is for decisions worth a citation trail, not a
quick fact check.
Workflow
Fix the question set. By default, use five dimensions (correctness, integration_fit, footprint,
maturity, practical_fit); PREFER substituting or adding a dimension when the default five don't fit the
technology under review (e.g. a file-format choice may need a tooling dimension instead of integration_fit).
The schema requires at least one question, not exactly five, so adapt this UNLESS the default set already
covers the decision.
Dispatch a research subagent (foreground -- the result is needed before continuing). Give it:
- The concrete technology and its exact identifier (npm package name, repo URL, spec link).
- The alternatives already considered and why each was ruled out, so it doesn't re-litigate settled ground.
- The question set from step 1, verbatim.
- An instruction to cite evidence for every verdict -- a file path with line number, a URL, or a specific doc
section, never "the docs" or "general knowledge." AVOID trusting a claim about this repository's own
constraints (this crate's
Cargo.toml pin, the mise.toml toolchain, an existing call site) without reading
the actual source first -- a generic claim about "how a crate usually behaves" is not evidence about this
project's actual dependency graph or toolchain.
- The scaffold at
assets/templates/tech-evaluation-scaffold.yaml, and an instruction to write its output as
YAML matching that shape to a path you specify.
- An explicit instruction that the final recommendation MUST be exactly one of
adopt / keep_current /
reject / needs_more_research, with a non-hedging rationale and a single imperative next action.
Run the validator and check its exit code before trusting the YAML:
scripts/validate-tech-evaluation.sh <path-to-yaml>
# exit 0 → schema-valid, safe to render into a finding
# exit 1 → missing evidence, an out-of-enum verdict, or a too-short rationale
If validation fails, send the YAML back to the subagent rather than manually patching it into shape -- a
pitfall this schema exists specifically to catch.
Render the human-readable finding with the context-file skill (type: FINDING, dated and filed under the
project's findings directory). See Finding Record Layout for the exact
path convention and section layout expected.
Regenerate the context index (context-index skill) so the finding is discoverable, and confirm the new
file is present in the regenerated index before reporting the evaluation as complete.
If the evaluation feeds a plans decision or an ADR, link the finding from there via related: -- this skill
produces evidence, not a decision record in its own right.
Anti-Patterns
NEVER accept a recommendation with an empty or single-word rationale.
WHY: The schema's minLength on rationale exists because "it's better" is not a rationale -- it gives the
next reader nothing to check the reasoning against.
# BAD
rationale: "seems fine"
# GOOD
rationale: >
X does not pull in a runtime dependency on libclang (confirmed from its Cargo.toml), unlike the
alternative, which would break the project's cross-compilation targets in mise.toml.
NEVER let a subagent answer from memory when the claim concerns this repository.
WHY: A generic claim about "how crate X usually behaves" is not evidence about this project's actual
Cargo.toml dependency graph or mise.toml toolchain -- verify against the real files, not training data.
BAD: Trusting "crate X is pure Rust, no native deps" without checking.
GOOD: Instructing the subagent to read the actual Cargo.toml/Cargo.lock and cite the file/line.
NEVER skip the schema validation step because the YAML "looks right."
WHY: The validator catches exactly the failure modes a rushed read misses.
GOOD: ALWAYS run validate-tech-evaluation.sh before rendering the human-readable finding.
References
| Topic |
Reference |
When to Use |
| Question dimensions in depth, with worked examples per dimension |
Question Dimensions |
Choosing or substituting a dimension for an unusual technology (file format, spec, protocol) |
| Finding record layout, section-by-section |
Finding Record Layout |
Rendering the human-readable write-up in step 4 |
| Template |
assets/templates/tech-evaluation-scaffold.yaml |
Structuring the subagent's YAML output |
| Schema |
assets/schemas/tech-evaluation.schema.json |
Understanding what the validator checks |
| Validation script |
scripts/validate-tech-evaluation.sh |
Running step 3 |
This skill follows the repository convention of YAML template + JSON Schema + validation script for structured
artifacts (see plan-review's review-report trio for the precedent this one is modelled on).
1---2name: tech-evaluation3description: Investigate a candidate library, dependency, or file format against a fixed question set and end with exactly one cited recommendation (adopt / keep_current / reject / needs_more_research) -- never "it depends." Validates the structured output against a JSON schema before writing a human-readable finding. Use when choosing between candidate npm packages, dependencies, or file formats for a specific integration point, or when a plan or ADR decision hinges on an unverified factual claim about a library (does it escape by default, does it bundle cleanly, is it maintained). Do NOT use for one-line version lookups, purely subjective preference calls with no verifiable claim, or a technology choice already settled by an existing ADR -- supersede the ADR instead. Triggers: "evaluate this library", "investigate this dependency", "compare X vs Y", "properly evaluate this technology", "which format should we use", "is this package maintained".4---56# Tech Evaluation78Investigate a candidate library, dependency, or file format against a fixed question set, and end with exactly one9verifiable recommendation -- never "it depends." A production decision recorded without cited evidence is a guess,10not a finding; this skill exists to close that gap. Produces a schema-validated structured record plus a11human-readable write-up in the project's dated findings directory (see12[Finding Record Layout](references/finding-record-layout.md) for the exact path and shape).1314## Prerequisites1516- A concrete technology to evaluate (an npm package, a file format, a spec) and, ideally, the alternatives already17 ruled out or being compared against.18- This skill REQUIRES the `create-context-file` skill to persist the human-readable finding, and the `context-index`19 skill to regenerate the index afterwards -- do not run this evaluation if neither is available in the current20 environment.21- A subagent capable of both web research and reading this repository's own source (to check integration/bundling22 fit against real code, not just documentation).2324## Mindset2526A verdict without a cited source is a guess, not a finding -- the schema enforces at least one piece of evidence27per question for exactly this reason. `needs_more_research` is a legitimate recommendation when the evidence is28genuinely inconclusive, but it MUST NEVER be used to avoid picking a side when the evidence already points one29way. One recommendation, not a comparison table with no conclusion: the point of this skill is to convert30"it depends" into a decision someone can act on in production.3132## When to Use3334- Choosing between candidate crates/dependencies for a specific integration point (e.g. a CLI-parser35 decision such as `usage`/`usage-rs` vs. `clap`, recorded in a dated plan under `.context/plans/`).36- A plan or ADR decision hinges on a factual claim about a library that keeps getting revisited because nobody37 wrote the answer down with evidence.38- The user explicitly asks to "investigate," "research," or "properly evaluate" a technology option mid-decision.3940## When NOT to Use4142- Purely subjective preference calls with no verifiable claims to check -- there's nothing for the schema to43 validate.44- A technology choice already settled by an existing ADR -- supersede that ADR instead, don't re-litigate via a45 finding.46- One-line lookups ("what's the latest version of X") -- this is for decisions worth a citation trail, not a47 quick fact check.4849## Workflow50511. **Fix the question set.** By default, use five dimensions (`correctness`, `integration_fit`, `footprint`,52 `maturity`, `practical_fit`); PREFER substituting or adding a dimension when the default five don't fit the53 technology under review (e.g. a file-format choice may need a `tooling` dimension instead of `integration_fit`).54 The schema requires at least one question, not exactly five, so adapt this UNLESS the default set already55 covers the decision.56572. **Dispatch a research subagent** (foreground -- the result is needed before continuing). Give it:58 - The concrete technology and its exact identifier (npm package name, repo URL, spec link).59 - The alternatives already considered and why each was ruled out, so it doesn't re-litigate settled ground.60 - The question set from step 1, verbatim.61 - An instruction to cite evidence for every verdict -- a file path with line number, a URL, or a specific doc62 section, never "the docs" or "general knowledge." AVOID trusting a claim about this repository's own63 constraints (this crate's `Cargo.toml` pin, the `mise.toml` toolchain, an existing call site) without reading64 the actual source first -- a generic claim about "how a crate usually behaves" is not evidence about this65 project's actual dependency graph or toolchain.66 - The scaffold at `assets/templates/tech-evaluation-scaffold.yaml`, and an instruction to write its output as67 YAML matching that shape to a path you specify.68 - An explicit instruction that the final recommendation MUST be exactly one of `adopt` / `keep_current` /69 `reject` / `needs_more_research`, with a non-hedging rationale and a single imperative next action.70713. **Run the validator and check its exit code before trusting the YAML:**7273 ```bash74 scripts/validate-tech-evaluation.sh <path-to-yaml>75 # exit 0 → schema-valid, safe to render into a finding76 # exit 1 → missing evidence, an out-of-enum verdict, or a too-short rationale77 ```7879 If validation fails, send the YAML back to the subagent rather than manually patching it into shape -- a80 pitfall this schema exists specifically to catch.81824. **Render the human-readable finding** with the `context-file` skill (`type: FINDING`, dated and filed under the83 project's findings directory). See [Finding Record Layout](references/finding-record-layout.md) for the exact84 path convention and section layout expected.85865. **Regenerate the context index** (`context-index` skill) so the finding is discoverable, and confirm the new87 file is present in the regenerated index before reporting the evaluation as complete.88896. If the evaluation feeds a plans decision or an ADR, link the finding from there via `related:` -- this skill90 produces evidence, not a decision record in its own right.9192## Anti-Patterns9394**NEVER** accept a recommendation with an empty or single-word rationale.95**WHY:** The schema's `minLength` on `rationale` exists because "it's better" is not a rationale -- it gives the96next reader nothing to check the reasoning against.9798```yaml99# BAD100rationale: "seems fine"101102# GOOD103rationale: >104 X does not pull in a runtime dependency on libclang (confirmed from its Cargo.toml), unlike the105 alternative, which would break the project's cross-compilation targets in mise.toml.106```107108**NEVER** let a subagent answer from memory when the claim concerns this repository.109**WHY:** A generic claim about "how crate X usually behaves" is not evidence about this project's actual110`Cargo.toml` dependency graph or `mise.toml` toolchain -- verify against the real files, not training data.111**BAD:** Trusting "crate X is pure Rust, no native deps" without checking.112**GOOD:** Instructing the subagent to read the actual `Cargo.toml`/`Cargo.lock` and cite the file/line.113114**NEVER** skip the schema validation step because the YAML "looks right."115**WHY:** The validator catches exactly the failure modes a rushed read misses.116**GOOD:** ALWAYS run `validate-tech-evaluation.sh` before rendering the human-readable finding.117118## References119120| Topic | Reference | When to Use |121| --- | --- | --- |122| Question dimensions in depth, with worked examples per dimension | [Question Dimensions](references/question-dimensions.md) | Choosing or substituting a dimension for an unusual technology (file format, spec, protocol) |123| Finding record layout, section-by-section | [Finding Record Layout](references/finding-record-layout.md) | Rendering the human-readable write-up in step 4 |124| Template | [assets/templates/tech-evaluation-scaffold.yaml](assets/templates/tech-evaluation-scaffold.yaml) | Structuring the subagent's YAML output |125| Schema | [assets/schemas/tech-evaluation.schema.json](assets/schemas/tech-evaluation.schema.json) | Understanding what the validator checks |126| Validation script | [scripts/validate-tech-evaluation.sh](scripts/validate-tech-evaluation.sh) | Running step 3 |127128This skill follows the repository convention of YAML template + JSON Schema + validation script for structured129artifacts (see `plan-review`'s `review-report` trio for the precedent this one is modelled on).