Files

Development Packs Directory

This directory is for developing and testing custom packs outside of the core pack. Packs placed here are automatically available in Docker containers.

Usage

1. Create a New Pack

cd packs.dev
mkdir my-pack
cd my-pack

2. Create pack.yaml

ref: my-pack
label: "My Custom Pack"
description: "My custom automation pack"
version: "1.0.0"
author: "Your Name"
email: "you@example.com"

# Pack configuration
system: false
enabled: true

3. Add Actions

mkdir actions
cat > actions/hello.yaml << 'YAML'
name: hello
ref: my-pack.hello
description: "Say hello"
runner_type: shell
enabled: true
entry_point: hello.sh
parameters:
  type: object
  properties:
    name:
      type: string
      description: "Name to greet"
      default: "World"
  required: []
output:
  type: object
  properties:
    message:
      type: string
      description: "Greeting message"
YAML

cat > actions/hello.sh << 'BASH'
#!/bin/bash
echo "{\"message\": \"Hello, ${ATTUNE_ACTION_name}!\"}"
BASH

chmod +x actions/hello.sh

4. Access in Docker

The pack will be automatically available at /opt/attune/packs.dev/my-pack in all containers.

To load the pack into the database:

# Via API
curl -X POST http://localhost:8080/api/v1/packs \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "ref": "my-pack",
    "label": "My Custom Pack",
    "description": "My custom automation pack",
    "version": "1.0.0",
    "system": false,
    "enabled": true,
    "author": "Your Name",
    "email": "you@example.com"
  }'

# Or via CLI
attune pack register /opt/attune/packs.dev/my-pack

Development Workflow

  1. Create pack structure in packs.dev/
  2. Edit files on your host machine
  3. Changes are immediately visible in containers (bind mount)
  4. Test by creating rules/workflows that use your pack
  5. Iterate without rebuilding containers

Directory Structure

packs.dev/
├── README.md (this file)
└── my-pack/
    ├── pack.yaml
    ├── actions/
    │   ├── my_action.yaml
    │   └── my_action.sh
    ├── triggers/
    │   └── my_trigger.yaml
    ├── sensors/
    │   └── my_sensor.yaml
    └── workflows/
        └── my_workflow.yaml

Important Notes

  • This directory is for development only
  • Production packs should be properly packaged and installed
  • Files are mounted read-write so be careful with modifications from containers
  • The core pack is in /opt/attune/packs (read-only in containers)
  • Dev packs are in /opt/attune/packs.dev (read-write in containers)

Example Packs

See the examples/ subdirectory for starter pack templates:

  • examples/basic-pack/ - Minimal pack with shell action
  • examples/python-pack/ - Pack with Python actions
  • examples/workflow-pack/ - Pack with workflows

Troubleshooting

Pack not found

  • Ensure pack.yaml exists and is valid
  • Check pack ref matches directory name (recommended)
  • Verify pack is registered in database via API

Actions not executing

  • Check entry_point matches actual file name
  • Ensure scripts are executable (chmod +x)
  • Check action runner_type matches script type
  • View worker logs: docker logs attune-worker-shell

Permission errors

  • Ensure files are readable by container user (UID 1000)
  • Check file permissions: ls -la packs.dev/my-pack/

See Also