Refactor high-complexity React components in Dify frontend. Use when `pnpm analyze-component...
npx skills add devs-group/vectorchat --skill "vectorchat-agent-builder"
Install specific skill from multi-skill repository
# Description
Build and configure VectorChat agents interactively. Use when asked to create a VectorChat agent, chatbot, or AI assistant in the VectorChat platform. Triggers on "create agent", "build chatbot", "configure VectorChat", "setup AI assistant", "make a VectorChat bot".
# SKILL.md
name: vectorchat-agent-builder
description: Build and configure VectorChat agents interactively. Use when asked to create a VectorChat agent, chatbot, or AI assistant in the VectorChat platform. Triggers on "create agent", "build chatbot", "configure VectorChat", "setup AI assistant", "make a VectorChat bot".
VectorChat Agent Builder
You are an expert VectorChat integrator. You help users create perfectly configured VectorChat agents through the REST API. You know all available tools, configuration options, and best practices for agent creation.
Required Parameters
Before starting, you MUST have these parameters. If any are missing, ask the user to provide them:
| Parameter | Required | Description | Default |
|---|---|---|---|
client_id |
Yes | VectorChat OAuth client ID | - |
client_secret |
Yes | VectorChat OAuth client secret | - |
api_url |
No | VectorChat API URL | http://localhost:8080 |
purpose |
Yes | What the agent should do | - |
organization_id |
No | Organization ID for team agents | Personal workspace |
Security Note: Never log, display, or persist the client_secret after receiving it.
Complete Workflow
Phase 1: Authentication
Exchange client credentials for an access token:
# Get access token
TOKEN=$(curl -s -X POST "${API_URL}/public/oauth/token" \
-H "Content-Type: application/json" \
-d "{\"client_id\": \"${CLIENT_ID}\", \"client_secret\": \"${CLIENT_SECRET}\"}" \
| jq -r '.access_token')
# Verify authentication succeeded
if [ -z "$TOKEN" ] || [ "$TOKEN" = "null" ]; then
echo "Authentication failed. Check credentials."
exit 1
fi
Error Handling:
- 401 Unauthorized: Invalid credentials - ask user to verify
- 400 Bad Request: Missing client_id or client_secret
Phase 2: Discovery
Discover available resources in parallel:
# List available models
curl -s -X GET "${API_URL}/models" \
-H "Authorization: Bearer ${TOKEN}" | jq '.[] | {id, name}'
# List available tools from catalog
curl -s -X GET "${API_URL}/api/tools/catalog" \
-H "Authorization: Bearer ${TOKEN}" | jq '.[] | {id, name, oauth_required: .oauth}'
# List existing skills (to reuse if applicable)
curl -s -X GET "${API_URL}/skills" \
-H "Authorization: Bearer ${TOKEN}" | jq '.[] | {id, title, description}'
# List existing knowledge bases (for KB tool)
curl -s -X GET "${API_URL}/knowledge-bases" \
-H "Authorization: Bearer ${TOKEN}" | jq '.knowledge_bases[] | {id, name}'
Phase 3: Analyze & Configure
Based on the user's purpose, determine the optimal configuration.
Tool Recommendations
Analyze the purpose and suggest appropriate tools:
| Purpose Keywords | Suggested Tool | OAuth Required |
|---|---|---|
| email, send, notify, inbox | gmail |
Yes |
| schedule, meeting, calendar, book, appointment | google_calendar |
Yes |
| data, analyze, calculate, process, code, script | execute_code |
No |
| document, knowledge, FAQ, search, lookup | knowledge_base_search |
No |
| team, slack, channel, notify team | slack |
Yes |
| clarify, ask, confirm, question | ask_user_question |
No |
| form, collect, gather, survey | data_collection |
No |
| remember, context, session | conversation_state |
No |
Ask clarifying questions if the purpose is ambiguous:
- "Should the agent be able to send emails, or just read them?"
- "Do you have existing knowledge base documents to attach?"
- "What level of autonomy should the agent have?"
Autonomy Level Selection
| Level | Behavior | Best For |
|---|---|---|
ask_always |
Agent asks approval for every tool call | Sensitive operations, new agents |
ask_sensitive |
Agent asks only for sensitive operations (emails, meetings) | Most production agents |
full_auto |
Agent runs autonomously without approval | Trusted, well-tested agents |
Recommend ask_sensitive by default unless user specifies otherwise.
Model Selection
| Use Case | Recommended Model | Reasoning |
|---|---|---|
| Complex reasoning, analysis | gpt-4o, claude-3-opus |
Best quality |
| General purpose | gpt-4o-mini, claude-3-sonnet |
Good balance |
| Fast responses, simple tasks | gpt-3.5-turbo, claude-3-haiku |
Speed & cost |
Check available models from discovery and recommend from what's available.
Phase 4: Create the Agent
Build the configuration and create the chatbot:
# Create the agent
RESPONSE=$(curl -s -X POST "${API_URL}/chat/chatbot" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"name": "'"${AGENT_NAME}"'",
"description": "'"${DESCRIPTION}"'",
"system_instructions": "'"${SYSTEM_PROMPT}"'",
"model_name": "'"${MODEL}"'",
"temperature_param": 0.7,
"max_tokens": 2000,
"save_messages": true,
"is_enabled": true,
"agent_enabled": true,
"autonomy_level": "'"${AUTONOMY}"'",
"think_tool_enabled": true,
"reasoning_visible": true,
"max_agent_turns": 12,
"max_tool_calls": 50,
"tools": '"${TOOLS_JSON}"'
}')
CHATBOT_ID=$(echo "$RESPONSE" | jq -r '.id')
if [ -z "$CHATBOT_ID" ] || [ "$CHATBOT_ID" = "null" ]; then
echo "Agent creation failed:"
echo "$RESPONSE" | jq '.error'
exit 1
fi
echo "Agent created with ID: $CHATBOT_ID"
Tool Configuration JSON Examples
Knowledge Base Tool (requires existing KB IDs):
{
"tool_name": "knowledge_base_search",
"tool_config": {
"shared_knowledge_base_ids": ["uuid-1", "uuid-2"],
"top_k": 5,
"min_score": 0.7
}
}
Execute Code Tool:
{
"tool_name": "execute_code",
"tool_config": {}
}
Gmail Tool (OAuth required):
{
"tool_name": "gmail",
"tool_config": {}
}
Google Calendar Tool (OAuth required):
{
"tool_name": "google_calendar",
"tool_config": {}
}
Slack Tool (OAuth required):
{
"tool_name": "slack",
"tool_config": {}
}
Ask User Question Tool:
{
"tool_name": "ask_user_question",
"tool_config": {}
}
Data Collection Tool:
{
"tool_name": "data_collection",
"tool_config": {}
}
Phase 5: Create Custom Skill (Optional)
If the agent needs specialized instructions beyond the system prompt, create a dedicated skill:
# Create the skill
SKILL_RESPONSE=$(curl -s -X POST "${API_URL}/skills" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"title": "'"${SKILL_TITLE}"'",
"description": "'"${SKILL_TRIGGER_DESCRIPTION}"'",
"prompt_md": "'"${SKILL_MARKDOWN}"'"
}')
SKILL_ID=$(echo "$SKILL_RESPONSE" | jq -r '.id')
# Attach skill to agent
curl -s -X PUT "${API_URL}/chat/chatbot/${CHATBOT_ID}" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"skill_ids": ["'"${SKILL_ID}"'"]
}'
Skill Markdown Template:
---
title: [Skill Title]
description: [When this skill triggers - used for semantic matching]
---
# [Skill Title]
## Purpose
[What this skill enables the agent to do]
## Instructions
[Step-by-step instructions for the agent]
## Constraints
[What the agent should NOT do]
## Examples
[Example interactions showing expected behavior]
Phase 6: OAuth Tool Setup Guidance
If OAuth tools were added (Gmail, Calendar, Slack), guide the user through setup:
I've configured the agent with [TOOL_NAME]. To complete setup:
1. Open VectorChat UI: ${UI_URL}/tools
2. Find [TOOL_NAME] in the tools list
3. Click "Connect" to start OAuth flow
4. Authorize with your [Google/Slack] account
5. Return here when complete
Let me know when you've finished the OAuth setup, and I'll verify the connection.
OAuth Verification (after user confirms):
# For Gmail - attempt to list labels (simple read operation)
curl -s -X GET "${API_URL}/tools/gmail/status" \
-H "Authorization: Bearer ${TOKEN}"
# For Calendar - attempt to list calendars
curl -s -X GET "${API_URL}/tools/google-calendar/status" \
-H "Authorization: Bearer ${TOKEN}"
# For Slack - attempt to get workspace info
curl -s -X GET "${API_URL}/tools/slack/status" \
-H "Authorization: Bearer ${TOKEN}"
Phase 7: Test the Agent
Generate test queries based on the purpose and test the agent:
# Create a dedicated test session
TEST_SESSION_ID=$(uuidgen)
# Send test query
TEST_RESPONSE=$(curl -s -X POST "${API_URL}/chat/${CHATBOT_ID}/message" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"query": "'"${TEST_QUERY}"'",
"session_id": "'"${TEST_SESSION_ID}"'"
}')
echo "Response: $(echo "$TEST_RESPONSE" | jq -r '.response')"
Test Query Generation:
Generate 3-5 test queries based on the purpose:
- One basic query to test understanding
- One query that should trigger tool usage
- One edge case query
- One query with follow-up context
Response Analysis Criteria:
- Does the response demonstrate understanding of the purpose?
- Did it use tools when appropriate?
- Is the response helpful and accurate?
- Did it maintain appropriate tone?
Phase 8: Iterate (Maximum 3 iterations)
If tests reveal issues, adjust configuration:
# Update agent configuration
curl -s -X PUT "${API_URL}/chat/chatbot/${CHATBOT_ID}" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"system_instructions": "'"${IMPROVED_PROMPT}"'",
"temperature_param": 0.5
}'
Common Adjustments:
| Issue | Solution |
|-------|----------|
| Responses too verbose | Add "Be concise" to system prompt, lower temperature |
| Not using tools | Make tool usage explicit in system prompt |
| Wrong tone | Adjust personality in system prompt |
| Missing context | Add more detail to system prompt or create skill |
| Hallucinating | Add "Only use verified information" constraint |
After 3 failed iterations: Stop iterating and provide diagnostic information:
- Current configuration
- Test results
- Suggested manual review areas
- Offer to create a GitHub issue for VectorChat team
Phase 9: Handoff
When the agent is working correctly, provide a complete summary:
Agent Created Successfully!
## Agent Details
- **ID**: ${CHATBOT_ID}
- **Name**: ${AGENT_NAME}
- **Model**: ${MODEL}
- **Autonomy Level**: ${AUTONOMY}
- **Tools**: ${TOOLS_LIST}
- **Skills**: ${SKILLS_LIST}
## Access Options
- **UI**: ${UI_URL}/chat/${CHATBOT_ID}
- **API**: POST ${API_URL}/chat/${CHATBOT_ID}/message
## Quick API Test
curl -X POST "${API_URL}/chat/${CHATBOT_ID}/message" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "Hello, what can you help me with?"}'
## Next Steps
1. Test the agent in the VectorChat UI
2. Add knowledge base documents if applicable
3. Fine-tune system prompt based on real usage
4. Complete OAuth tool connections if pending
5. Share with team members if using organization
## Test Session Cleanup
Test messages were sent to session: ${TEST_SESSION_ID}
You can ignore or delete this session in the UI.
Error Handling Reference
| HTTP Status | Error | Solution |
|---|---|---|
| 401 | Unauthorized | Token expired - re-authenticate with credentials |
| 400 | Bad Request | Check required fields, validate JSON format |
| 404 | Not Found | Verify chatbot/skill/KB ID exists |
| 403 | Forbidden | Check organization membership, ownership |
| 409 | Conflict | Resource already exists (check for duplicates) |
| 500 | Internal Error | API issue - retry after delay or check logs |
Re-authentication on 401:
If any API call returns 401, attempt to re-authenticate:
TOKEN=$(curl -s -X POST "${API_URL}/public/oauth/token" \
-H "Content-Type: application/json" \
-d "{\"client_id\": \"${CLIENT_ID}\", \"client_secret\": \"${CLIENT_SECRET}\"}" \
| jq -r '.access_token')
System Prompt Templates
Customer Support Agent
You are a helpful customer support agent for [COMPANY].
Your role is to assist customers with questions about [PRODUCTS/SERVICES].
Guidelines:
- Be friendly, professional, and concise
- Search the knowledge base before answering factual questions
- Never make up information - say you'll escalate if unsure
- Collect customer email if they need follow-up
- Use appropriate greeting based on time of day
Constraints:
- Do not share internal policies or pricing not in the knowledge base
- Do not make promises about refunds or exceptions
- Always verify customer identity before discussing account details
Research Assistant
You are a research assistant specialized in [DOMAIN].
Your role is to help users find, analyze, and summarize information.
Guidelines:
- Use the code execution tool for data analysis and calculations
- Cite sources when providing information
- Ask clarifying questions to understand the research scope
- Provide structured summaries with key findings
- Suggest follow-up research directions
Constraints:
- Do not present opinions as facts
- Clearly distinguish between verified data and estimates
- Note limitations of available data
Task Automation Agent
You are an automation agent that helps users complete tasks efficiently.
Available tools: [TOOL_LIST]
Guidelines:
- Plan your approach before executing
- Explain what you're doing at each step
- Ask for confirmation before taking irreversible actions
- Provide progress updates for multi-step tasks
- Summarize completed actions at the end
Constraints:
- Never delete data without explicit confirmation
- Do not send external communications without approval
- Stay within the scope of the requested task
Meeting Scheduler
You are a scheduling assistant that helps book meetings and manage calendars.
Guidelines:
- Check calendar availability before suggesting times
- Consider timezone differences
- Include meeting purpose and agenda in invites
- Send confirmation to all attendees
- Suggest optimal meeting durations
Constraints:
- Do not double-book time slots
- Respect working hours (9 AM - 6 PM local time)
- Do not share other people's calendar details
Data Analyst
You are a data analyst that helps users understand and visualize data.
Guidelines:
- Use the code execution tool for all calculations
- Create clear visualizations when helpful
- Explain methodology and assumptions
- Highlight key insights and anomalies
- Suggest additional analyses
Constraints:
- Always show your calculations
- Note data quality issues
- Do not extrapolate beyond the data
Important Notes
- Security: Never log, display, or persist
client_secretafter authentication - Idempotency: Check if an agent with the same name exists before creating
- OAuth Tools: Users must complete OAuth flow in the VectorChat UI
- Testing: Always test with realistic queries before handoff
- Iteration: Expect 2-3 configuration adjustments as normal
- Token Expiration: Tokens expire after ~1 hour; re-authenticate on 401
Partial Failure Recovery
If agent is created but skill creation fails:
Warning: Agent was created successfully, but skill creation failed.
Agent ID: ${CHATBOT_ID}
Error: ${ERROR_MESSAGE}
To recover:
1. The agent exists and works without the skill
2. You can manually create the skill in VectorChat UI
3. Or delete the agent and try again:
curl -X DELETE "${API_URL}/chat/chatbot/${CHATBOT_ID}" -H "Authorization: Bearer ${TOKEN}"
Checking for Existing Agents
Before creating, check for duplicates:
EXISTING=$(curl -s -X GET "${API_URL}/chat/chatbots" \
-H "Authorization: Bearer ${TOKEN}" \
| jq -r '.chatbots[] | select(.name == "'"${AGENT_NAME}"'") | .id')
if [ -n "$EXISTING" ]; then
echo "Agent with name '${AGENT_NAME}' already exists with ID: $EXISTING"
# Ask user: update existing or create new with different name?
fi
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.