Project Tool Integration
Connect Codebolt to project management tools like Linear, Jira, or GitHub Issues. Route tickets to agents, post results back, and keep project state in sync.
When to Use
- Automatically triage incoming tickets with an agent.
- Run an agent when a ticket is assigned or status changes.
- Post agent results (code review, test results, deployment status) as comments on tickets.
- Sync task state between Codebolt and your project tool.
Architecture
Project Tool (Linear, Jira, etc.)
│
│ Webhook / WebSocket
▼
Channel Plugin (your plugin)
│
│ plugin.gateway.routeMessage()
▼
Codebolt Gateway → Agent
│
│ Agent completes task
▼
plugin.gateway.onReply() → Post back to project tool API
How It Works
Project tool integrations follow the same channel plugin pattern as chat integrations:
- Receive events from the project tool (via webhook or WebSocket).
- Route to an agent using
plugin.gateway.routeMessage(). - Listen for replies via
plugin.gateway.onReply(). - Post results back to the project tool using its API.
Example: Linear integration pattern
The linear-agent-plugin connects to Linear via a Cloudflare Worker that receives Linear webhooks and forwards them over WebSocket:
Linear → Webhook → Cloudflare Worker → WebSocket → Plugin → Gateway → Agent
│
Agent reply → Plugin → Linear API (post comment, update issue)
The plugin:
- Connects to an external WebSocket endpoint that receives webhooks.
- Parses incoming events (issue created, comment added, etc.).
- Routes them as messages to the configured agent.
- Posts agent responses back via the Linear API.
Plugin SDK APIs used
import plugin from '@codebolt/plugin-sdk';
// Route incoming project tool event to an agent
await plugin.gateway.routeMessage({
source: 'channel',
sourceId: 'plugin-linear',
threadStrategy: 'per-conversation',
agentId: config.agentId,
text: issue.description,
userId: issue.creatorId,
externalThreadId: issue.id,
replyTo: {
channelId: 'linear',
externalThreadId: issue.id,
userId: issue.creatorId,
},
metadata: { issueId: issue.id, issueTitle: issue.title },
timestamp: new Date().toISOString(),
});
// Handle agent replies
plugin.gateway.onReply(async (reply) => {
// Post reply back to the project tool
await linearClient.commentCreate({
issueId: reply.metadata?.issueId,
body: reply.text,
});
});
Building Your Own
To integrate a new project tool:
- Create a channel plugin (type:
channelinpackage.json). - Set up a way to receive events — webhook endpoint, polling, or WebSocket.
- Parse events and call
plugin.gateway.routeMessage()to send them to agents. - Handle replies via
plugin.gateway.onReply()and post back using the tool's API. - Add a UI panel for configuration (API keys, project selection, agent mapping).
See Chat Integrations for the full channel plugin pattern — project tools follow the same architecture.
See Also
- Chat Integrations — the channel plugin pattern
- Gateway — message routing and thread management
- Build Your First Dynamic Panel — add a config UI