CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

harness-ci

Load to wire, tune, or debug a repo's changed-file CI skip.

Quality

63%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Low

Low-risk findings worth noting

Fix and improve this skill with Tessl

tessl review fix ./.agents/skills/harness-ci/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

57%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

The body is dense with genuinely novel, high-value domain content: concrete commands, explicit fail-closed invariants, refusal causes with remedies, and real wiring pitfalls stated as rules. Its weaknesses are structural — a ~450-word single-paragraph wall, reference-grade detail inlined instead of pushed to wiring.md, two dead references (README.md, templates/ci.yml), and no laid-out step sequence for the classify-to-aggregate workflow.

Suggestions

Split the change-class mega-paragraph into a short summary plus a bulleted reference (per-class causes, ownership rules, queue-only behavior) — or move that detail into references/wiring.md § Per-lane verdicts and cite it, the same way the wiring shapes already are.

Lay out the main workflow as a numbered sequence in the body (run harness-only/change-class → read the verdict line and stderr causes → wire the aggregate with aggregate-needs → handle refusal causes), keeping the fail-closed rules as the checkpoint layer.

Fix the dead references: either include README.md and templates/ci.yml in the skill bundle or point to them where they actually live (e.g. the repository URL in frontmatter), since both are cited as consumer-facing entry points.

Show the aggregate-needs invocation as an actual command example with realistic arguments (a sample `toJSON(needs)` snippet, classifier job name, and `--skippable`/`--waiver` flags) instead of describing the flags in prose.

DimensionReasoningScore

Conciseness

The body contains no explanations of concepts Claude already knows — every sentence carries skill-specific domain information, which keeps it out of anchor 2's "unnecessary explanations or padded sections". But it could be tightened enormously: the change-class paragraph ("`scripts/change-class` answers the wider question every gate, workflow and lane asks...") is a single ~450-word run-on with deeply nested clauses ("the revision the base end of the range resolves to included"), and much of its detail (queue-only internals, lane declarations, fallback fetch mechanics) duplicates material that `--help` and references/wiring.md already carry. This fits anchor 3's "mostly efficient but... could be tightened" rather than anchor 4, because the tightening needed is structural and substantial, not minor.

3 / 5

Actionability

The body gives a copy-pasteable invocation (".agents/skills/harness-ci/scripts/harness-only --event pull_request --base \"$BASE\" --head \"$HEAD\""), concrete mode flags ("--mode render-candidate", "--mode docs", "change-class --output FILE", "--lanes-from DIR", "--queue-only-default true"), the aggregate-needs flag set ("--skippable", "--waiver", "--lane JOB=LANE"), explicit exit-code and stream contracts ("exit `2` is a wiring error that prints no verdict"), and specific GitHub Actions patterns ("needs.changes.result != 'success'"). This matches anchor 4 ("mostly executable guidance; concrete code or commands with minor gaps"); it falls short of anchor 5 because the aggregate-needs call is described in prose rather than shown as a runnable command line, and several behaviors are only reachable via `--help` deferral.

4 / 5

Workflow Clarity

Validation checkpoints are a strength — the skill is built around fail-closed semantics, refusal causes with remedies ("cause=source-mirror-missing verb=source operation=refresh. The caller refreshes its sources before retrying"), and unmeasured-render handling — so this is not the validation-missing case of anchor 2. But the main workflow (run classifier, read the verdict line, wire the aggregate, handle refusals) is never laid out as a sequence: the body is organized by topic (modes, manifest schema, caller ownership, wiring pitfalls, verdict reading) and the wiring section is a list of failure rules rather than ordered steps. That matches anchor 3 ("sequence present but checkpoints missing or implicit" — here the sequence is implicit) rather than anchor 4's "clear sequence with most checkpoints present".

3 / 5

Progressive Disclosure

