Skip to main content
Risoluto integrates with Slack for notifications and GitHub for automated git workflows.

Notification Channels

Configure Slack to receive alerts when agents complete, fail, or stall:
notifications:
  slack:
    webhookUrl: $SECRET:SLACK_WEBHOOK_URL
    verbosity: critical  # off | critical | verbose
Slack messages are formatted with Block Kit — each notification includes a header, issue context, event details, and a link back to the Linear issue.

Notification Events

Every notification carries a type, severity, and issue context:
Event TypeSeverityTrigger
issue_claimedinfoIssue picked up from the tracker queue
worker_launchedinfoAgent worker container started
worker_completedinfoAgent finished work successfully
worker_retrycriticalAgent failed and is being retried
worker_failedcriticalAgent failed permanently (no retries left)

Verbosity Levels

VerbosityEvents Delivered
offNo notifications
criticalOnly worker_retry and worker_failed (failures and errors)
verboseAll events including completions and claims
Notifications are best-effort. Delivery failures are logged but do not crash the orchestrator.
The notification manager deduplicates identical events within a 30-second window. An event is considered duplicate if it matches the same combination of:
  • Event type
  • Issue identifier
  • Attempt number
  • Severity
  • Message text
Events with an explicit dedupeKey field use that key instead. This prevents notification floods during rapid retry cycles.
Every notification event carries this structure:
interface NotificationEvent {
  type: NotificationEventType;       // "issue_claimed" | "worker_launched" | ...
  severity: "info" | "critical";
  timestamp: string;                 // ISO 8601
  message: string;                   // Human-readable summary
  issue: {
    id: string | null;
    identifier: string;              // e.g. "FE-123"
    title: string;
    state: string | null;
    url: string | null;              // Link to Linear issue
  };
  attempt: number | null;
  metadata?: Record<string, unknown>;
  dedupeKey?: string;
}

Repository Routing

Route issues to different repositories based on identifier prefix or Linear label:
repos:
  - prefix: "FE-"
    url: "https://github.com/org/frontend.git"
    default_branch: "main"
  - label: "backend"
    url: "https://github.com/org/backend.git"
    default_branch: "main"
Routing precedence:
  1. Label routes are checked first (per-issue overrides)
  2. Identifier-prefix routes are the fallback (team-to-repo mapping)

Managing Routes via API

curl -s http://127.0.0.1:4000/api/v1/setup/repo-routes

Git Automation

When a routed issue reports RISOLUTO_STATUS: DONE, Risoluto can automatically:
1

Commit

Stage and commit all changes in the workspace branch.
2

Push

Push the branch to the remote repository.
3

Open PR

Create a GitHub pull request with the issue context, agent summary, and a link back to the Linear issue.
Agents can also interact with GitHub during execution through the github_api dynamic tool — reading PR review comments, posting progress updates, and referencing related issues.
Store credentials via the setup wizard rather than environment variables. The encrypted secrets store (secrets.enc) is more secure than plaintext env vars in .env files.

What’s Next

Security

Harden API access and sandbox isolation.

Monitoring Stack

Set up Prometheus + Grafana for production alerting.
Last modified on March 31, 2026