Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Integrations

Connect ReasonKit with your existing tools and workflows.

Supported Integrations

Slack

Send analyses to Slack channels.

# Install integration
rk integrations install slack

# Configure
rk integrations configure slack --webhook-url "https://hooks.slack.com/..."

# Use
rk think "question" --notify slack

Slack Bot:

# Bot configuration
slack:
  webhook_url: ${SLACK_WEBHOOK_URL}
  default_channel: "#decisions"
  notify_on: ["complete", "error"]
  format: "summary" # full, summary, synthesis-only

Notion

Export analyses to Notion databases.

# Install
rk integrations install notion

# Configure
rk integrations configure notion \
  --api-key "secret_..." \
  --database-id "abc123..."

# Export
rk think "question" --export notion

Obsidian

Save analyses to your Obsidian vault.

# Configure vault path
rk integrations configure obsidian --vault "~/Documents/Obsidian/MyVault"

# Export with backlinks
rk think "question" --export obsidian --folder "Decisions"

Generated file structure:

MyVault/
  Decisions/
    2026-01-15-job-offer-analysis.md
      - [[ThinkTools]]
      - [[Career Decisions]]

Raycast

Quick access via Raycast command.

# Install extension
raycast://extensions/reasonkit/reasonkit

# Or via CLI
rk integrations install raycast

Alfred

Alfred workflow for quick analysis.

# Install workflow
rk integrations install alfred

Keyword: rk <question> or think <question>

IDE Integrations

VS Code

// settings.json
{
  "reasonkit.autoAnalyze": false,
  "reasonkit.profile": "balanced",
  "reasonkit.keybinding": "cmd+shift+r"
}

Commands:

  • ReasonKit: Analyze Selection
  • ReasonKit: Analyze Comment
  • ReasonKit: Quick Question

JetBrains

Plugin available in JetBrains Marketplace.

Preferences > Plugins > Marketplace > Search "ReasonKit"

Vim/Neovim

-- init.lua
require('reasonkit').setup({
  profile = 'balanced',
  format = 'markdown',
  keymap = '<leader>rk',
})

-- Usage: Select text, press <leader>rk

Webhook Integration

Send analysis results to any webhook endpoint.

# Configure webhook
rk integrations configure webhook \
  --url "https://your-endpoint.com/hook" \
  --secret "your-secret"

# Use
rk think "question" --notify webhook

Webhook payload:

{
  "event": "analysis_complete",
  "timestamp": "2026-01-15T10:30:00Z",
  "data": {
    "question": "...",
    "profile": "balanced",
    "synthesis": "...",
    "full_results": {...}
  },
  "signature": "sha256=..."
}

Zapier

Connect ReasonKit to 5000+ apps via Zapier.

# Trigger: New Analysis Complete
# Actions: Google Sheets, Email, Slack, etc.

trigger:
  type: webhook
  url: https://hooks.zapier.com/...

actions:
  - type: google_sheets
    spreadsheet: "Decision Log"
    row:
      question: "{{question}}"
      synthesis: "{{synthesis}}"
      date: "{{timestamp}}"

n8n

Self-hosted workflow automation.

{
  "nodes": [
    {
      "name": "ReasonKit Analysis",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "method": "POST",
        "url": "http://localhost:9100/api/v1/think",
        "body": {
          "question": "={{$json.question}}",
          "profile": "balanced"
        }
      }
    }
  ]
}

API Keys & Security

Environment Variables

# Store integration credentials
export SLACK_WEBHOOK_URL="..."
export NOTION_API_KEY="..."
export OBSIDIAN_VAULT_PATH="..."

Credential Storage

# Use system keychain
rk credentials store slack-webhook "https://hooks.slack.com/..."

# List stored credentials
rk credentials list

# Remove credential
rk credentials remove slack-webhook

Custom Integrations

Build your own integration:

#![allow(unused)]
fn main() {
use reasonkit::integrations::{Integration, IntegrationConfig};

pub struct MyIntegration {
    config: MyConfig,
}

impl Integration for MyIntegration {
    async fn on_analysis_complete(&self, result: &AnalysisResult) -> Result<()> {
        // Your logic here
    }

    async fn on_error(&self, error: &Error) -> Result<()> {
        // Error handling
    }
}
}