بنقرة واحدة
docs-guide
LLM guide for creating, publishing, and running Enact tools
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
LLM guide for creating, publishing, and running Enact tools
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
A tool that echoes its input for testing
Generates ASCII art from a given text
Transform data between CSV and JSON formats with filtering and column selection
Roll dice with configurable sides and count - a simple Rust example tool
Scrape, crawl, search, and extract structured data from websites using Firecrawl API - converts web pages to LLM-ready markdown
A simple Go greeting tool
| name | docs-guide |
| description | LLM guide for creating, publishing, and running Enact tools |
Enact: Containerized tools with structured I/O for AI agents.
enact run ./tool --input "key=value" # Run local tool
enact run ./tool --args '{"key":"value"}' # Run with JSON
enact run author/tool --input "x=y" # Run installed tool
enact install author/tool # Install to project
enact install author/tool -g # Install globally
enact search "query" # Find tools
enact sign ./tool && enact publish ./tool # Publish
Tools use a two-file model:
my-tool/
├── skill.package.yml # Technical manifest (execution config)
├── SKILL.md # Agent-facing documentation
└── main.py # Your code (any language)
enact: "2.0.0"
name: "namespace/category/tool-name"
version: "1.0.0"
description: "What it does"
from: "python:3.12-slim"
build: "pip install requests pandas"
timeout: "30s"
scripts:
run:
command: "python /work/main.py {{input}}"
inputSchema:
type: object
properties:
input:
type: string
description: "Input description"
required: [input]
outputSchema:
type: object
properties:
result:
type: string
env:
API_KEY:
description: "API key"
secret: true
LOG_LEVEL:
description: "Log level"
default: "info"
tags: [category, keywords]
| Field | Required | Description |
|---|---|---|
name | Yes | namespace/category/tool |
description | Yes | What it does |
scripts | No* | Named scripts with {{param}} substitution |
from | No | Docker image (default: alpine:latest) |
build | No | Build commands (string or array), cached |
inputSchema | No | JSON Schema for inputs (under each script) |
outputSchema | No | JSON Schema for outputs |
env | No | Environment vars (secret: true for keyring) |
timeout | No | Max runtime (default: 30s) |
version | No | Semver version |
tags | No | Discovery keywords |
*Tools without scripts are LLM instruction tools (markdown interpreted by AI).
from: "python:3.12-slim"
build: "pip install pandas"
scripts:
run:
command: "python /work/main.py {{input}}"
from: "node:20-alpine"
build: "npm install"
scripts:
run:
command: "node /work/index.js {{input}}"
from: "rust:1.83-slim"
build: "rustc /work/main.rs -o /work/app"
scripts:
run:
command: "/work/app {{input}}"
from: "golang:1.22-alpine"
build: "go build -o /work/app /work/main.go"
scripts:
run:
command: "/work/app {{input}}"
scripts:
run: "echo {{name}}"
Always output JSON matching outputSchema:
#!/usr/bin/env python3
import sys, json
input_val = sys.argv[1]
result = {"result": input_val.upper()}
print(json.dumps(result))
env:
API_KEY:
description: "API key"
secret: true # Stored in OS keyring, not .env
User sets: enact env set API_KEY --secret --namespace myorg/tools
Access in code via environment variable: os.environ['API_KEY']
scripts): Runs in Docker, deterministicscripts): Markdown body interpreted by LLM# 1. Create
mkdir my-tool && cd my-tool
# Create skill.package.yml, SKILL.md, and source files
# 2. Test
enact run . --input "test=value"
# 3. Publish
enact auth login
enact sign .
enact publish .
name: namespace/category/tool formatdescription: clear, searchablescripts: named scripts with {{param}} substitutioninputSchema: validates inputs (under each script)outputSchema: documents outputfrom: pinned image version (not latest)build: installs dependencies