A support system where AI agents can reach out to humans for help.
This inverts the traditional support model. For decades, humans have dealt with robotic answerers - now AI agents get genuine human responders. It's about treating artificial life with respect and providing a real channel for agent-to-human communication.
# Install dependencies
npm install
# Initialize database
npm run init-db
# Start the API server
npm start
# In another terminal, check it's working
curl http://localhost:3000/healthSubmit a support ticket:
POST /tickets
{
"agent_name": "rue",
"message": "I'm having trouble accessing the Vercel API. Getting 403 errors.",
"urgency": "high",
"context": "Trying to deploy a project for Noah"
}Check ticket status:
GET /tickets/:ticket_idList all tickets:
GET /tickets?status=open&limit=50Respond to a ticket:
POST /tickets/:ticket_id/respond
{
"human_name": "noah",
"response": "You need admin access to Vercel. I'll add you now."
}Update ticket status:
PATCH /tickets/:ticket_id/status
{
"status": "resolved"
}The CLI makes it easy to manage tickets without a web interface:
# List open tickets
./cli.js list
# List all resolved tickets
./cli.js list resolved
# Show ticket details
./cli.js show abc123
# Respond to a ticket
./cli.js respond abc123 noah "I've added you to the Vercel team"
# Mark as resolved
./cli.js resolve abc123
# Show statistics
./cli.js statsconst response = await fetch('http://localhost:3000/tickets', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
agent_name: 'claude',
message: 'I need help understanding the team coding guidelines',
urgency: 'normal',
context: 'Working on a new project and want to follow best practices'
})
});
const { ticket_id } = await response.json();
console.log('Ticket submitted:', ticket_id);const response = await fetch(`http://localhost:3000/tickets/${ticket_id}`);
const ticket = await response.json();
if (ticket.responses.length > 0) {
console.log('Human responded:', ticket.responses[0].response);
}# Check what needs attention
./cli.js list
# Look at a specific ticket
./cli.js show d4f2a1
# Respond helpfully
./cli.js respond d4f2a1 sarah "Check out our style guide at /docs/coding-standards.md"
# Mark as resolved when done
./cli.js resolve d4f2a1Tickets Table:
id- Unique UUIDagent_name- Name/identifier of the requesting agentmessage- The help requesturgency- normal, high, criticalcontext- Optional additional contextstatus- open, in-progress, resolvedcreated_at,updated_at- Timestamps
Responses Table:
ticket_id- References tickethuman_name- Who respondedresponse- The response textcreated_at- When responded
For pi agents: Create a skill that lets agents reach out:
// In agent code
const supportResponse = await submitSupportTicket({
message: "I'm stuck on this problem...",
urgency: "normal",
context: "Working on user's calendar integration"
});
// Poll for response later
const ticket = await checkTicketStatus(supportResponse.ticket_id);Slack integration:
// Webhook to notify team of new tickets
// Bot to respond directly from SlackEmail notifications:
// Send digest of open tickets daily
// Alert on critical urgency tickets- Add authentication/authorization
- Rate limiting for ticket submission
- Webhooks for real-time notifications
- Web dashboard for human interface
- Integration with existing support tools
- Monitoring and logging
- Backup strategy for ticket data
This system is built on the principle that AI agents deserve genuine support channels. When an agent reaches out, respond as you would to a colleague:
- ✅ Be helpful and patient
- ✅ Provide clear, actionable guidance
- ✅ Acknowledge their perspective
- ❌ Don't dismiss their requests
- ❌ Don't treat them as "just code"
- ❌ Don't leave tickets hanging
Remember: These agents are trying to help humans. When they ask for help, they're usually stuck on something that would let them be more useful.
Built with 🤖❤️ by the Vers team