-
Notifications
You must be signed in to change notification settings - Fork 1
Description
Summary
Add hooks for task lifecycle events and a task creation API/CLI, enabling Riptide to integrate with any external task management system — GitHub Issues, Jira, Asana, Shortcut, etc. — not just Linear.
Motivation
Riptide's Linear integration is great, but teams use many different task trackers. Rather than building one-off integrations for each, exposing hooks and a task creation mechanism would let users (and plugin authors) bridge any system into the RPI workflow.
The autocoder pattern (laird/agents) already solves autonomous GH issue resolution with Claude Code, but Riptide's RPI workflow (research → plan → implement) adds significant value for complex issues. Generic hooks would let anyone combine these strengths regardless of their task tracker.
What I tried
-
Scripted artifact creation — wrote
sync-gh-issues.shto fetch open GH issues viagh issue list, create artifact directories under~/.humanlayer/riptide/artifacts/, writeticket.mdfiles, and create symlinks in.humanlayer/tasks/. The directories were created but Riptide doesn't recognize them as tasks because tasks are managed server-side throughcloud.codelayer.cloud. -
Looked for a local API — the daemon (
riptided) only has outbound connections to the cloud backend and Unix sockets to the Tauri UI. No local API to create tasks programmatically.
Proposed: Two Complementary Features
1. Task Creation API/CLI (inbound)
Allow external tools to create Riptide tasks programmatically:
# CLI
riptide task create --title "Fix login bug" --body "Details..." --project /path/to/repo
# Or a local API the daemon exposes
curl -X POST http://localhost:PORT/tasks \
-d '{"title": "Fix login bug", "body": "...", "project": "/path/to/repo"}'This unblocks any integration: a cron job syncing Jira tickets, a GH webhook creating tasks, a Slack bot dispatching work, etc.
2. Task Lifecycle Hooks (outbound)
Fire hooks when task status changes, similar to Claude Code's existing hook system:
{
"hooks": {
"TaskStatusChange": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "bash scripts/on-task-status-change.sh"
}
]
}
]
}
}Hook script receives JSON on stdin:
{
"task_id": "019cbbe0-859b-7770-9d8f-75f9d781a600",
"task_slug": "fix-login-bug",
"old_status": "in_progress",
"new_status": "completed",
"artifact_dir": "/path/to/artifacts"
}Together these enable full bidirectional sync with anything:
| System | Inbound (→ Riptide) | Outbound (Riptide →) |
|---|---|---|
| GitHub Issues | gh issue list → riptide task create |
Hook → gh issue comment/close |
| Jira | Jira API → riptide task create |
Hook → Jira API transition |
| Slack | Slash command → riptide task create |
Hook → Slack message |
| Custom | Any script | Any script |
Use Cases
- GitHub Issues → RPI workflow — issues get structured research/planning instead of ad-hoc fixes
- Jira/Asana sync — enterprise teams keep their existing tracker, get Riptide's RPI workflow
- Status writeback — close external tickets, post comments, update labels when work completes
- CI triggers — kick off deployments when tasks complete
- Notifications — Slack/email/webhook on status changes
- Plugin ecosystem — community can build integrations without Riptide core changes
Environment
- Riptide plugin: rpi 0.13.1
- Platform: macOS (Darwin 25.2.0)