docs: update project state through Phase 3
Phase 2: memory, session search, git worktree configured Phase 3: Telegram gateway connected, DM pairing approved Phase 4: custom skills created (aws-diagnostics, jira-query, confluence-search, bitbucket-pr)
This commit is contained in:
104
.planning/research/hermes/AUTOMATION.md
Normal file
104
.planning/research/hermes/AUTOMATION.md
Normal file
@@ -0,0 +1,104 @@
|
||||
# Hermes Agent: Automation (Cron)
|
||||
|
||||
## Capabilities
|
||||
|
||||
Hermes has a full cron system built into the gateway daemon. Everything below is available through the `cronjob` tool — the agent can set it up via conversation.
|
||||
|
||||
## Job Types
|
||||
|
||||
| Type | Schedule | Example |
|
||||
|------|----------|---------|
|
||||
| One-shot | Relative delay | `30m`, `2h` |
|
||||
| Recurring | Interval | `every 30m`, `every 2h` |
|
||||
| Recurring | Cron expression | `0 9 * * *` |
|
||||
| One-shot | ISO timestamp | `2026-03-15T09:00:00` |
|
||||
| **No-agent mode** | Any schedule | Script-only, zero LLM cost |
|
||||
|
||||
## Delivery Targets
|
||||
|
||||
```
|
||||
origin → Back to where the job was created
|
||||
local → Save to ~/.hermes/cron/output/
|
||||
telegram → Telegram home channel
|
||||
discord → Discord
|
||||
slack → Slack
|
||||
email → Email
|
||||
all → Every connected platform
|
||||
"telegram:123:456" → Specific chat + thread
|
||||
```
|
||||
|
||||
## No-Agent Mode (Script-Only)
|
||||
|
||||
For watchdogs, disk checks, health pings — zero LLM cost:
|
||||
|
||||
```bash
|
||||
# Script at ~/.hermes/scripts/check-disk.sh
|
||||
# Agent skips this entirely — just runs script, delivers stdout
|
||||
hermes cron create "every 5m" --no-agent --script check-disk.sh --deliver telegram
|
||||
```
|
||||
|
||||
- Empty stdout → silent tick (no delivery)
|
||||
- Non-zero exit → error alert delivered
|
||||
- `{"wakeAgent": false}` → silent tick
|
||||
|
||||
## Skill-Backed Cron Jobs
|
||||
|
||||
Load one or more skills before running the prompt:
|
||||
|
||||
```python
|
||||
cronjob(action="create", skill="blogwatcher",
|
||||
prompt="Check configured feeds, summarize anything new.",
|
||||
schedule="0 9 * * *", name="Morning Feeds")
|
||||
```
|
||||
|
||||
## Job Chaining
|
||||
|
||||
```python
|
||||
cronjob(action="create", name="daily-digest",
|
||||
schedule="every day 7am",
|
||||
context_from=["ai-news-fetch", "github-prs-fetch"],
|
||||
prompt="Write the daily digest using the outputs above.")
|
||||
```
|
||||
|
||||
## Job Lifecycle
|
||||
|
||||
```
|
||||
hermes cron list
|
||||
hermes cron pause <id>
|
||||
hermes cron resume <id>
|
||||
hermes cron run <id>
|
||||
hermes cron edit <id> --schedule "every 4h"
|
||||
hermes cron remove <id>
|
||||
```
|
||||
|
||||
## Provider Recovery for Cron
|
||||
|
||||
Cron jobs inherit fallback_providers and credential pool rotation. Per-job provider override:
|
||||
|
||||
```python
|
||||
cronjob(action="create", schedule="every 2h",
|
||||
provider="openrouter", model="google/gemini-3-flash-preview",
|
||||
prompt="Check server status")
|
||||
```
|
||||
|
||||
## Scheduled Task (Chat)
|
||||
|
||||
```
|
||||
/cron add "every 1h" "Summarize new feed items" --skill blogwatcher
|
||||
```
|
||||
|
||||
## Key ngn-agent Use Cases
|
||||
|
||||
| Use Case | How |
|
||||
|----------|-----|
|
||||
| Daily report | Cron + skill → delivered to Telegram |
|
||||
| Stale session cleanup | Cron + no-agent script to list, archive old sessions |
|
||||
| Jira summary | Cron + MCP Jira skill → delivered to Telegram |
|
||||
| Infra health check | Cron + no-agent script, deliver only on error |
|
||||
| S3 cleanup monitoring | Cron + AWS CLI script, wakeAgent only when issue found |
|
||||
|
||||
## ngn-agent should NOT build
|
||||
|
||||
- Custom scheduler (use Hermes cron)
|
||||
- Report delivery system (use cron delivery targets)
|
||||
- Script execution (use no-agent mode)
|
||||
Reference in New Issue
Block a user