Community and independent Tools
- Community catalog: reusable integrations are maintained in the independent community-tools repository and released under their own package versions.
- Anywhere else: a project-local Tool or independently distributed package. Its author owns releases, license, compatibility claims, and support.
tool-packs/ directory in this repository contains framework fixtures used
to prove the open contract. Those fixtures are not the community catalog.
What a package contains
The package’s
firedrill metadata identifies layer: "tool-pack", the declaration
path, and lifecycle (active, deprecated, or revoked). It exports
./package.json. Declaration paths, behavior dependencies, starter data,
conformance files, and app assets must stay inside the package. Package and Tool
manifest versions must agree. Unknown engine/source versions fail clearly.
Normative machine-readable definitions ship with the implementation:
@firedrill/compiler/schema/tool-source: authored declaration.@firedrill/compiler/schema/installed-tool-package: npm metadata envelope.@firedrill/contracts/schema/tool-package-manifest: semantic manifest.@firedrill/cli/schema/tool-index.json: optional discovery metadata.
Behavior, not transport, is the reusable unit
One operation can be called through direct functions, HTTP, MCP, or CLI bindings. Provider-shaped HTTP codecs and connection aliases adapt existing clients at the boundary. UI-backed Tools use these same operations. No Tool is required to provide every transport or a UI. Declare only the surfaces actually supplied. Mutations, expected errors, permissions, virtual time, seeded randomness, events, and scheduled consequences use the world context and ordered evidence. SQLite holds synthetic surrounding-service state; it does not replace the tested agent’s own database. Several independently owned Tools can coexist in one world. Consumer scenarios and test-side overrides remain separate from package source. Tools are trusted local code. Import restrictions, a schema-valid manifest, or a passing conformance suite do not create a security sandbox.Make compatibility claims precise
tool inspectestablishes the selected declaration and source without loading its behavior.tool validateloads the implementation and checks the executable surface.tool testruns declared conformance drills twice, checking assertions, declared coverage, resulting state, and repeatable activity.- A real-client compatibility claim additionally names an exact client version, supported calls, configuration seam, tested flows, and omissions.
Install, compose, and share
Create a standalone package withfiredrill tool create <id> --package --root <dir>.
Validate and exercise it before sharing. Consumers use tool add <source> --install
for npm, Git, or a local package; acquisition pins the source and disables lifecycle
scripts. tool add <installed-name> remains an offline selection-only path.
Package-manager manifests/locks and any .firedrill-tools/ vendored source belong
in version control. Runtime .firedrill/ databases and reports do not. After
installation, starting and testing the world work offline unless the customer’s
agent itself needs a model or another explicitly configured external service.
Publish from your own repository or share a reviewed archive. Optionally maintain
an index using the discovery contract. Indexing never transfers
source ownership, supplies a license, certifies a package, or silently upgrades it.
See installation details for exact selector and trust rules.