multiAI Summary Pending

enact-docs-guide

LLM guide for creating, publishing, and running Enact tools

231 stars

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/enact-docs-guide/SKILL.md --create-dirs "https://raw.githubusercontent.com/aiskillstore/marketplace/main/skills/enactprotocol/enact-docs-guide/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/enact-docs-guide/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How enact-docs-guide Compares

Feature / Agentenact-docs-guideStandard Approach
Platform SupportmultiLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

LLM guide for creating, publishing, and running Enact tools

Which AI agents support this skill?

This skill is compatible with multi.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Enact LLM Guide

Enact: Containerized tools with structured I/O for AI agents.

## Commands

```bash
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
```

## Tool Structure

```
my-tool/
├── enact.md    # Required: YAML frontmatter + docs
└── main.py     # Your code (any language)
```

## enact.md Template

```yaml
---
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"
command: "python /workspace/main.py ${input}"
timeout: "30s"

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]
---

# Tool Name

Documentation here.
```

## Field Reference

| Field | Required | Description |
|-------|----------|-------------|
| `name` | Yes | `namespace/category/tool` |
| `description` | Yes | What it does |
| `command` | No* | Shell command with `${param}` substitution |
| `from` | No | Docker image (default: `alpine:latest`) |
| `build` | No | Build commands (string or array), cached |
| `inputSchema` | No | JSON Schema for inputs |
| `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 `command` are LLM instruction tools (markdown interpreted by AI).

## Examples by Language

### Python
```yaml
from: "python:3.12-slim"
build: "pip install pandas"
command: "python /workspace/main.py ${input}"
```

### Node.js
```yaml
from: "node:20-alpine"
build: "npm install"
command: "node /workspace/index.js ${input}"
```

### Rust
```yaml
from: "rust:1.83-slim"
build: "rustc /workspace/main.rs -o /workspace/app"
command: "/workspace/app ${input}"
```

### Go
```yaml
from: "golang:1.22-alpine"
build: "go build -o /workspace/app /workspace/main.go"
command: "/workspace/app ${input}"
```

### Shell (no build)
```yaml
command: "echo 'Hello ${name}'"
```

## Source Code Pattern

Always output JSON matching `outputSchema`:

```python
#!/usr/bin/env python3
import sys, json

input_val = sys.argv[1]
result = {"result": input_val.upper()}
print(json.dumps(result))
```

## Secrets

```yaml
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']`

## Two Tool Types

1. **Container tools** (has `command`): Runs in Docker, deterministic
2. **Instruction tools** (no `command`): Markdown body interpreted by LLM

## Workflow

```bash
# 1. Create
mkdir my-tool && cd my-tool
# Create enact.md + source files

# 2. Test
enact run . --input "test=value"

# 3. Publish
enact auth login
enact sign .
enact publish .
```

## Checklist

- [ ] `name`: namespace/category/tool format
- [ ] `description`: clear, searchable
- [ ] `inputSchema`: validates inputs
- [ ] `outputSchema`: documents output
- [ ] `from`: pinned image version (not `latest`)
- [ ] `build`: installs dependencies
- [ ] `command`: uses `${param}` for inputs
- [ ] Source outputs valid JSON