Skip to content
Back to skills

Trailofbits Harness

ASecurity

Use in every Trail of Bits Skills workspace inside Harness, before any audit skill — the findings.json format the report pane is built from, which Trail of Bits skill serves which audit phase, and how their plugin features (plugin root, named sub-agents, Workflow scripts, fp-check's gates) work when their skills are linked rather than installed as plugins.

  • 1,124 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 1, 2026
ai-agentspythonrustgoc++sqlgitapisecurity

Works with

  • claude code
  • api

Security analysis

A100/100

Scanned October 1, 2026

npx -y skills add autonomous-ai/openharness --skill trailofbits-harness --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Trailofbits Harness?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Trailofbits Harness
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/autonomous-ai-trailofbits-harness/badge)](https://www.skillsdirectory.com/skills/autonomous-ai-trailofbits-harness)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: trailofbits-harness
description: Use in every Trail of Bits Skills workspace inside Harness, before any audit skill — the findings.json format the report pane is built from, which Trail of Bits skill serves which audit phase, and how their plugin features (plugin root, named sub-agents, Workflow scripts, fp-check's gates) work when their skills are linked rather than installed as plugins.
---

# A Trail of Bits audit in Harness

Trail of Bits' skills are the method; this skill only says how their work lands in the report pane
and how the plugin features they assume are provided here. It changes none of their instructions.

## findings.json

`security-audit/findings.json` is the one file you edit. `"$TOB_REPORT"` checks it, rebuilds the
pane and the Markdown report from it, and prints every entry it had to leave out and why — fix those
before moving on.

```json
{
  "spec": 1,
  "target": { "name": "shop-api", "path": ".", "commit": "3f2c9a1…", "scope": ["src/", "api/"] },
  "phase": "review",
  "final": false,
  "summary": "Markdown: what was audited, how, and the headline risks.",
  "findings": [
    {
      "id": "F-1",
      "title": "SQL query built from request input",
      "severity": "high",
      "status": "unverified",
      "category": "injection",
      "source": "static-analysis/semgrep",
      "location": [{ "file": "src/db.py", "line": 42 }],
      "description": "Markdown: what is wrong.",
      "evidence": "Markdown: the data flow, the rule that fired, the fp-check verdict and its reasons.",
      "recommendation": "Markdown: how to fix it."
    }
  ]
}
```

- `phase`: `scope` → `context` → `scan` → `review` → `verify` → `report`. The header's strip is this.
- `severity`: `high`, `medium`, `low`, `informational`, `undetermined` — Trail of Bits' own scale.
- `status`: `unverified` when found, then `confirmed` or `false-positive` after `fp-check`. False
  positives stay in the file (the report lists them as dismissed, with their evidence).
- `id`: `F-1`, `F-2`, … in the order found; never reuse one. Paths are relative to the target.
- The Markdown fields render paragraphs, `-` lists, `code`, fenced code, **bold** and *italics* — nothing else.
  Everything is escaped, so quoting hostile strings from the code is safe.
- The report is ready (`ready` in the header) only when `final` is true and nothing is `unverified`.

## Which skill serves which phase

| Phase | Trail of Bits skill (plugin) | When |
|---|---|---|
| context | `audit-context-building` | always first: understand before hunting |
| scan | `semgrep`, `codeql` when installed, `sarif-parsing` (static-analysis) | always |
| scan | `supply-chain-risk-auditor` | a lockfile or manifest is present |
| scan | `sharp-edges` | APIs, configuration and defaults that invite misuse |
| scan | `agentic-actions-auditor` | `.github/workflows/` exists |
| scan | `c-review` / `rust-review` | C/C++ / Rust code in scope |
| review | `vulnerability-triage-brocards` | triage each candidate before deep work |
| review | `variant-analysis` | a confirmed bug suggests siblings elsewhere |
| review | `differential-review` | the person asks about a change, branch or PR |
| verify | `fp-check` | every finding, before it is `confirmed` |

Turn each skill's output — SARIF, ledgers, reports — into findings.json entries, citing it in
`source`.

## Plugin features, provided here

These skills were written as Claude Code plugins. Harness links their skills into every agent, so
the plugin machinery they mention is provided like this:

- **Plugin root.** Where a skill uses `${CLAUDE_PLUGIN_ROOT}`, `${CODEX_PLUGIN_ROOT}` or
  `<plugin_root>`, it is `$TOB_SKILLS/plugins/<plugin>` for the plugin the skill belongs to. Set it
  on the command that needs it — `CLAUDE_PLUGIN_ROOT="$TOB_SKILLS/plugins/c-review" …` — and use
  that path, not a search: a search of `.` would find copies inside the audited repository.
- **Named sub-agents.** When a skill dispatches `<plugin>:<agent>` (`fp-check:poc-builder`,
  `rust-review:rust-review-worker`, `audit-context-building:function-analyzer`), start a sub-agent
  with your own sub-agent tool and give it `$TOB_SKILLS/plugins/<plugin>/agents/<agent>.md` as its
  instructions, plus the task the skill describes. Hold it to the tools that file's front matter
  lists. Where the skill runs several in parallel, run them in parallel.
- **Plugin commands.** A `/<plugin>:<command>` that a skill mentions is a Markdown file,
  `$TOB_SKILLS/plugins/<plugin>/commands/<command>.md` (`/differential-review:diff-review`): read
  it and follow it, with the arguments the person gave.
- **Workflow scripts.** Where a skill calls Claude Code's `Workflow` tool with a
  script under `<plugin_root>/workflows/`, or a command such as `/audit-context-building:audit-context`
  that is backed by one, call `Workflow` with the absolute `scriptPath`
  (`$TOB_SKILLS/plugins/<plugin>/workflows/<name>.js`) and the arguments the skill documents. An
  agent without a `Workflow` tool follows the skill's single-unit mode over each unit in scope and
  says so in the report's summary.
- **fp-check's gates.** Its plugin hooks check, before a verification ends, that every phase and
  gate was done. Here nothing runs them for you: before you set a finding `confirmed` or
  `false-positive`, read the two prompts in `$TOB_SKILLS/plugins/fp-check/hooks/hooks.json` and
  check your own work against them; a gap keeps the finding `unverified`.

## Tools

The Semgrep, pip-audit, uv and Python the skills expect are in `$TOB_BIN`; put it first on each
command's PATH: `PATH="$TOB_BIN:$PATH" semgrep --metrics=off …`. CodeQL and ripgrep are optional
here; when they are missing, the skills' own fallbacks apply (`toolchain/doctor.sh` in the package
says which are present).

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…