The one-level-deep references that exist are well signaled and real: references/wiring.md (427 lines) contains all three anchor-linked sections cited ("The endpoint expressions", "Per-lane verdicts", "The CI context"), and every script path named in the body (scripts/change-class, scripts/harness-only, scripts/aggregate-needs, scripts/lib/change-class.sh) exists in the bundle. But README.md and templates/ci.yml are referenced and absent from the bundle, and a large amount of reference-grade detail — the change-class mega-paragraph, the manifest-schema rules, the fallback-ownership mechanics — is inlined in SKILL.md where it belongs in wiring.md or `--help`. This fits anchor 3 ("some structure but could be better organized; content that should be separate is inline") rather than anchor 4.

3 / 5

Total

13

/

20

Passed

Description

57%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

The description targets a genuinely distinct niche with an explicit load-when trigger, but it front-loads user-intent verbs (wire/tune/debug) while leaving the concrete capabilities in a separate `summary` field the description evaluator does not score. As a standalone description it reads as domain-plus-intent without a clear statement of what the skill actually does, and its natural trigger vocabulary is thin.

Suggestions

Merge the concrete capabilities from the `summary` field into the `description` itself — e.g. "Classifies a CI diff as harness-only or docs-only, names its change class, and validates classifier-authorized skipped jobs in required-context aggregators. Load to wire, tune, or debug a repo's changed-file CI skip." — so the what is explicit alongside the when.

Add natural trigger phrases users would actually say, such as "skip CI", "docs-only changes", "skip product checks", or "merge queue required checks", to broaden trigger_term_quality beyond the current three verbs.

State at least one or two concrete operations (e.g. "classifies diffs", "validates skipped jobs") in the description rather than relying on intent verbs like "wire, tune, or debug".

DimensionReasoningScore

Specificity

"Load to wire, tune, or debug a repo's changed-file CI skip" names a specific domain ("changed-file CI skip") and three actions ("wire, tune, or debug"), but the verbs are user-intent verbs rather than concrete operations — the actual capabilities (classifying diffs as harness-only/docs-only, naming a change class, validating skipped jobs) live in the separate `summary` field, not the description. It matches anchor 3 ("names domain and 1-2 concrete actions, but not comprehensive") better than anchor 4, whose examples list specific concrete operations like "extracts text, fills forms, converts pages".

3 / 5

Completeness

The "when" is explicit ("Load to wire, tune, or debug..." is a use-when trigger), but the "what" is only implied: the description says what the skill acts on ("a repo's changed-file CI skip") without stating what it does — classification, change classes, and aggregator validation appear only in the `summary` field. Anchor 3 ("clear 'what' but 'when' missing or weakly implied") is the closest fit with the roles reversed; it does not reach anchor 4 because the what is not clearly stated within the description itself.

3 / 5

Trigger Term Quality

The description carries some natural terms a user would say — "CI skip", "debug", "changed-file" — but misses common variations and synonyms such as "skip tests", "docs-only changes", "harness-only", "merge queue", or "required checks". This matches anchor 3 ("some relevant keywords but missing common variations or synonyms"), not anchor 4's "good keyword coverage; a few natural terms missing" — the missing set here is larger than a few.

3 / 5

Distinctiveness Conflict Risk

"a repo's changed-file CI skip" is a narrow, well-defined niche with essentially no overlap risk against other skills — a user asking about this is unambiguously in the right place. This clearly matches anchor 5 ("clear niche with distinct triggers; minimal conflict risk") and is not the vague, broad wording of anchors 2-3.

5 / 5

Total

14

/

20

Passed

Validation

75%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 12 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

metadata_version

'metadata.version' is missing

Warning

frontmatter_unknown_keys

Unknown frontmatter key(s) found; consider removing or moving to metadata

Warning

relative_links

Relative link issues: 2 missing, 4 suspicious

Warning

referenced_paths_exist

Referenced path issues: 2 deeper-than-1-level

Warning

Total

12

/

16

Passed

Repository

vanillagreencom/kendex

Path

.agents/skills/harness-ci/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.