Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 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
32 changes: 32 additions & 0 deletions examples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,38 @@ chat -> agent (RocketRide Wave) -> response

**Required env vars:** `ROCKETRIDE_ANTHROPIC_KEY`, `ROCKETRIDE_SLACK_TOKEN` (a bot token with `chat:write`, `channels:read`, `channels:history`)

### guild-agent.pipe

**Run a governed [Guild.ai](https://www.guild.ai/) agent as a pipeline step.**

```text
chat -> Guild.ai -> response
```

- Sends the chat input to the agent configured on the node, waits for the Guild session to finish, and emits its answer
- Deterministic: the step runs the agent exactly once, no prompt tuning
- See the [tool_guild README](../nodes/src/nodes/tool_guild/README.md) for creating a Guild trigger API key
Comment thread
coderabbitai[bot] marked this conversation as resolved.

**Required env vars:** `ROCKETRIDE_GUILD_KEY_ID`, `ROCKETRIDE_GUILD_KEY_SECRET`, `ROCKETRIDE_GUILD_OWNER`, `ROCKETRIDE_GUILD_WORKSPACE`, `ROCKETRIDE_GUILD_AGENT`

### guild-delegate-agent.pipe

**A RocketRide agent that delegates actions to a governed Guild.ai agent.**

```text
chat -> agent (RocketRide Wave) -> response
|
+------+------+
| | |
LLM Memory Guild.ai (tool)
```

- The agent answers directly, but delegates actions on governed systems to Guild by calling `tool_guild_1.run_agent`
- Guild's runtime injects credentials, so the delegated agent acts without the pipeline ever holding the raw keys
- Each `run_agent` call starts a billed, non-idempotent Guild session; the instructions tell the agent to call it once and not retry blindly

**Required env vars:** `ROCKETRIDE_ANTHROPIC_KEY`, `ROCKETRIDE_GUILD_KEY_ID`, `ROCKETRIDE_GUILD_KEY_SECRET`, `ROCKETRIDE_GUILD_OWNER`, `ROCKETRIDE_GUILD_WORKSPACE`, `ROCKETRIDE_GUILD_AGENT`

## Getting Started

1. Copy a template to your project directory
Expand Down
95 changes: 95 additions & 0 deletions examples/guild-agent.pipe
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
{
"components": [
{
"id": "webhook_1",
"provider": "webhook",
"name": "Webhook",
"config": {
"hideForm": true,
"mode": "Source",
"parameters": {},
"type": "webhook"
},
"ui": {
"position": {
"x": 20,
"y": 200
},
"measured": {
"width": 150,
"height": 66
},
"nodeType": "default",
"formDataValid": true
}
},
{
"id": "tool_guild_1",
"provider": "tool_guild",
"name": "Guild.ai",
"config": {
"type": "tool_guild",
"baseUrl": "https://app.guild.ai",
"apiKeyId": "${ROCKETRIDE_GUILD_KEY_ID}",
"apiKeySecret": "${ROCKETRIDE_GUILD_KEY_SECRET}",
"owner": "${ROCKETRIDE_GUILD_OWNER}",
"workspace": "${ROCKETRIDE_GUILD_WORKSPACE}",
"agent": "${ROCKETRIDE_GUILD_AGENT}",
"resultMode": "wait",
"timeout": 300,
"parameters": {}
},
"input": [
{
"lane": "text",
"from": "webhook_1"
}
],
"ui": {
"position": {
"x": 240,
"y": 200
},
"measured": {
"width": 150,
"height": 66
},
"nodeType": "default",
"formDataValid": true
}
},
{
"id": "response_text_1",
"provider": "response_text",
"name": "Return Text",
"config": {
"laneName": "text"
},
"input": [
{
"lane": "text",
"from": "tool_guild_1"
}
],
"ui": {
"position": {
"x": 460,
"y": 200
},
"measured": {
"width": 150,
"height": 66
},
"nodeType": "default",
"formDataValid": true
}
}
],
"project_id": "45094b41-0b73-44ca-b7de-1b5030a21f9f",
"viewport": {
"x": 0,
"y": 0,
"zoom": 1
},
"version": 1
}
162 changes: 162 additions & 0 deletions examples/guild-delegate-agent.pipe
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
{
"components": [
{
"id": "chat_1",
"provider": "chat",
"name": "Chat",
"config": {
"hideForm": true,
"mode": "Source",
"parameters": {},
"type": "chat"
},
"ui": {
"position": {
"x": 20,
"y": 200
},
"nodeType": "default",
"formDataValid": true
}
},
{
"id": "agent_rocketride_1",
"provider": "agent_rocketride",
"name": "RocketRide Agent",
"config": {
"instructions": [
"You are an operations assistant. You answer questions directly, but you do NOT take actions on external systems yourself.",
"When a request requires acting on a governed system — filing a ticket, updating a record, notifying a team — delegate it to Guild by calling tool_guild_1.run_agent with a clear, self-contained instruction as the `input`.",
"tool_guild_1.run_agent waits for the Guild agent to finish and returns its answer in `output`. Each call starts a billed, non-idempotent Guild session: never repeat a call that succeeded, and do NOT blindly retry one that failed, timed out, or errored — the session may already be running, and a retry starts and bills a second one.",
"Errors are surfaced to you directly, not as a success flag. Retry only when the error conclusively proves that no session was started. Otherwise, inspect the existing session with get_session / get_session_events when possible, or report the uncertain outcome; authentication errors are not retryable.",
"When a run is uncertain — it timed out, errored, or you started it without waiting — use tool_guild_1.get_session and tool_guild_1.get_session_events to check its status and retrieve the answer, rather than starting a new session."
Comment thread
coderabbitai[bot] marked this conversation as resolved.
],
"max_waves": 20,
"parameters": {}
},
"input": [
{
"lane": "questions",
"from": "chat_1"
}
],
"ui": {
"position": {
"x": 240,
"y": 200
},
"nodeType": "default",
"formDataValid": true
}
},
{
"id": "llm_anthropic_1",
"provider": "llm_anthropic",
"name": "Anthropic",
"config": {
"profile": "claude-sonnet-4-6",
"claude-sonnet-4-6": {
"apikey": "${ROCKETRIDE_ANTHROPIC_KEY}"
},
"parameters": {}
},
"control": [
{
"classType": "llm",
"from": "agent_rocketride_1"
}
],
"ui": {
"position": {
"x": 80,
"y": 360
},
"nodeType": "default",
"formDataValid": true
}
},
{
"id": "tool_guild_1",
"provider": "tool_guild",
"name": "Guild.ai",
"config": {
"type": "tool_guild",
"baseUrl": "https://app.guild.ai",
"apiKeyId": "${ROCKETRIDE_GUILD_KEY_ID}",
"apiKeySecret": "${ROCKETRIDE_GUILD_KEY_SECRET}",
"owner": "${ROCKETRIDE_GUILD_OWNER}",
"workspace": "${ROCKETRIDE_GUILD_WORKSPACE}",
"agent": "${ROCKETRIDE_GUILD_AGENT}",
"resultMode": "wait",
"timeout": 300,
"maxSessions": 10,
"parameters": {}
},
"control": [
{
"classType": "tool",
"from": "agent_rocketride_1"
}
],
"ui": {
"position": {
"x": 500,
"y": 360
},
"nodeType": "default",
"formDataValid": true
}
},
{
"id": "memory_internal_1",
"provider": "memory_internal",
"name": "Memory (Internal)",
"config": {
"type": "memory_internal"
},
"control": [
{
"classType": "memory",
"from": "agent_rocketride_1"
}
],
"ui": {
"position": {
"x": 300,
"y": 360
},
"nodeType": "default",
"formDataValid": true
}
},
{
"id": "response_answers_1",
"provider": "response_answers",
"name": "Return Answers",
"config": {
"laneName": "answers"
},
"input": [
{
"lane": "answers",
"from": "agent_rocketride_1"
}
],
"ui": {
"position": {
"x": 460,
"y": 200
},
"nodeType": "default",
"formDataValid": true
}
}
],
"project_id": "6b219e69-d9ea-41fb-a6f4-724e3b5784ad",
"viewport": {
"x": 0,
"y": 0,
"zoom": 1
},
"version": 1
}
Loading
Loading