- Rewrite 3_context-and-memory.md (auto-context system, remove legacy memory) - Create 7_voice.md (voice interface documentation) - Update 0_overview.md, 1_architecture.md, 4_tools-and-workflows.md, 6_ui.md, 8_mcp.md - Add simple human-readable intros to all docs - Update README.md with voice doc reference Synced from ra-h commit 4a3d7e0
317 lines
7.4 KiB
Markdown
317 lines
7.4 KiB
Markdown
# Tools & Workflows
|
|
|
|
> What actions the AI can take and how workflows automate multi-step processes.
|
|
|
|
**How it works:** AI agents have access to tools — functions they can call to read data, create nodes, search content, and more. Workflows are pre-written instruction sets that guide the AI through complex multi-step processes like finding connections across your knowledge base.
|
|
|
|
---
|
|
|
|
## Tools Overview
|
|
|
|
Tools are organized into three categories:
|
|
|
|
| Category | Purpose | Examples |
|
|
|----------|---------|----------|
|
|
| **Core** | Read-only graph operations | queryNodes, searchContentEmbeddings |
|
|
| **Orchestration** | Delegation and reasoning | executeWorkflow, think, webSearch |
|
|
| **Execution** | Write operations and extraction | createNode, updateNode, youtubeExtract |
|
|
|
|
---
|
|
|
|
## Core Tools (All Agents)
|
|
|
|
Read-only operations available to all agents:
|
|
|
|
### queryNodes
|
|
Search nodes by title, content, or dimensions.
|
|
|
|
```typescript
|
|
queryNodes({
|
|
search?: string, // Full-text search
|
|
dimensions?: string[],// Filter by dimensions
|
|
limit?: number // Max results (default: 20)
|
|
})
|
|
```
|
|
|
|
### getNodesById
|
|
Retrieve full node data by ID array.
|
|
|
|
```typescript
|
|
getNodesById({
|
|
ids: number[] // Array of node IDs
|
|
})
|
|
```
|
|
|
|
### queryEdge
|
|
Inspect existing edges between nodes.
|
|
|
|
```typescript
|
|
queryEdge({
|
|
from_node_id?: number,
|
|
to_node_id?: number,
|
|
limit?: number
|
|
})
|
|
```
|
|
|
|
### searchContentEmbeddings
|
|
Semantic search across chunk embeddings.
|
|
|
|
```typescript
|
|
searchContentEmbeddings({
|
|
query: string, // Search query
|
|
node_id?: number, // Scope to specific node
|
|
limit?: number, // Max results
|
|
threshold?: number // Similarity threshold (0-1)
|
|
})
|
|
```
|
|
|
|
### queryDimensions
|
|
Query and filter dimensions.
|
|
|
|
```typescript
|
|
queryDimensions({
|
|
search?: string, // Filter by name
|
|
isPriority?: boolean, // Filter locked dimensions only
|
|
limit?: number
|
|
})
|
|
```
|
|
|
|
### getDimension
|
|
Get a single dimension by exact name.
|
|
|
|
```typescript
|
|
getDimension({
|
|
name: string // Exact dimension name
|
|
})
|
|
```
|
|
|
|
---
|
|
|
|
## Orchestration Tools (Orchestrators Only)
|
|
|
|
Tools for reasoning and delegation:
|
|
|
|
### webSearch
|
|
External web search via Tavily.
|
|
|
|
```typescript
|
|
webSearch({
|
|
query: string,
|
|
max_results?: number
|
|
})
|
|
```
|
|
|
|
### think
|
|
Internal reasoning/planning (logged to metadata, not shown to user).
|
|
|
|
```typescript
|
|
think({
|
|
thought: string // Reasoning to log
|
|
})
|
|
```
|
|
|
|
### executeWorkflow
|
|
Delegate to wise-rah for predefined workflows.
|
|
|
|
```typescript
|
|
executeWorkflow({
|
|
workflow_key: string // e.g., "integrate"
|
|
})
|
|
```
|
|
|
|
---
|
|
|
|
## Execution Tools (Writers)
|
|
|
|
Write operations and content extraction:
|
|
|
|
### createNode
|
|
Create a new knowledge node.
|
|
|
|
```typescript
|
|
createNode({
|
|
title: string,
|
|
content?: string,
|
|
description?: string,
|
|
dimensions?: string[],
|
|
link?: string,
|
|
metadata?: object
|
|
})
|
|
```
|
|
|
|
### updateNode
|
|
Append content to existing nodes. **Append-only** — cannot overwrite.
|
|
|
|
```typescript
|
|
updateNode({
|
|
id: number,
|
|
content: string // Appended to existing content
|
|
})
|
|
```
|
|
|
|
### createEdge
|
|
Create relationship between nodes.
|
|
|
|
```typescript
|
|
createEdge({
|
|
from_node_id: number,
|
|
to_node_id: number,
|
|
context?: string // Relationship description
|
|
})
|
|
```
|
|
|
|
### updateEdge
|
|
Modify edge metadata.
|
|
|
|
```typescript
|
|
updateEdge({
|
|
id: number,
|
|
context?: string,
|
|
user_feedback?: number
|
|
})
|
|
```
|
|
|
|
### Dimension Tools
|
|
|
|
```typescript
|
|
createDimension({ name: string, description?: string })
|
|
updateDimension({ name: string, description?: string })
|
|
lockDimension({ name: string }) // Make priority dimension
|
|
unlockDimension({ name: string }) // Remove priority status
|
|
deleteDimension({ name: string })
|
|
```
|
|
|
|
### Extraction Tools
|
|
|
|
```typescript
|
|
youtubeExtract({ url: string }) // Extract transcript
|
|
websiteExtract({ url: string }) // Extract page content
|
|
paperExtract({ url: string }) // Extract PDF text
|
|
```
|
|
|
|
---
|
|
|
|
## Tool Access by Agent
|
|
|
|
| Agent | Core | Orchestration | Execution |
|
|
|-------|------|---------------|-----------|
|
|
| **ra-h / ra-h-easy** | ✅ All | webSearch, think, executeWorkflow | ✅ All |
|
|
| **wise-rah** | ✅ All | webSearch, think, delegateToMiniRAH | updateNode, createEdge |
|
|
| **mini-rah** | ✅ All | webSearch, think | ✅ All |
|
|
|
|
---
|
|
|
|
## Workflows
|
|
|
|
Workflows are multi-step instruction sets executed by wise-rah.
|
|
|
|
### User-Editable Workflows
|
|
|
|
**Users can create, edit, and delete workflows** from Settings → Workflows tab.
|
|
|
|
**Storage:** `~/Library/Application Support/RA-H/workflows/`
|
|
|
|
**Format:** JSON files with this structure:
|
|
|
|
```json
|
|
{
|
|
"key": "integrate",
|
|
"displayName": "Integrate",
|
|
"description": "Deep analysis and connection-building for focused node",
|
|
"instructions": "You are executing the INTEGRATE workflow...",
|
|
"enabled": true,
|
|
"requiresFocusedNode": true
|
|
}
|
|
```
|
|
|
|
### How Workflows Work
|
|
|
|
1. User says "run integrate workflow" (or similar)
|
|
2. Orchestrator calls `executeWorkflow({ workflow_key: 'integrate' })`
|
|
3. System spawns wise-rah session with workflow instructions
|
|
4. wise-rah executes steps autonomously (30-60+ seconds)
|
|
5. wise-rah returns summary to orchestrator
|
|
6. Orchestrator shows result to user
|
|
|
|
### Built-in Workflows
|
|
|
|
#### Integrate
|
|
|
|
**Key:** `integrate`
|
|
**Purpose:** Database-wide connection discovery
|
|
**Cost:** ~$0.18/execution
|
|
|
|
**5-Step Process:**
|
|
|
|
1. **Plan** — Call `think` to outline approach
|
|
2. **Ground** — Extract entities (names, projects, concepts) from focused node
|
|
3. **Search** — Database-wide search using extracted entities
|
|
4. **Contextualize** — Brief relevance explanation
|
|
5. **Append** — Call `updateNode` ONCE with Integration Analysis section
|
|
|
|
**Output Format:**
|
|
|
|
```markdown
|
|
## Integration Analysis
|
|
|
|
[2-3 sentences: what this node is, why it matters]
|
|
|
|
**Database Connections:**
|
|
- [NODE:123:"Title"] — [why relevant]
|
|
- [NODE:456:"Title"] — [why relevant]
|
|
...
|
|
|
|
**Relevance:** [1-2 sentences connecting to your context]
|
|
```
|
|
|
|
### Creating Custom Workflows
|
|
|
|
1. Go to Settings → Workflows
|
|
2. Click "New Workflow"
|
|
3. Fill in:
|
|
- **Key** — unique identifier (lowercase, no spaces)
|
|
- **Display Name** — shown in UI
|
|
- **Description** — what it does
|
|
- **Instructions** — the prompt for wise-rah
|
|
- **Requires Focused Node** — whether a node must be selected
|
|
4. Save
|
|
|
|
### Workflow Instructions Tips
|
|
|
|
- Be explicit about steps and expected output
|
|
- Reference tools by name (wise-rah has: queryNodes, searchContentEmbeddings, updateNode, createEdge, webSearch, think)
|
|
- Specify output format precisely
|
|
- Include guardrails ("call updateNode exactly once")
|
|
|
|
---
|
|
|
|
## Tool Registry
|
|
|
|
**Location:** `src/tools/infrastructure/registry.ts`
|
|
|
|
**Structure:**
|
|
|
|
```typescript
|
|
TOOL_SETS = {
|
|
core: { queryNodes, getNodesById, queryEdge, queryDimensions, getDimension, searchContentEmbeddings },
|
|
orchestration: { webSearch, think, delegateToMiniRAH, executeWorkflow, ... },
|
|
execution: { createNode, updateNode, createEdge, updateEdge, youtubeExtract, websiteExtract, paperExtract, ... }
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Key Design Decisions
|
|
|
|
### Append-Only Updates
|
|
|
|
`updateNode` is **append-only** — it cannot overwrite existing content. This prevents AI from accidentally destroying knowledge. The tool-level enforcement means workflows can't bypass this restriction.
|
|
|
|
### No Workflow Delegation Loops
|
|
|
|
wise-rah cannot call `executeWorkflow` or delegate to other wise-rah instances. This prevents infinite loops and keeps execution bounded.
|
|
|
|
### Isolated Execution
|
|
|
|
Workers (wise-rah, mini-rah) execute in isolated sessions. They return structured summaries only — they don't pollute orchestrator context with execution details.
|