GitHub
Repo access, PR creation, status checks, Actions triggers. Required.
Defiant integrates with the tools you already use. Most integrations are configured once during defiant init and then used automatically by the relevant agents.
GitHub
Repo access, PR creation, status checks, Actions triggers. Required.
Asana
Task creation and completion via the Scribe agent. Optional.
Sentry
Runtime error capture and triage via the Medic agent. Optional.
PostHog
Usage analytics and feature flags. Optional.
Resend
Transactional email. Optional.
Stripe
Billing and payments for Marketplace/Fintech projects. Optional.
Required. GitHub is the source of truth for code and the deployment trigger.
| Scope | Why |
|---|---|
repo | Read/write access to repositories — Builder needs to push branches and open PRs |
workflow | Trigger GitHub Actions workflows — Launcher uses this to start deploys |
read:org | Read organization membership — used to scope access to org repos |
defiant config set GITHUB_TOKEN ghp_...Or during defiant init.
| Agent | GitHub action |
|---|---|
| Builder | Push branch, open PR |
| Reviewer | Read PR diff, add review comments, approve, merge |
| Guardian | Read PR diff, add security review comments |
| Launcher | Trigger workflow dispatch, create version tags |
| Scribe | Add PR release notes, draft GitHub Releases |
Each Builder task gets its own branch: defiant/<sprint-id>/<task-id>. PRs target the project’s default branch (usually main). The Conductor never force-pushes.
For the Reviewer to auto-merge PRs:
defiant/mandate-check status)defiant/mandate-check status to passOptional. The Scribe agent creates and updates Asana tasks when a sprint completes.
defiant config set ASANA_PAT 1/...defiant config set ASANA_PROJECT_GID 1214516646043430The Scribe agent:
Task name: [Sprint] <sprint goal summary>Notes: Sprint ID: spr_01hw... State: COMPLETE PRs merged: #42, #43 Completed: 2026-05-05T14:38:22Z Tokens used: 182,304 Agents: captain, architect, builder (x2), reviewer, guardian, scribeYou can map sprint goals to existing Asana tasks by including the Asana GID in the sprint goal:
defiant sprint create \ --project proj_01hw... \ --goal "Add profile page [asana:1214516646043430]"The Scribe will update that specific task rather than creating a new one.
Optional. Enables the Medic agent to triage runtime errors automatically.
defiant config set SENTRY_DSN https://xxx@o123.ingest.sentry.io/456defiant config set SENTRY_AUTH_TOKEN sntrys_... # for API accessdefiant config set SENTRY_ORG yourorgdefiant config set SENTRY_PROJECT your-projectError triage on demand:
defiant medic triage --sentry --limit 10The Medic fetches the 10 most recent unresolved Sentry issues, analyzes each one against the codebase, and produces a diagnosis with a likely root cause and suggested fix.
Auto-triage (optional): Configure a Sentry webhook to POST to the Defiant webhook endpoint, and the Medic will triage new issues automatically:
// Sentry webhook → Defiant{ "url": "https://xxx.supabase.co/functions/v1/defiant/webhooks/sentry", "events": ["issue"]}The Launcher automatically creates Sentry releases when it tags a version:
// Created by Launcher after successful deployawait sentry.releases.create({ version: 'v2.1.0', projects: ['your-project'], refs: [{ repository: 'yourorg/my-app', commit: 'abc123' }],});Optional. Usage analytics and feature flags.
defiant config set POSTHOG_KEY phc_...defiant config set POSTHOG_HOST https://app.posthog.com # or self-hosted URLDefiant tracks sprint-level analytics:
| Event | When |
|---|---|
sprint_created | Sprint created |
sprint_complete | Sprint reaches COMPLETE |
sprint_failed | Sprint reaches FAILED |
mandate_violated | A mandate violation is found |
inbox_resolved | An inbox item is resolved |
All events include project vertical, agent set, and token usage. No code or goal text is sent.
Feature flags: Defiant checks PostHog feature flags for beta features. To opt into a beta:
defiant config set POSTHOG_DISTINCT_ID your-user-idOptional. Transactional email. Used by the Launcher to send deploy notifications and by the Medic to send failure alerts.
defiant config set RESEND_API_KEY re_...defiant config set RESEND_FROM "Defiant <noreply@yourdomain.com>"defiant config set RESEND_NOTIFY_EMAIL "you@yourdomain.com"| Event | Recipient |
|---|---|
| Sprint complete | RESEND_NOTIFY_EMAIL |
| Sprint failed | RESEND_NOTIFY_EMAIL |
| Critical inbox item | RESEND_NOTIFY_EMAIL |
| Deploy rollback triggered | RESEND_NOTIFY_EMAIL |
Configure which notifications to receive:
defiant config set RESEND_NOTIFY_EVENTS "sprint_failed,inbox_critical"Optional. Required for Marketplace and Fintech vertical projects that handle payments.
defiant config set STRIPE_SECRET_KEY sk_live_...defiant config set STRIPE_WEBHOOK_SECRET whsec_...The Ambassador agent uses the Stripe configuration to:
The Guardian agent uses it to verify that payment-related code routes through Stripe and never stores raw card data.
Defiant detects whether the key is test mode (sk_test_) or live mode (sk_live_) and configures tests accordingly. Builder agents always use test mode in the worktree; live mode is used only by the Launcher for production deploys.
You can extend the Ambassador agent with custom integration knowledge by adding a YAML file to integrations/:
name: My Servicebase_url: https://api.myservice.com/v1auth: type: bearer env_var: MY_SERVICE_API_KEY
endpoints: - name: create_item method: POST path: /items body_schema: { name: string, type: string } response_schema: { id: string, created_at: string }
error_codes: 429: rate_limit 503: service_unavailable
sdk: package: my-service-sdk init_pattern: "new MyServiceClient({ apiKey: process.env.MY_SERVICE_API_KEY })"
webhook: signature_header: X-My-Service-Signature signature_algorithm: HMAC-SHA256 secret_env_var: MY_SERVICE_WEBHOOK_SECRETThe Ambassador reads this file when the sprint goal or technical plan references My Service and uses it to generate correct initialization and error handling code.