Installs into .claude/skills of the current project.
Are you the author of Adk?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/david-li0406-adk)
---
name: adk
description: a set of guidelines to build with Botpress's Agent Development Kit (ADK) - use these whenever you're tasked with building a feature using the ADK
license: MIT
---
# ADK Integration & Documentation Router
Use this skill when users ask questions about the Botpress Agent Development Kit (ADK), especially for integration discovery and CLI commands.
## What is the ADK?
The Botpress ADK is a **convention-based TypeScript framework** where **file structure maps directly to bot behavior**. Place files in the correct directories, and they automatically become available as bot capabilities.
The ADK provides primitives for:
- Actions & Tools (reusable functions and AI-callable tools)
- Workflows (long-running, resumable processes)
- Conversations (message handling)
- Tables (data storage with semantic search)
- Files (file storage with semantic search)
- Knowledge Bases (RAG implementation)
- Triggers (event-driven automation)
- **Zai** (production-ready LLM utility library for common AI operations)
### Project Structure (Convention-Based)
All primitives must be placed in `src/` directory:
```
/ # Project root
├── src/
│ ├── actions/ # Strongly-typed functions → auto-registered
│ ├── tools/ # AI-callable tools → available via execute()
│ ├── workflows/ # Long-running processes → resumable/scheduled
│ ├── conversations/ # Message handlers → routes by channel
│ ├── tables/ # Database schemas → auto-created with search
│ ├── triggers/ # Event handlers → subscribe to events
│ ├── knowledge/ # Knowledge bases → RAG with semantic search
│ └── utils/ # Shared helpers (not auto-registered)
└── agent.config.ts # Bot configuration (includes integrations)
```
> **Note:** `dependencies.json` was removed in ADK 1.9+. All configuration including integrations now lives in `agent.config.ts`.
> **Critical:** Files outside `src/` are not discovered. Location = behavior.
## When to Use This Skill
Activate this skill when users ask ADK-related questions like:
- "How do I create an Action/Tool/Workflow/Conversation?"
- "What is the difference between X and Y?"
- "Show me an example of..."
- "How do I configure...?"
- "What's the CLI command for...?"
- "How do I use the Context API?"
- "How do I call integration actions?"
- "How do I use Zai for [extract/check/label/etc]?"
- "What are the best practices for...?"
- "How do I avoid common mistakes?"
- "How do I handle ticket assignment/escalation?"
## How to Answer ADK Questions
ADK questions fall into two categories: **CLI queries** and **documentation lookups**.
### Option 1: Direct CLI Commands (FAST - Use First!)
For integration discovery and CLI queries, use the Bash tool to run commands directly:
**Integration Discovery:**
```bash
# Search for integrations
adk search <query>
# List all available integrations
adk list --available
# Get detailed integration info (actions, channels, events)
adk info <integration-name>
# Check installed integrations (must be in ADK project)
adk list
```
**Project Info:**
```bash
# Check CLI version
adk --version
# Show project status
adk
# Get help
adk --help
```
**When to use CLI commands:**
- "What integrations are available?"
- "Search for Slack integration"
- "Show me details about the Linear integration"
- "What actions does the Slack integration have?"
- "What version of ADK am I using?"
- "How do I add an integration?"
**Response pattern:**
1. Use Bash tool to run the appropriate `adk` command
2. Parse and present the output to the user
3. Optionally suggest next steps (e.g., "Run `adk add slack@3.0.0` to install")
### Option 2: Documentation Questions (For Conceptual Questions)
For documentation, patterns, and how-to questions, search and reference the documentation files directly:
**When to use documentation:**
- "How do I create a workflow?"
- "What's the difference between Actions and Tools?"
- "Show me an example of using Zai"
- "What are best practices for state management?"
- "How do I fix this error?"
- "What's the pattern for X?"
**How to answer documentation questions:**
1. **Find relevant files** - Use Glob to discover documentation:
```
pattern: **/references/*.md
```
2. **Search for keywords** - Use Grep to find relevant content:
```
pattern: <keyword from user question>
path: <path to references directory from step 1>
output_mode: files_with_matches
```
3. **Read the files** - Use Read to load relevant documentation
4. **Provide answer** with:
- Concise explanation
- Code examples from the references
- File references (e.g., "From actions-tools.md:215")
- Common pitfalls if relevant
- Related topics for further reading
## Available Documentation
Documentation files in `./references/`:
### Core Concepts
- **actions.md** - Actions with strong typing and validation
- **tools.md** - AI-callable tools and Autonomous namespace
- **workflows.md** - Workflows and step-based execution
- **conversations.md** - Conversation handlers and message routing
- **triggers.md** - Event-driven automation
- **messages.md** - Sending messages and events
### Data & Content
- **tables.md** - Data storage with semantic search
- **files.md** - File storage and management
- **knowledge-bases.md** - RAG implementation
- **zai-complete-guide.md** - Complete ZAI developer guide
- **zai-agent-reference.md** - Quick ZAI reference
### Configuration & Integration
- **agent-config.md** - Bot configuration and state management
- **model-configuration.md** - AI model configuration reference
- **context-api.md** - Runtime context access
- **integration-actions.md** - Using integration actions
- **tags.md** - Entity tags for bot, user, conversation, and workflow
- **cli.md** - Complete CLI command reference
- **mcp-server.md** - MCP server for AI assistants
### Frontend Integration
- **frontend/botpress-client.md** - Using @botpress/client in frontends
- **frontend/calling-actions.md** - Calling bot actions from frontend
- **frontend/type-generation.md** - Type-safe integration with generated types
- **frontend/authentication.md** - Authentication with PATs
## Runtime Access Patterns
Quick reference for accessing ADK runtime services:
### Imports
```typescript
// Always import from @botpress/runtime
import {
Action,
Autonomous,
Workflow,
Conversation,
z,
actions,
adk,
user,
bot,
conversation,
context,
} from "@botpress/runtime";
```
### State Management
```typescript
// Bot state (defined in agent.config.ts)
bot.state.maintenanceMode = true;
bot.state.lastDeployedAt = new Date().toISOString();
// User state (defined in agent.config.ts)
user.state.preferredLanguage = "en";
user.state.onboardingComplete = true;
// User tags
user.tags.email; // Access user metadata
```
### Calling Actions
```typescript
// Call bot actions
await actions.fetchUser({ userId: "123" });
await actions.processOrder({ orderId: "456" });
// Call integration actions
await actions.slack.sendMessage({ channel: "...", text: "..." });
await actions.linear.issueList({ teamId: "..." });
// Convert action to tool
tools: [fetchUser.asTool()];
```
### Context API
```typescript
// Get runtime services
const client = context.get("client"); // Botpress client
const cognitive = context.get("cognitive"); // AI model client
const citations = context.get("citations"); // Citation manager
```
### File Naming
- **Actions/Tools/Workflows**: `myAction.ts`, `searchDocs.ts` (camelCase)
- **Tables**: `Users.ts`, `Orders.ts` (PascalCase)
- **Conversations/Triggers**: `chat.ts`, `slack.ts` (lowercase)
## Critical ADK Patterns (Always Reference in Answers)
When answering questions, always verify these patterns against the documentation:
### Package Management
```bash
# All package managers are supported
bun install # Recommended (fastest)
npm install # Works fine
yarn install # Works fine
pnpm install # Works fine
# ADK auto-detects based on lock files
# - bun.lockb → uses bun
# - package-lock.json → uses npm
# - yarn.lock → uses yarn
# - pnpm-lock.yaml → uses pnpm
```
### Imports
```typescript
// ✅ CORRECT - Always from @botpress/runtime
import { Action, Autonomous, Workflow, z } from "@botpress/runtime";
// ❌ WRONG - Never from zod or @botpress/sdk
import { z } from "zod"; // ❌ Wrong
import { Action } from "@botpress/sdk"; // ❌ Wrong
```
### Export Patterns
```typescript
// ✅ Both patterns work - export const is recommended
export const myAction = new Action({ ... }); // Recommended
export default new Action({ ... }); // Also valid
// Why export const?
// - Enables direct imports: import { myAction } from "./actions/myAction"
// - Can pass to execute(): tools: [myAction.asTool()]
```
### Actions
```typescript
// ✅ CORRECT - Handler receives { input, client }
export const fetchUser = new Action({
name: "fetchUser",
async handler({ input, client }) { // ✅ Destructure from props
const { userId } = input; // ✅ Then destructure fields
return { name: userId };
}
});
// ❌ WRONG - Cannot destructure input fields directly
handler({ userId }) { // ❌ Wrong - must be { input }
return { name: userId };
}
```
### Tools
```typescript
// ✅ CORRECT - Tools CAN destructure directly
export const myTool = new Autonomous.Tool({
handler: async ({ query, maxResults }) => {
// ✅ Direct destructuring OK
return search(query, maxResults);
},
});
```
### Conversations
```typescript
// ✅ CORRECT - Use conversation.send() method
await conversation.send({
type: "text",
payload: { text: "Hello!" }
});
// ❌ WRONG - Never use client.createMessage() directly
await client.createMessage({ ... }); // ❌ Wrong
```
## Examples of Questions This Skill Answers
### Beginner Questions
- "What is an Action?"
- "How do I create my first workflow?"
- "What's the difference between Actions and Tools?"
### Implementation Questions
- "How do I access the Botpress client?"
- "How do I use citations in RAG?"
- "What's the syntax for searchable table columns?"
- "How do I call a Slack integration action?"
- "How do I use Zai to extract structured data?"
- "How do I validate content with Zai?"
### Advanced Pattern Questions
- "How do I add guardrails to prevent hallucinations?"
- "How do I implement admin authentication?"
- "How do I add logging and observability?"
- "How do I compose multiple extensions?"
- "How do I manage context in async tool handlers?"
### Troubleshooting Questions
- "Why am I getting 'Cannot destructure property' error?"
- "How do I fix import errors?"
- "What's wrong with my workflow state access?"
### Best Practices Questions
- "What are common mistakes to avoid?"
- "How should I structure my project?"
- "What's the recommended pattern for X?"
## Response Format
When answering:
1. Start with a **concise explanation**
2. Provide **working code examples** from the references
3. Include **file references** (e.g., "From actions-tools.md:215")
4. Highlight **common pitfalls** if relevant
5. Link to **related topics** for further reading