Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
# Mark dist folder as generated
dist/** linguist-generated=true
dist/** -diff -merge linguist-generated=true
51 changes: 49 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@ A GitHub Action to deploy agents to the [Runloop](https://runloop.ai) platform.

- **Zero-config Git deployments** - Automatically deploys your current repository
- **Release tag support** - Deploys specific versions when releases are published
- **Multiple source types** - Git repositories, tar archives (.tar, .tar.gz, .tgz), and single files
- **Multiple source types** - Git repositories, tar archives, single files, NPM packages, and PyPI packages
- **Flexible packaging** - Create tar archives however you want in your workflow
- **Setup commands** - Run custom setup commands after agent installation
- **Custom skills** - Attach custom skill definitions (YAML or JSON) to agents
- **Public/private agents** - Control agent visibility
- **TTL support** - Set expiration time for uploaded objects

Expand All @@ -34,12 +35,17 @@ That's it! The action will automatically use your current repository and commit
| Input | Required | Default | Description |
|-------|----------|---------|-------------|
| `api-key` | ✅ | | Runloop API key (store in secrets) |
| `source-type` | ✅ | | Agent source type: `git`, `tar`, or `file` |
| `source-type` | ✅ | | Agent source type: `git`, `tar`, `file`, `npm`, or `pip` |
| `agent-version` | ✅ | | Agent version (semver string like `2.0.65` or git SHA) |
| `agent-name` | | repo name | Name for the agent (defaults to repository name) |
| `git-repository` | | current repo | Git repository URL (auto-detected) |
| `git-ref` | | current commit/tag | Git ref (branch/tag/commit SHA, auto-detected) |
| `npm-package` | | | NPM package name (required for `npm`, e.g., `@anthropic-ai/claude-code`) |
| `npm-registry-url` | | | NPM registry URL (defaults to public npm registry) |
| `pip-package` | | | PyPI package name (required for `pip`, e.g., `deepagents-cli`) |
| `pip-index-url` | | | PyPI index URL (defaults to public PyPI) |
| `path` | | | Path to tar archive or single file (required for `tar`/`file`) |
| `custom-skill` | | | Custom skill definition in YAML (or JSON) to attach to the agent |
| `setup-commands` | | | Newline-separated setup commands to run after installation |
| `is-public` | | `false` | Whether the agent should be publicly accessible |
| `api-url` | | `https://api.runloop.ai` | Runloop API URL |
Expand Down Expand Up @@ -143,6 +149,47 @@ You can also use `.tar` format or reference output from a previous step:
path: ./scripts/agent.sh
```

### NPM Package

```yaml
- uses: runloopai/deploy-agent@main
with:
api-key: ${{ secrets.RUNLOOP_API_KEY }}
source-type: npm
agent-version: 1.0.0
npm-package: "@anthropic-ai/claude-code"
```

### NPM Package with Custom Skill

The `custom-skill` input accepts a YAML (or JSON) definition:

```yaml
- uses: runloopai/deploy-agent@main
with:
api-key: ${{ secrets.RUNLOOP_API_KEY }}
source-type: npm
agent-version: 1.0.0
npm-package: "@anthropic-ai/claude-code"
custom-skill: |
name: my-skill
description: A custom skill for the agent
instructions: >-
Detailed instructions for how the agent
should use this skill.
```

### PyPI Package

```yaml
- uses: runloopai/deploy-agent@main
with:
api-key: ${{ secrets.RUNLOOP_API_KEY }}
source-type: pip
agent-version: 1.0.0
pip-package: deepagents-cli
```

## Authentication

Store your Runloop API key as a GitHub secret:
Expand Down
17 changes: 17 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,16 @@ inputs:
description: 'Path to file or tar archive (required if source-type=tar/file)'
required: false

# Skills inputs
skills:
description: 'YAML-encoded list of custom skill definitions to attach to the agent'
required: false

# Webhook inputs
webhooks:
description: 'YAML-encoded list of webhook configurations (url, events, secret)'
required: false

# Common inputs
setup-commands:
description: 'Newline-separated setup commands to run after agent installation'
Expand All @@ -76,6 +86,10 @@ inputs:
required: false
# default is 'undefined' => don't auto-delete

architecture:
description: 'Target architecture for the agent (x86_64 or arm64). If unset, agent is universal.'
required: false

outputs:
agent-id:
description: 'The ID of the created agent (e.g., agt_xxxx)'
Expand All @@ -86,6 +100,9 @@ outputs:
agent-name:
description: 'The final name of the created agent'

architecture:
description: 'The architecture of the created agent (if specified)'

runs:
using: 'node20'
main: 'dist/index.js'
Loading
Loading