Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .agent-marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,16 @@
"category": "data & apis",
"source": "./plugins/peec",
"version": "1.0.0"
},
{
"name": "sazabi",
"description": "Investigate production with Sazabi: ask questions about your logs and traces, triage issues, check deploys, build dashboards, and send app and coding-agent telemetry to Sazabi.",
"author": {
"name": "Paradev"
},
"category": "development",
"source": "./plugins/sazabi",
"version": "1.0.0"
}
],
"featured": ["github", "linear"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import ynabIconUrl from "renderer/assets/icons/ynab-icon.png";
import { AutumnIcon } from "./components/AutumnIcon";
import { PeecIcon } from "./components/PeecIcon";
import { ResendIcon } from "./components/ResendIcon";
import { SazabiIcon } from "./components/SazabiIcon";
import { SuperhumanIcon } from "./components/SuperhumanIcon";

/**
Expand Down Expand Up @@ -68,6 +69,7 @@ const PLUGIN_ICONS: Record<string, { icon: IconType; color?: string }> = {
sentry: { icon: SiSentry },
posthog: { icon: SiPosthog },
resend: { icon: ResendIcon },
sazabi: { icon: SazabiIcon, color: "#FF0027" },
linear: { icon: SiLinear },
supabase: { icon: SiSupabase, color: "#3ECF8E" },
context7: { icon: LuBookOpen },
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { GenIcon } from "react-icons";

export const SazabiIcon = GenIcon({
tag: "svg",
attr: { viewBox: "145 190 740 650", fill: "currentColor" },
child: [
{
tag: "path",
attr: {
d: "M255.246 552.975H479.158L398.608 422.361C386.206 402.145 400.875 376.285 424.88 376.285H773.751C784.553 376.285 794.421 370.771 800.022 361.714L874.437 241.076C886.84 220.86 872.17 195 848.166 195H491.294C480.491 195 470.623 200.513 465.022 209.571L374.07 356.988C368.469 366.046 358.467 371.559 347.798 371.559H180.831C156.826 371.559 142.023 397.419 154.559 417.635L228.974 538.272C234.575 547.33 244.577 552.844 255.246 552.844V552.975Z",
},
child: [],
},
{
tag: "path",
attr: {
d: "M773.754 478.157H549.842L630.392 608.771C642.794 628.986 628.125 654.847 604.12 654.847H255.25C244.447 654.847 234.579 660.36 228.978 669.418L154.563 789.924C142.16 810.14 156.83 836 180.835 836H537.706C548.509 836 558.377 830.487 563.978 821.429L654.93 674.012C660.531 664.955 670.533 659.441 681.202 659.441H848.169C872.174 659.441 886.977 633.581 874.441 613.365L800.026 492.728C794.425 483.67 784.423 478.157 773.754 478.157Z",
},
child: [],
},
],
});
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { SazabiIcon } from "./SazabiIcon";
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ const SERVICE_HOSTS: [RegExp, string][] = [
[/(^|\.)superhuman\.com$/, "superhuman"],
[/(^|\.)circleback\.ai$/, "circleback"],
[/(^|\.)peec\.ai$/, "peec"],
[/(^|\.)sazabi\.com$/, "sazabi"],
[/(^|\.)supabase\.(com|co)$/, "supabase"],
];

Expand Down
1 change: 1 addition & 0 deletions apps/docs/content/docs/plugins/available/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ Install these from **Plugins** in the sidebar. Each one adds MCP tools to [suppo
| [GitHub](/plugins/available/github) | Developer tools | Your GitHub account |
| [Sentry](/plugins/available/sentry) | Developer tools | Your Sentry organization |
| [Resend](/plugins/available/resend) | Developer tools | Your Resend team |
| [Sazabi](/plugins/available/sazabi) | Developer tools | Your Sazabi organization |
| [Stripe](/plugins/available/stripe) | Data & APIs | Your Stripe account |
| [Peec AI](/plugins/available/peec) | Data & APIs | Your Peec AI account |
| [Linear](/plugins/available/linear) | Productivity | Your Linear workspace |
Expand Down
1 change: 1 addition & 0 deletions apps/docs/content/docs/plugins/available/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"stripe",
"peec",
"resend",
"sazabi",
"linear",
"notion",
"granola",
Expand Down
34 changes: 34 additions & 0 deletions apps/docs/content/docs/plugins/available/sazabi.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
---
title: Sazabi
description: Investigate production from your agent with Sazabi's logs, traces and issues, and check a deploy before you call it done
---

Investigate production from your agent. Ask Sazabi questions about your logs, traces and metrics in plain language, work through the issues Sazabi opened on its own, check that a deploy did what it was meant to, and get your app's and your coding agents' telemetry into Sazabi.

## Skills

| Skill | What it does |
|:------|:-------------|
| `investigate-production` | Starts from known issues and past investigations, asks the logs precise questions, and reports what fails, why, and who it hits before it changes code |
| `verify-a-deploy` | Compares the error or behavior a change targets before and after the deploy, and checks for new errors, before it calls the task done |
| `triage-issues` | Ranks the issues Sazabi opened by impact, finds each one's cause in the repository, and proposes one fix per issue, leaving issues open until the fix ships |
| `instrument-with-sazabi` | Adds OpenTelemetry to an app, sends logs and traces to a Sazabi intake URL kept in configuration, and confirms the first records arrive |
| `send-agent-telemetry` | Streams Claude Code or Codex session telemetry (tool calls, model requests, tokens, cost) to Sazabi, with prompt export off unless you opt in |
| `add-logging` | Adds structured log lines to the code path a change touches, matching the repository's logger and leaving out secrets |
| `use-project-memory` | Reads Sazabi project memory (runbooks, past incidents) before investigating, and writes back verified findings |
| `build-a-dashboard` | Turns a recurring question into a saved Sazabi dashboard, validates it, and checks every panel returns data |

Skills are named `sazabi-<skill>`. In Claude Code they appear as `superset:sazabi-<skill>`.

## MCP Server

Tools come from Sazabi's own MCP server at `https://mcp.sazabi.com/mcp`. Paradev proxies each call and adds your credentials. The server lists two tools, `search` and `execute`: the agent searches for an operation (log questions, issues, threads, project memory) and then runs it. See [Sazabi's docs](https://docs.sazabi.com/get-started/coding-agents) for what it can do.

## Authentication

| Method | Details |
|:-------|:--------|
| OAuth 2.0 | You sign in to Sazabi in your browser. Paradev registers itself with Sazabi when you connect, so there is no app to set up first. |
| Secret key | Paste a key from Sazabi's **Settings → Secret keys** page. Use it when you cannot sign in through a browser. A key scoped to one project limits the agent to that project. Connecting another key for the same Sazabi organization replaces your existing connection; a key connected by another Paradev user is a separate connection. To reach several projects, use OAuth or an organization-wide key. |

Connect from the plugin's page in **Plugins**. Paradev stores the credentials on its side and adds them to each call, so they never go into your agent's configuration.
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { GenIcon } from "react-icons";

export const SazabiIcon = GenIcon({
tag: "svg",
attr: { viewBox: "145 190 740 650", fill: "currentColor" },
child: [
{
tag: "path",
attr: {
d: "M255.246 552.975H479.158L398.608 422.361C386.206 402.145 400.875 376.285 424.88 376.285H773.751C784.553 376.285 794.421 370.771 800.022 361.714L874.437 241.076C886.84 220.86 872.17 195 848.166 195H491.294C480.491 195 470.623 200.513 465.022 209.571L374.07 356.988C368.469 366.046 358.467 371.559 347.798 371.559H180.831C156.826 371.559 142.023 397.419 154.559 417.635L228.974 538.272C234.575 547.33 244.577 552.844 255.246 552.844V552.975Z",
},
child: [],
},
{
tag: "path",
attr: {
d: "M773.754 478.157H549.842L630.392 608.771C642.794 628.986 628.125 654.847 604.12 654.847H255.25C244.447 654.847 234.579 660.36 228.978 669.418L154.563 789.924C142.16 810.14 156.83 836 180.835 836H537.706C548.509 836 558.377 830.487 563.978 821.429L654.93 674.012C660.531 664.955 670.533 659.441 681.202 659.441H848.169C872.174 659.441 886.977 633.581 874.441 613.365L800.026 492.728C794.425 483.67 784.423 478.157 773.754 478.157Z",
},
child: [],
},
],
});
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { SazabiIcon } from "./SazabiIcon";
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
import { AutumnIcon } from "./components/AutumnIcon";
import { PeecIcon } from "./components/PeecIcon";
import { ResendIcon } from "./components/ResendIcon";
import { SazabiIcon } from "./components/SazabiIcon";
import { SuperhumanIcon } from "./components/SuperhumanIcon";

export const IMAGE_ICONS: Record<string, string> = {
Expand All @@ -32,6 +33,7 @@ export const GLYPH_ICONS: Record<string, { icon: IconType; color?: string }> = {
peec: { icon: PeecIcon },
posthog: { icon: SiPosthog },
resend: { icon: ResendIcon },
sazabi: { icon: SazabiIcon, color: "#FF0027" },
sentry: { icon: SiSentry },
superhuman: { icon: SuperhumanIcon },
vercel: { icon: SiVercel },
Expand Down
5 changes: 5 additions & 0 deletions apps/marketing/src/app/[lang]/plugins/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,11 @@ export const CATALOG: {
displayName: "Resend",
description: msg({ message: "Send email and debug delivery" }),
},
{
name: "sazabi",
displayName: "Sazabi",
description: msg({ message: "Investigate production logs and issues" }),
},
],
},
{
Expand Down
3 changes: 3 additions & 0 deletions packages/i18n/locales/cs/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -9966,6 +9966,9 @@ msgstr "Neplatný požadavek"
msgid "Invalid state parameter. Please try again."
msgstr "Neplatný parametr state. Zkuste to prosím znovu."

msgid "Investigate production logs and issues"
msgstr "Prošetřujte produkční logy a problémy"

msgid "Invitation canceled"
msgstr "Pozvánka zrušena"

Expand Down
3 changes: 3 additions & 0 deletions packages/i18n/locales/de/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -9966,6 +9966,9 @@ msgstr "Ungültige Anfrage"
msgid "Invalid state parameter. Please try again."
msgstr "Ungültiger state-Parameter. Bitte versuche es erneut."

msgid "Investigate production logs and issues"
msgstr "Produktionslogs und Issues untersuchen"

msgid "Invitation canceled"
msgstr "Einladung zurückgezogen"

Expand Down
3 changes: 3 additions & 0 deletions packages/i18n/locales/en/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -9966,6 +9966,9 @@ msgstr "Invalid Request"
msgid "Invalid state parameter. Please try again."
msgstr "Invalid state parameter. Please try again."

msgid "Investigate production logs and issues"
msgstr "Investigate production logs and issues"

msgid "Invitation canceled"
msgstr "Invitation canceled"

Expand Down
3 changes: 3 additions & 0 deletions packages/i18n/locales/es/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -9966,6 +9966,9 @@ msgstr "Solicitud no válida"
msgid "Invalid state parameter. Please try again."
msgstr "Parámetro de estado no válido. Inténtalo de nuevo."

msgid "Investigate production logs and issues"
msgstr "Investiga logs e incidencias de producción"

msgid "Invitation canceled"
msgstr "Invitación cancelada"

Expand Down
3 changes: 3 additions & 0 deletions packages/i18n/locales/fr/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -9966,6 +9966,9 @@ msgstr "Requête invalide"
msgid "Invalid state parameter. Please try again."
msgstr "Paramètre state invalide. Veuillez réessayer."

msgid "Investigate production logs and issues"
msgstr "Analysez les logs et incidents de production"

msgid "Invitation canceled"
msgstr "Invitation annulée"

Expand Down
3 changes: 3 additions & 0 deletions packages/i18n/locales/id/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -9966,6 +9966,9 @@ msgstr "Permintaan Tidak Valid"
msgid "Invalid state parameter. Please try again."
msgstr "Parameter state tidak valid. Silakan coba lagi."

msgid "Investigate production logs and issues"
msgstr "Selidiki log dan masalah produksi"

msgid "Invitation canceled"
msgstr "Undangan dibatalkan"

Expand Down
3 changes: 3 additions & 0 deletions packages/i18n/locales/it/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -9966,6 +9966,9 @@ msgstr "Richiesta non valida"
msgid "Invalid state parameter. Please try again."
msgstr "Parametro di stato non valido. Riprova."

msgid "Investigate production logs and issues"
msgstr "Indaga su log e problemi in produzione"

msgid "Invitation canceled"
msgstr "Invito annullato"

Expand Down
3 changes: 3 additions & 0 deletions packages/i18n/locales/ja/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -9966,6 +9966,9 @@ msgstr "無効なリクエスト"
msgid "Invalid state parameter. Please try again."
msgstr "stateパラメーターが無効です。もう一度お試しください。"

msgid "Investigate production logs and issues"
msgstr "本番環境のログと問題を調査"

msgid "Invitation canceled"
msgstr "招待をキャンセルしました"

Expand Down
3 changes: 3 additions & 0 deletions packages/i18n/locales/ko/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -9966,6 +9966,9 @@ msgstr "잘못된 요청"
msgid "Invalid state parameter. Please try again."
msgstr "state 매개변수가 올바르지 않습니다. 다시 시도해 주세요."

msgid "Investigate production logs and issues"
msgstr "프로덕션 로그와 이슈 조사"

msgid "Invitation canceled"
msgstr "초대를 취소했습니다"

Expand Down
3 changes: 3 additions & 0 deletions packages/i18n/locales/nl/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -9966,6 +9966,9 @@ msgstr "Ongeldig verzoek"
msgid "Invalid state parameter. Please try again."
msgstr "Ongeldige state-parameter. Probeer het opnieuw."

msgid "Investigate production logs and issues"
msgstr "Onderzoek productielogs en issues"

msgid "Invitation canceled"
msgstr "Uitnodiging geannuleerd"

Expand Down
3 changes: 3 additions & 0 deletions packages/i18n/locales/pl/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -9966,6 +9966,9 @@ msgstr "Nieprawidłowe żądanie"
msgid "Invalid state parameter. Please try again."
msgstr "Nieprawidłowy parametr state. Spróbuj ponownie."

msgid "Investigate production logs and issues"
msgstr "Badaj logi i problemy produkcyjne"

msgid "Invitation canceled"
msgstr "Zaproszenie anulowane"

Expand Down
3 changes: 3 additions & 0 deletions packages/i18n/locales/pt-BR/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -9966,6 +9966,9 @@ msgstr "Requisição inválida"
msgid "Invalid state parameter. Please try again."
msgstr "Parâmetro de estado inválido. Tente novamente."

msgid "Investigate production logs and issues"
msgstr "Investigue logs e problemas de produção"

msgid "Invitation canceled"
msgstr "Convite cancelado"

Expand Down
3 changes: 3 additions & 0 deletions packages/i18n/locales/ru/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -9966,6 +9966,9 @@ msgstr "Некорректный запрос"
msgid "Invalid state parameter. Please try again."
msgstr "Некорректный параметр state. Попробуйте ещё раз."

msgid "Investigate production logs and issues"
msgstr "Исследуйте логи и проблемы в продакшене"

msgid "Invitation canceled"
msgstr "Приглашение отменено"

Expand Down
3 changes: 3 additions & 0 deletions packages/i18n/locales/tr/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -9966,6 +9966,9 @@ msgstr "Geçersiz istek"
msgid "Invalid state parameter. Please try again."
msgstr "Geçersiz state parametresi. Lütfen yeniden deneyin."

msgid "Investigate production logs and issues"
msgstr "Canlı ortam loglarını ve sorunlarını inceleyin"

msgid "Invitation canceled"
msgstr "Davet iptal edildi"

Expand Down
3 changes: 3 additions & 0 deletions packages/i18n/locales/vi/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -9966,6 +9966,9 @@ msgstr "Yêu cầu không hợp lệ"
msgid "Invalid state parameter. Please try again."
msgstr "Tham số state không hợp lệ. Vui lòng thử lại."

msgid "Investigate production logs and issues"
msgstr "Điều tra log và sự cố production"

msgid "Invitation canceled"
msgstr "Đã hủy lời mời"

Expand Down
3 changes: 3 additions & 0 deletions packages/i18n/locales/zh-CN/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -9966,6 +9966,9 @@ msgstr "无效请求"
msgid "Invalid state parameter. Please try again."
msgstr "state参数无效。请重试。"

msgid "Investigate production logs and issues"
msgstr "调查生产环境日志和问题"

msgid "Invitation canceled"
msgstr "邀请已取消"

Expand Down
3 changes: 3 additions & 0 deletions packages/i18n/locales/zh-TW/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -9966,6 +9966,9 @@ msgstr "無效請求"
msgid "Invalid state parameter. Please try again."
msgstr "state引數無效。請重試。"

msgid "Investigate production logs and issues"
msgstr "調查正式環境日誌與問題"

msgid "Invitation canceled"
msgstr "邀請已取消"

Expand Down
Loading
Loading