CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

oss-forensics

GitHub supply-chain forensics: recovery, IOCs, reporting.

56

Quality

70%

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 ./optional-skills/security/oss-forensics/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

77%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.

A strong, highly actionable multi-agent investigation workflow with excellent validation and feedback loops, and mostly lean domain-specific content. Its main defects are a missing load-bearing bundle file (templates/forensic-report.md), unspecified evidence-store add syntax, and some redundancy across investigator sections.

Suggestions

Add the missing templates/forensic-report.md to the bundle (or point Phase 0/Phase 6 at an existing file) — as written, `cp SKILL_DIR/templates/forensic-report.md` fails and the whole workflow cannot start.

Show the exact `evidence-store.py add` invocation once (e.g., the flags for type, content, source, and content_sha256) so investigators can record evidence without guessing the CLI.

State each investigator's role boundary once in the guardrails and reference it from the investigator sections, and fold the API rate-limiting numbers into a reference file to trim the main body.

DimensionReasoningScore

Conciseness

The body is dense with genuinely non-obvious domain knowledge (force-push detection via `payload.distinct_size = 0`, the `commits/SHA` vs `git/commits/SHA` 404 trick, CDX query patterns, rate-limit budgets) and avoids explaining concepts Claude already knows. It is not a 5 because of repeated content: role boundaries are stated once in the guardrails and again per investigator, the `evidence-store.py list` invocation appears in Phases 0, 3, and 7, and the rate-limiting and ethical-use sections could be trimmed or moved to a reference.

4 / 5

Actionability

Mostly executable, copy-paste-ready commands: full git forensics pipelines, concrete GitHub REST API curl calls, CDX API URLs with parameters, and BigQuery templates with mandatory dry-run cost rules. It falls short of anchor 5 because `evidence-store.py add` is invoked repeatedly ("add via `python SKILL_DIR/scripts/evidence-store.py add`") without ever showing the actual add syntax (flags for type/content/SHA), and commands use unsubstituted placeholders (OWNER/REPO, YYYYMM, NUM) rather than worked examples.

4 / 5

Workflow Clarity

The 8 phases are explicitly sequenced with strong validation checkpoints and feedback loops: Phase 5 mechanically verifies cited evidence IDs (hard failure on missing IDs), Phase 3 verifies `content_sha256` hashes and requires 2-source verification for `[VERIFIED]`, and rejected hypotheses feed back into Phase 4 for refinement with a max-3-iteration bound. This matches anchor 5 ("Clear sequence with explicit validation steps; feedback loops for error recovery; checklists for complex processes") — the anti-hallucination guardrails function as a checklist, and the destructive/batch cap does not apply since validation is pervasive.

5 / 5

Progressive Disclosure

The body itself is structured as a proper overview — each phase points to one-level-deep, clearly-signaled references ("See [evidence-types.md](./references/evidence-types.md) for IOC taxonomy") with a Reference Materials index — but scoring against the actual bundle reveals that `templates/forensic-report.md`, referenced three times and load-bearing (Phase 0 step 3 copies it; Phase 6 populates it), does not exist in the bundle, so the workflow breaks at initialization. The four references/ files and scripts/evidence-store.py do exist, but a missing referenced file is a real navigation/integrity gap beyond anchor 4's "minor organization gaps".

3 / 5

Total

16

/

20

Passed

Description

53%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 is concise and names a genuinely distinct niche, but it reads as a terse label rather than a full description: the actions lack objects, and it entirely omits any 'Use when...' trigger guidance, capping completeness. Adding explicit trigger phrases would substantially improve it.

Suggestions

Append a 'Use when...' clause, e.g.: "Use when the user suspects a repository was compromised, mentions supply-chain attacks, force pushes, suspicious commits, or asks to recover deleted commits or extract IOCs."

Attach objects to the listed actions to sharpen specificity, e.g., "recover force-pushed/deleted commits and PRs, extract and enrich IOCs, generate evidence-cited forensic reports".

Include natural user phrasings as keywords — "was this repo compromised", "investigate owner/repo", "supply chain attack", "force push" — to improve trigger-term coverage.

DimensionReasoningScore

Specificity

"GitHub supply-chain forensics: recovery, IOCs, reporting." names the domain clearly and lists three actions, but each action is generic and unattached to an object (recovery of what — force-pushed commits? deleted PRs?), unlike anchor 4's "Extracts text from PDF files, fills forms, converts pages to images". It is above anchor 2 because it does enumerate multiple domain actions rather than minimal generic ones.

3 / 5

Completeness

The description gives a clear 'what' ("GitHub supply-chain forensics: recovery, IOCs, reporting") but contains no 'Use when...' clause or any equivalent trigger guidance, which per the judging guidelines caps completeness at 3. It is not a 2 because the 'what' is present and specific, not vague.

3 / 5

Trigger Term Quality

Terms like "GitHub", "supply-chain", "forensics", "IOCs" are relevant, but the most natural user phrasings — "compromised", "investigate this repo", "supply chain attack", "force push", "suspicious commit" — are absent, matching anchor 3 ("Some relevant keywords but missing common variations or synonyms"). It does not reach anchor 4 because the keyword set is thin (six terse terms) and misses the phrasing a user would most plausibly say.

3 / 5

Distinctiveness Conflict Risk

"GitHub supply-chain forensics" carves out a distinct niche with low overlap risk against unrelated skills. It falls short of anchor 5 because the trailing terms "recovery... reporting" are generic security-incident vocabulary that could collide with broader incident-response or code-review skills, leaving minor overlap risk (anchor 4: "Mostly distinct; minor overlap risk with closely related skills").

4 / 5

Total

13

/

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

metadata_field

'metadata' should map string keys to string values

Warning

frontmatter_unknown_keys

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

Warning

relative_links

Relative link issues: 2 missing

Warning

Total

12

/

16

Passed

Repository

NousResearch/hermes-agent

Path

optional-skills/security/oss-forensics/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.