trailmark

Builds and queries multi-language source code graphs for security analysis.

Updated Apr 5, 2026
One-click install
npx skills add https://github.com/marumo333/atrox --skill trailmark-marumo333
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: trailmark
Source: https://github.com/marumo333/atrox/tree/main/.claude/skills/trailofbits/plugins/trailmark/skills/trailmark
Command: npx skills add https://github.com/marumo333/atrox --skill trailmark-marumo333

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires trailmark, and includes references (resource) components.

What problem does it solve? Security auditors and engineers reviewing unfamiliar or polyglot codebases struggle to map call paths, attack surface, and taint flow by reading files manually. Trailmark parses source code into a directed graph of functions, classes, and calls so security-relevant relationships can be queried programmatically. ## Core Features & Use Cases - Code Graph Construction: Parses 16 languages (Solidity, Cairo, Circom, Rust, Go, Python, C/C++, TypeScript, and more) into a graph of nodes (functions, classes, contracts) and edges (calls, inherits, imports) with confidence levels. - Pre-Analysis Passes: Enriches the graph with blast radius estimation, entry point enumeration, privilege boundary detection, and taint propagation, exposed as annotations and named subgraphs. - Security Query API: Query callers, callees, paths between functions, complexity hotspots, and attack surface via CLI or the Python QueryEngine API. - Use Case: Before a smart contract audit, run trailmark on a Solidity repository, execute pre-analysis, and hand off the tainted and privilege-boundary subgraphs to prioritize which functions to review first. ## Quick Start Ask the AI to analyze your project directory with trailmark and list the complexity hotspots and attack surface entry points.

Frequently Asked Questions about trailmark

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I build a call graph for security analysis?▼

Run trailmark's analyze command on your target directory, or use QueryEngine.from_directory() in Python. The resulting graph supports queries like callers_of, paths_between, complexity_hotspots, and attack_surface for security review.

What languages does trailmark support for code graph analysis?▼

Trailmark supports 16 languages: Python, JavaScript, TypeScript, PHP, Ruby, C, C++, C#, Java, Go, Rust, Solidity, Cairo, Haskell, Circom, and Erlang. Specify the language with the --language flag or the language parameter in the API.

How do I trace taint propagation from user input to sensitive functions?▼

Run engine.preanalysis() to execute the taint propagation pass, which marks all nodes reachable from untrusted entrypoints. Then query the tainted subgraph with engine.subgraph("tainted") or read TAINT_PROPAGATION annotations per function.

Can trailmark analyze Rust or Solidity smart contract projects?▼

Yes, trailmark analyzes Rust and Solidity by passing the appropriate language value, such as QueryEngine.from_directory(path, language="rust") or --language solidity on the CLI. Each component of a polyglot repo should be analyzed with its correct language flag.

When should I not use a static code graph for analysis?▼

Skip trailmark for single-file scripts where reading the file directly is faster, and for runtime behavior analysis since trailmark is purely static. For mutation testing triage, use the genotoxic skill, which calls trailmark internally.

Why does trailmark report uncertain edges in the call graph?▼

Uncertain edges come from dynamic dispatch, where the exact call target cannot be resolved statically. These edges matter for security claims because type confusion bugs often hide in dynamic dispatch paths, so they should not be ignored.