Run LLM agent workflows in GitHub Actions. No servers. No Zapier. Just cron.
agentio is a CLI that lets LLM agents interact with Gmail, Slack, JIRA, Telegram, Google Chat, and RSS feeds. Designed for CI/CD pipelines and scheduled automation.
You want your AI agent to:
- Send a daily Slack summary of unread emails
- Monitor RSS feeds and post to Telegram
- Update JIRA tickets based on email threads
- Run on a schedule, without managing servers
agentio makes this trivial. Authenticate once locally, export your config as a single encrypted file, and run anywhere — GitHub Actions, GitLab CI, or any CI/CD platform.
A scheduled workflow that reads your emails, has Claude summarize them, and posts to Slack:
# .github/workflows/daily-briefing.yml
name: Daily Briefing
on:
schedule:
- cron: '0 7 * * 1-5'
jobs:
briefing:
runs-on: ubuntu-latest
env:
AGENTIO_CONFIG: ${{ secrets.AGENTIO_CONFIG }}
AGENTIO_KEY: ${{ secrets.AGENTIO_KEY }}
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
steps:
- uses: actions/checkout@v4
- run: curl -LsSf https://agentio.me/install | sh
- run: npm install -g @anthropic-ai/claude-code
- run: agentio config import && agentio claude install
- run: claude -p "$(cat prompt.md)" --max-turns 30 --dangerously-skip-permissions# prompt.md
Fetch my unread emails from the last 24 hours using agentio-gmail.
Summarize them by urgency and sender.
Post the summary to Slack using agentio-slack.See examples/daily-briefing/ for the complete working example.
macOS / Linux:
curl -LsSf https://agentio.me/install | shWindows (PowerShell):
iwr -useb https://agentio.me/install.ps1 | iexOther methods (Homebrew, Scoop, npm)
Homebrew (macOS/Linux):
brew tap plosson/agentio
brew install agentioScoop (Windows):
scoop bucket add agentio https://github.com/plosson/scoop-agentio
scoop install agentionpm / bun:
npx @plosson/agentio --help
# or global install
npm install -g @plosson/agentio# Add your Gmail account (opens browser for OAuth)
agentio gmail profile add
# Add Slack webhook
agentio slack profile add
# Add any other services you need...agentio config export
# Outputs:
# ✓ Exported to agentio.config
# ✓ Encryption key: abc123...
#
# Store BOTH in your CI/CD secrets!All credentials are encrypted with AES-256-GCM. The export file is useless without the key.
Note: GitHub secrets are limited to 48KB per secret. Only add the profiles you need for your workflow to keep the exported config small.
| Secret | Value |
|---|---|
AGENTIO_CONFIG |
Base64-encoded contents of agentio.config |
AGENTIO_KEY |
The encryption key from export |
# Get base64 for GitHub secret
cat agentio.config | base64env:
AGENTIO_CONFIG: ${{ secrets.AGENTIO_CONFIG }}
AGENTIO_KEY: ${{ secrets.AGENTIO_KEY }}
steps:
- run: agentio config import # Auto-detects env vars
- run: agentio gmail list --limit 10Done. Your agent can now access all your services securely in CI/CD.
| Service | Auth | Commands |
|---|---|---|
| Gmail | OAuth | list, get, search, send, reply, archive, mark, attachment, export |
| Slack | Webhook | send |
| Telegram | Bot Token | send |
| Google Chat | Webhook/OAuth | send, list, get |
| JIRA | OAuth | projects, search, get, comment, transitions, transition |
| Discourse | API Key | list, get, categories |
| RSS | None | articles, get, info |
Gmail
# List recent emails
agentio gmail list --limit 10
# Search
agentio gmail search --query "from:[email protected] is:unread"
# Get specific email
agentio gmail get <message-id>
# Send (body from stdin works great with LLMs)
echo "Generated by my agent" | agentio gmail send --to [email protected] --subject "Daily Report"
# Download attachments
agentio gmail attachment <message-id> --output ./downloads
# Export as PDF
agentio gmail export <message-id> --output email.pdfSlack
# Send message
agentio slack send "Deployment complete ✓"
# Send rich Block Kit message
agentio slack send --json blocks.jsonTelegram
# Send to channel
agentio telegram send "Alert: New items found"
# With markdown
agentio telegram send --parse-mode markdown "**Bold** and _italic_"JIRA
# List projects
agentio jira projects
# Search issues
agentio jira search --project MYPROJ --status "In Progress"
agentio jira search --jql "assignee = currentUser() AND status != Done"
# Get issue details
agentio jira get PROJ-123
# Add comment
agentio jira comment PROJ-123 "Automated update from CI"
# Transition issue
agentio jira transitions PROJ-123 # see available transitions
agentio jira transition PROJ-123 <transition-id>RSS
# List articles (auto-discovers feed URL)
agentio rss articles https://simonwillison.net --limit 10
# Filter by date
agentio rss articles https://blog.example.com --since 2025-01-01
# Get full article
agentio rss get https://simonwillison.net <article-url>Manage multiple accounts per service:
# Add named profiles
agentio gmail profile add --profile work
agentio gmail profile add --profile personal
# Use specific profile
agentio gmail list --profile workThe examples/ folder contains ready-to-use workflows. Here's how it works:
name: Daily Briefing
on:
schedule:
- cron: '0 7 * * 1-5' # Weekdays at 7 AM UTC
jobs:
briefing:
runs-on: ubuntu-latest
env:
AGENTIO_CONFIG: ${{ secrets.AGENTIO_CONFIG }}
AGENTIO_KEY: ${{ secrets.AGENTIO_KEY }}
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
steps:
- uses: actions/checkout@v4
- run: curl -LsSf https://agentio.me/install | sh
- run: npm install -g @anthropic-ai/claude-code
- run: agentio config import && agentio claude install
- run: claude -p "$(cat prompt.md)" --max-turns 30 --dangerously-skip-permissionsThe magic is in prompt.md — Claude reads your emails via the agentio plugin, analyzes them, and posts a summary to Slack:
# Daily Email Briefing
1. Fetch unread emails from the last 24 hours using agentio-gmail
2. Categorize by urgency: Urgent / Important / FYI
3. Generate a morning briefing with one-line summaries
4. Send to Slack using agentio-slackSee examples/daily-briefing/ for the complete working example.
agentio includes skills for Claude Code that let Claude directly read your email, post to Slack, or query JIRA during conversations.
Install skills:
agentio claude install https://github.com/plosson/agentio # marketplace
agentio claude install agentio-gmail@agentio # Gmail skill
agentio claude install agentio-jira@agentio # JIRA skillThen in Claude Code:
"Summarize my unread emails and post a summary to Slack"
Claude uses the installed skills to fetch emails and send the summary — no manual commands needed.
- Structured output — Text output optimized for LLM parsing
- Stdin support — Pipe content to commands (
echo "msg" | agentio slack send) - Single config export — One encrypted file + key = full portability
- Multi-profile — Multiple accounts per service
- No runtime dependencies — Single binary, runs anywhere
MIT