Skip to content

Tool Registry

Overview

The tool registry is the data structure at the heart of specsmith's CI generation. It maps every project type to the exact verification tools that should be used — not generic "add your tools here" placeholders, but specific commands like cargo clippy, ruff check, vale, or claim-ref-check.

This means a Rust CLI project scaffolded by specsmith gets CI with cargo clippy, cargo test, cargo audit, and cargo fmt -- --check — not a blank YAML file.

How It Flows

scaffold.yml (type: cli-rust)
    ↓
tools.py → ToolSet(lint=["cargo clippy"], test=["cargo test"], ...)
    ↓
github.py → .github/workflows/ci.yml with real cargo commands
    ↓
verification.md.j2 → docs/governance/verification.md lists the tools
    ↓
auditor.py → specsmith audit checks CI references these tools
    ↓
doctor.py → specsmith doctor checks tools are installed locally

The 7 Tool Categories

Category Purpose Examples
lint Static analysis, style ruff, eslint, clippy, vale, clang-tidy, tflint
typecheck Type safety mypy, tsc, cargo check, cppcheck, go vet
test Unit/integration testing pytest, jest, cargo test, ctest, markdown-link-check
security Vulnerability scanning pip-audit, npm audit, cargo audit, govulncheck, tfsec
build Compilation, output cmake, cargo build, pandoc, pdflatex, docker compose
format Code/doc formatting ruff format, prettier, cargo fmt, clang-format, latexindent
compliance Domain-specific rules MISRA-C, claim-ref-check, regulation-ref-check, bom-validate

CI Metadata Per Language

For each language, specsmith stores setup information used by all three CI platforms:

Language GitHub Actions Setup Docker Image Install Cmd
Python actions/setup-python@v6 python:3.12-slim pip install -e ".[dev]"
Rust dtolnay/rust-toolchain@stable rust:latest
Go actions/setup-go@v5 golang:1.22
JavaScript/TS actions/setup-node@v4 node:20 npm ci
C# actions/setup-dotnet@v4 mcr.microsoft.com/dotnet/sdk:8.0 dotnet restore
Dart subosito/flutter-action@v2 ghcr.io/cirruslabs/flutter:latest flutter pub get
Terraform hashicorp/setup-terraform@v3 hashicorp/terraform:latest terraform init
Markdown pandoc/core:latest pip install vale mkdocs
LaTeX texlive/texlive:latest
OpenAPI actions/setup-node@v4 node:20 npm ci
Protobuf namely/protoc:latest
C/C++ gcc:latest
VHDL ghdl/ghdl:latest
Verilog verilator/verilator:latest

Overriding Tools

If the defaults don't match your project, override any category in scaffold.yml:

verification_tools:
  lint: "flake8,pylint"
  test: "unittest"
  security: "safety"

Non-overridden categories keep their registry defaults. For example, if you override lint but not test, you get your custom linter with the default test runner.

Format Check Mode

In CI, you want format tools to check (not rewrite). specsmith converts format commands to check-mode:

Format Command CI Check Mode
ruff format ruff format --check .
cargo fmt cargo fmt -- --check
prettier npx prettier --check .
gofmt test -z "$(gofmt -l .)"
clang-format clang-format --dry-run --Werror
dotnet format dotnet format --verify-no-changes

Mixed-Language Projects

Projects like backend-frontend (Python + JS) or microservices (Python + JS) have tools from multiple ecosystems. specsmith detects this and adds multiple runtime setups to CI:

# Generated for backend-frontend
steps:
  - uses: actions/setup-python@v6
  - uses: actions/setup-node@v4     # Auto-added for eslint/vitest
  - run: pip install -e ".[dev]"
  - run: npm ci                      # Auto-added
  - run: ruff check
  - run: eslint

Audit Integration

specsmith audit reads scaffold.yml, looks up the expected tools, and verifies they appear in the CI config. If your CI is missing expected tools, audit reports it. audit --fix can regenerate the entire CI config from the registry.

Doctor Integration

specsmith doctor checks if each tool in the ToolSet is actually installed on your local machine. Useful when setting up a new development environment.

Agent Tool Registry (AVAILABLE_TOOLS)

The agent tool registry is separate from the CI verification tool registry above. These tools are available to agent roles inside the agentic REPL and multi-agent DAG dispatcher.

Core File and Shell Tools (REQ-067)

Tool Description
un_shell Execute a shell command (safety-checked; destructive commands blocked)
ead_file Read a file from the repository
write_file Write/create a file
patch_file Apply a unified diff patch
list_files List files matching a glob pattern
grep Search for a string across files
git_diff Get git diff for the working tree
git_status Get git status
un_tests Run the project test suite
open_url Fetch text content from a URL
search_docs Search documentation files in the repo
emember_project_fact Store a named fact in .repo-index/facts.json

Compiler and Formatter Tools

These tools are registered in AVAILABLE_TOOLS and wired into ROLE_TOOLS for relevant agent roles. All use the @validate_json_args safety decorator; compiler invocations are gated by is_safe_command.

Tool Roles Default binary
un_gcc coder, tester, embedded-coder gcc
un_arm_gcc coder, tester, embedded-coder rm-none-eabi-gcc
un_aarch64_gcc embedded-coder arch64-linux-gnu-gcc
un_iar_compiler embedded-coder IarBuild
un_intel_compiler embedded-coder icx
un_clang_format coder, architect clang-format
un_clang_tidy reviewer, embedded-coder clang-tidy
un_vsg coder, reviewer, embedded-coder sg

Agent Roles and Tool Subsets (ROLE_TOOLS)

Each agent role receives a restricted subset of tools at spawn time (spawn_worker(role, llm_config)):

Role Tools
coder read_file, write_file, run_shell, apply_diff, run_gcc, run_arm_gcc, run_clang_format, run_clang_tidy, run_vsg
eviewer read_file, run_shell, git_diff, run_clang_tidy, run_vsg
ester read_file, run_shell, run_tests, run_gcc, run_arm_gcc
rchitect read_file, write_file, run_clang_format
esearcher read_file, search_web, search_repo
mbedded-coder All compiler tools + read_file, write_file, run_shell