Enact is a verified, portable protocol for AI-executable tools. This guide will help you get started using Enact to discover, install, and run tools.
# Install globally with npm
npm install -g enact-cli
# Or with bun
bun install -g enact-cli
# Or use npx without installing
npx enact-cli --helpRun the setup wizard to configure Enact:
enact setup --globalWhen prompted, you can use the defaults:
- Registry URL:
https://siikwkfgsmouioodghho.supabase.co/functions/v1(default) - Minimum attestations:
1(default) - Maximum cache size:
1024MB (default) - Default execution timeout:
30s(default)
This creates a configuration file at ~/.enact/config.yaml.
Discover tools in the registry:
# Search by keyword
enact search "pdf"
# Search with tags
enact search "data" --tags csv,json
# List more results
enact search "api" --limit 50View detailed information about a tool:
enact learn username/toolnameThis shows:
- Description and tags
- Available versions
- Download statistics
- Trust information
- Installation command
Install tools globally or to your current project:
# Install globally (available everywhere)
enact install username/toolname --global
# Install to current project (creates .enact/tools.json)
enact install username/toolname
# Install specific version
enact install username/toolname@v1.2.0 --globalExecute an installed tool:
# Run with JSON arguments (recommended)
enact run username/toolname --args '{"input": "value"}'
# Run with arguments from a JSON file
enact run username/toolname --input-file params.json
# Run with timeout
enact run username/toolname --args '{}' --timeout 60sNote: JSON input (--args or --input-file) is recommended, especially for complex values or when automating with agents. This avoids shell escaping issues and properly handles optional parameters.
If you clone a project that uses Enact tools, install all dependencies:
cd my-project
enact installThis reads .enact/tools.json and installs all listed tools.
Tools define a default command, but you can run custom commands:
# Run the tool's default command
enact run toolname
# Execute a custom command in the tool's environment
enact exec toolname "npm test"
# Run a shell in the tool's container
enact exec toolname "/bin/bash"# List all installed tools
enact list
# List global tools only
enact list --global
# List project tools only
enact list --project
# Show what's in the cache
enact list --cacheTools can use environment variables and secrets:
# Set an environment variable
enact env set API_KEY --secret
# Set a non-secret variable
enact env set LOG_LEVEL info
# List all variables
enact env list
# Delete a variable
enact env delete API_KEYEnact uses cryptographic verification to ensure tools are authentic and haven't been tampered with.
Tools are verified through attestations - cryptographic signatures from trusted parties:
- Publishers attest when they publish
- Auditors attest after reviewing code
- Build systems attest to reproducible builds
Set your minimum attestation requirements:
# View current trust settings
enact trust list
# Require at least 2 attestations
enact config set trust.minimum_attestations 2
# Add a trusted auditor
enact trust add auditor usernameBefore installing, inspect what a tool does:
# View tool manifest and files
enact inspect username/toolname
# See specific version
enact inspect username/toolname --version v1.0.0Enact stores configuration in YAML format:
- Global:
~/.enact/config.yaml - Project:
.enact/config.yaml
Example configuration:
version: 1.0.0
trust:
minimum_attestations: 1
trusted_auditors: []
cache:
maxSizeMb: 1024
ttlSeconds: 604800 # 7 days
execution:
defaultTimeout: 30s
verbose: false
registry:
url: https://siikwkfgsmouioodghho.supabase.co/functions/v1# View current configuration
enact config show
# Edit configuration interactively
enact setup --global
# Set specific values
enact config set execution.defaultTimeout 60sEnact caches downloaded tools to speed up installation:
# View cache info
enact cache info
# Clean old cache entries
enact cache clean
# Clear entire cache
enact cache clean --allIf you want to share your own tools:
Create a directory with:
skill.package.yml- Package manifestDockerfile- Container definition- Source code and dependencies
Example skill.package.yml:
name: username/my-tool
version: 1.0.0
description: My awesome tool
tags: [utility, example]
image:
build:
context: .
dockerfile: Dockerfile
command: ["node", "index.js"]
inputs:
message:
type: string
description: Message to processGenerate cryptographic attestations:
cd my-tool/
enact signThis creates signed attestations in .enact/attestations/.
enact publishYou'll need to authenticate first:
enact auth login# General help
enact --help
# Command-specific help
enact run --help
enact install --help"Tool not found"
- Check spelling:
enact search toolname - Verify it's installed:
enact list
"Permission denied"
- Run with appropriate permissions
- Check Docker is running
"Execution timeout"
- Increase timeout:
enact run tool --timeout 120s - Set default:
enact config set execution.defaultTimeout 120s
"Insufficient attestations"
- View attestations:
enact get toolname - Lower requirements:
enact config set trust.minimum_attestations 0 - Install anyway:
enact install toolname --allow-unverified
- Documentation: github.com/EnactProtocol/enact
- Registry: enact.tools
- Issues: github.com/EnactProtocol/enact/issues
- Browse tools at enact.tools
- Read the CLI Commands Reference
- Learn about creating tools
- Explore example tools
For projects using Enact tools:
- Run
enact setupin your project directory - Install tools:
enact install toolname - Commit
.enact/tools.jsonto version control - Team members run
enact installto get all tools
- Use
--globalfor frequently used tools - Run
enact cache cleanperiodically - Increase cache size for many tools:
enact config set cache.maxSizeMb 2048
- Always inspect tools before first use:
enact inspect toolname - Keep minimum attestations at 1 or higher
- Only add trusted auditors:
enact trust add auditor username - Report suspicious tools:
enact report toolname --reason "description"
Use Enact in scripts and CI/CD:
# Non-interactive mode
enact install toolname --force --json
# Environment variables
export ENACT_REGISTRY_URL=https://siikwkfgsmouioodghho.supabase.co/functions/v1
export ENACT_AUTH_TOKEN=your-token
# Run without prompts
enact run toolname --args '{"input":"value"}' --json