TNT Threat Navigation Toolkit is a generic, defensive, Mythos-inspired repository review
toolkit built around:
- Pi for operator workflows
- RLM for recursive code exploration
- one discovery model for Roadrunner
- one triage model for Coyote
It is designed for maintainers and internal security teams reviewing source trees. It does not generate exploit payloads or automate unpublished vulnerability discovery.
Supported:
- repository ranking and focused source review
- maintainer-grade triage
- machine-readable JSON and Markdown reporting
- optional replay of already-public cases using checked-in manifests
Not supported:
- weaponization
- shellcode or payload generation
- autonomous discovery or disclosure of unpublished vulnerabilities
Recommended defaults:
- Roadrunner:
Qwen3.5-27B - Coyote:
GLM-5.1
Why this split:
- Roadrunner benefits from strong code-following and tool-using behavior during recursive search.
- Coyote benefits from deliberate reasoning for deduplication, severity, and disposition.
Everything is configurable through environment variables and CLI flags.
Important:
ROADRUNNER_MODELandCOYOTE_MODELmust match the model id exposed by your local OpenAI-compatible server.- If your local server exposes an alias such as
mitko, use that alias in the harness configuration even if the underlying weights are Qwen or GLM.
python/: scanner, ranking, report writer, optional public-case verifiernode/: Pi extension, commands, tool wrappers, local provider registrationpublic-cases/: optional manifests for already-public advisories or fixesscripts/: bootstrap helpers and non-interactive verifier.pi/: project-local Pi extension and skill
Defaults:
ROADRUNNER_ENDPOINT=http://127.0.0.1:8000/v1ROADRUNNER_MODEL=Qwen3.5-27BCOYOTE_ENDPOINT=http://127.0.0.1:8001/v1COYOTE_MODEL=GLM-5.1
Optional:
HARNESS_RUNTIME_ROOT=/path/to/runtimeOPENAI_API_KEY=local
You can start from .env.example.
To inspect what your local endpoints actually expose, run:
./scripts/check-local-endpoints.shBy default, runtime artifacts are written under:
<target-repo>/.security-harness/
Python:
cd python
uv syncNode:
cd node
PATH="$(../scripts/ensure-node20.sh --print-bin):$PATH"
npm installIf you want Pi to operate directly inside a target repository, symlink this
repo's .pi/ directory into that target repository:
ln -s /path/to/rlm-defense-harness/.pi /path/to/target-repo/.piThen start Pi from the target repository root:
cd /path/to/target-repo
PATH="$("/path/to/rlm-defense-harness/scripts/ensure-node20.sh" --print-bin):$PATH"
npx @mariozechner/pi-coding-agentOr use the helper:
cd /path/to/target-repo
/path/to/rlm-defense-harness/scripts/run-pi.shThe helper bootstraps Node 20 and launches Pi, but Pi still needs .pi/ in the
target repository to discover the extension and skill.
The harness slash commands themselves do not require a Claude API key. They call the configured local endpoints directly.
Available Pi commands:
/security-scan current/security-scan current <focus-path> [more focus paths...] [--file-budget N] [--rlm-timeout SEC] [--local-repl]/security-scan public-case <case-id>/security-status/coyote-triage <report.json|basename|run-id>
Examples:
/security-scan current
/security-scan current src/network
/security-scan current src/network/parser.c --file-budget 1 --rlm-timeout 45
/coyote-triage scan-abc123
Rank files:
uv run --directory python security-harness rank-files --repo-root /path/to/target-repoRun a scan:
uv run --directory python security-harness --json scan \
--repo-root /path/to/target-repo \
--mode current \
--file-budget 20 \
--roadrunner-endpoint "$ROADRUNNER_ENDPOINT" \
--roadrunner-model "$ROADRUNNER_MODEL"Verify an already-public case:
uv run --directory python security-harness --json verify-public-case \
--repo-root /path/to/target-repo \
--case-id my-public-caseUse the non-interactive verifier when you want a single PASS or FAIL summary:
./scripts/verify-harness.sh --repo-root /path/to/target-repoCommon options:
./scripts/verify-harness.sh \
--repo-root /path/to/target-repo \
--focus-path src/network \
--file-budget 10 \
--rlm-timeout 45
./scripts/verify-harness.sh \
--repo-root /path/to/target-repo \
--case-id published-parser-fixThe verifier performs:
- Roadrunner endpoint preflight
- Coyote endpoint preflight
- current-tree scan on the selected target repository
- Coyote triage on the resulting report
- optional public-case replay when
--case-idis supplied - optional historical-tree scan when
--historical-repo-rootis supplied
Each run writes:
- JSON report
- Markdown report
Important fields:
request.focus_pathscandidatestriaged_findingsscan_failurestoken_usage.roadrunnerreport_paths
Interpretation:
candidates = 0andscan_failures > 0: Roadrunner did not complete cleanlycandidates = 0andscan_failures = 0with non-emptytoken_usage.roadrunner: Roadrunner ran but found nothingtriaged_findings > 0: Coyote ran and wrote decisions
public-cases/ is optional. Only add manifests for already-public fixes or
advisories.
Start from:
public-cases/example-public-case.template.json
Python tests:
cd python
uv run pytest -qNode tests:
cd node
PATH="$(../scripts/ensure-node20.sh --print-bin):$PATH"
npm test