{"id":50399550,"url":"https://github.com/sseshachala/conductai","last_synced_at":"2026-06-16T04:01:07.717Z","repository":{"id":356416209,"uuid":"1226134466","full_name":"sseshachala/conductai","owner":"sseshachala","description":"Agent Templates that turn AI agents into reusable team automations — GitHub, Slack, Linear, and beyond","archived":false,"fork":false,"pushed_at":"2026-06-14T05:11:10.000Z","size":18225,"stargazers_count":0,"open_issues_count":199,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-14T05:16:21.113Z","etag":null,"topics":["ai-agents","claude","devops","fastapi","llm","nextjs","workflow-automation","yaml"],"latest_commit_sha":null,"homepage":"https://conductai.ai","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sseshachala.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY_LOOP_SPEC.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-01T02:35:00.000Z","updated_at":"2026-06-14T05:11:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"1aaa18f8-933e-4bbf-a1b7-058b4e2ba026","html_url":"https://github.com/sseshachala/conductai","commit_stats":null,"previous_names":["sseshachala/delegator","sseshachala/conductai"],"tags_count":138,"template":false,"template_full_name":null,"purl":"pkg:github/sseshachala/conductai","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sseshachala%2Fconductai","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sseshachala%2Fconductai/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sseshachala%2Fconductai/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sseshachala%2Fconductai/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sseshachala","download_url":"https://codeload.github.com/sseshachala/conductai/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sseshachala%2Fconductai/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34390052,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-16T02:00:06.860Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agents","claude","devops","fastapi","llm","nextjs","workflow-automation","yaml"],"created_at":"2026-05-30T22:32:18.514Z","updated_at":"2026-06-16T04:01:07.709Z","avatar_url":"https://github.com/sseshachala.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n[![Try Conduct — conductai.ai](https://img.shields.io/badge/Try_Conduct-conductai.ai-6366f1?style=for-the-badge\u0026logoColor=white\u0026logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0id2hpdGUiIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyek0xMSAxN3YtNkg5bDMtNCAzIDRoLTJ2NmgtMnoiLz48L3N2Zz4=)](https://conductai.ai)\n[![Star on GitHub](https://img.shields.io/github/stars/sseshachala/conductai?style=for-the-badge\u0026logo=github\u0026color=gold)](https://github.com/sseshachala/conductai/stargazers)\n[![MIT License](https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge)](LICENSE)\n[![Claude Code Plugin](https://img.shields.io/badge/Claude_Code-Plugin-D97757?style=for-the-badge\u0026logoColor=white\u0026logo=anthropic)](https://github.com/sseshachala/conductai)\n[![PyPI](https://img.shields.io/pypi/v/conduct-cli?style=for-the-badge\u0026logo=pypi\u0026logoColor=white\u0026color=0073b7)](https://pypi.org/project/conduct-cli/)\n\n# Conduct\n\n**Agent Templates that turn AI agents into reusable team automations — with governance, memory, and a full audit trail.**\n\n![Conduct — live run trace showing agent executing an issue-to-PR agent template](apps/web/public/guard-docs/dashboard.png)\n\n\u003c/div\u003e\n\nLabel a GitHub issue `ai-ready` → an agent clones your repo, writes the fix, runs tests, and opens a draft PR. One-click Approve or Reject before anything merges. ConductGuard enforces your team's spend limits and policies on every run — and on every Claude Code, Cursor, and Copilot call your developers make locally.\n\n\u003e **⭐ If this saves your team time, [star it](https://github.com/sseshachala/conductai/stargazers) — it helps others find it.**\n\n---\n\n## What it does\n\nConduct runs AI agents on a drag-and-drop canvas (or in YAML). Agents have real tool access — they read code, call APIs, open PRs, post to Slack. You control what they can touch and approve before anything ships.\n\n```\nGitHub issue labeled \"ai-ready\"\n  → Memory block recalls what the agent learned on this repo last time\n  → Brain block (Claude) reads the issue, clones the repo, writes the fix\n  → Guard block checks team policies — spend limit, blocked actions\n  → Tool block opens a draft PR\n  → Approval block pauses — Slack DM: [Approve] [Reject]\n  → Memory block records the outcome for next time\n  → Output block posts result to #eng channel\n```\n\nEvery step is visible. Every run is logged. Nothing merges without a human in the loop.\n\n---\n\n## Why teams pick Conduct\n\n| Problem | Conduct's answer |\n|---------|-----------------|\n| Autonomous agents are black boxes | Live run trace, three-layer audit log, approval gates on every run |\n| No governance over what AI tools spend | ConductGuard: hard cap per developer, blocks the call before it hits the model |\n| Agents start from scratch every run | Memory blocks: recall past summaries via vector similarity, record outcomes after |\n| Copilot/Cursor PRs need extra scrutiny | AI PR Reviewer agent template with human approval gate before merge |\n| One shared credential set across all agents | Per-agent environments — each agent gets its own scoped credentials |\n| No visibility into what developers' AI tools are doing | Guard audit log: every Claude Code, Cursor, and Copilot call — decision, rule, cost |\n| Hard to move from demo to production | Human-in-the-loop by design — nothing merges without approval |\n\n---\n\n## 18 ready-made agent templates\n\nInstall any of these in one click from the [Marketplace](https://conductai.ai/marketplace), configure credentials, and run.\n\n### Issue → PR\n| Template | Trigger | What it does |\n|----------|---------|-------------|\n| **Autopilot Quick** | GitHub issue labeled | Implements fix, opens PR immediately |\n| **Autopilot Full** | GitHub issue labeled | Implements fix, runs tests with retry, opens PR |\n| **Autopilot + Approval** | GitHub issue labeled | Implements fix, runs tests, human approves in Slack, opens PR |\n\n### Code Review\n| Template | Trigger | What it does |\n|----------|---------|-------------|\n| **PR Reviewer** | PR opened | Reviews diff for bugs, security, and style; posts a review |\n| **Copilot / AI PR Reviewer** | PR opened by Copilot/Cursor/Claude Code | Extra scrutiny for hallucinated APIs and missing tests; human approves before merge |\n| **Security Scanner** | PR opened | Scans for OWASP Top 10, hardcoded secrets, auth bypasses; posts report |\n\n### Issue Triage\n| Template | Trigger | What it does |\n|----------|---------|-------------|\n| **Issue Triage** | GitHub issue opened | Classifies type and priority, adds labels, posts a clarifying comment if vague |\n\n### CI/CD\n| Template | Trigger | What it does |\n|----------|---------|-------------|\n| **CI Failure Alert** | CI build fails | Diagnoses the failed step, posts root cause and suggested fix to Slack |\n| **Flaky Test Detective** | Repeated CI failures | Identifies flaky tests, finds the offending commit, posts fix recommendation |\n\n### Release Management\n| Template | Trigger | What it does |\n|----------|---------|-------------|\n| **Release Readiness Reviewer** | Release branch cut | Checks open blockers, failed CI, pending reviews; posts go/no-go summary |\n| **Release Notes Drafter** | Git tag pushed | Reads merged PRs, groups by type, writes CHANGELOG, posts to Slack |\n\n### Incidents \u0026 Ops\n| Template | Trigger | What it does |\n|----------|---------|-------------|\n| **Incident Responder** | PagerDuty / OpsGenie webhook | Correlates recent commits and deploys, posts root cause hypothesis to Slack |\n| **Postmortem Drafter** | Incident resolved | Reads timeline, alerts, and commits; drafts a structured postmortem |\n\n### Security\n| Template | Trigger | What it does |\n|----------|---------|-------------|\n| **Dependency Updater** | Weekly cron | Bumps patch/minor deps, opens a single clean PR |\n| **Security Patch Updater** | Dependabot alert | Applies the security patch, runs tests, opens a PR with CVE reference |\n\n### Docs\n| Template | Trigger | What it does |\n|----------|---------|-------------|\n| **Docs Drift Detector** | PR merged | Checks if related docs/README/runbooks went stale; opens a docs PR or files an issue |\n\n### Platform \u0026 Infra\n| Template | Trigger | What it does |\n|----------|---------|-------------|\n| **Terraform Plan Reviewer** | Terraform plan PR opened | Reviews for security misconfigs, cost anomalies, and drift; posts findings |\n\n### Testing\n| Template | Trigger | What it does |\n|----------|---------|-------------|\n| **Smoke Test** | Manual / CI | Minimal 1-step pipeline ping for CI gating and worker health checks |\n\n---\n\n## Block types\n\n| Block | What it does |\n|-------|-------------|\n| **Trigger** | Starts a run — webhook, cron, or manual |\n| **Brain** | Agentic Claude step with tool access and bounded autonomy. Auto-routes to Haiku / Sonnet / Opus based on task. |\n| **Tool** | Deterministic API call — GitHub, Slack, Linear, Vercel, Railway |\n| **Logic** | Branch on pass / fail |\n| **Approval** | Pauses the run, sends Slack DM with Approve / Reject |\n| **Memory** | Read past summaries before the brain runs; write the outcome after. Powered by vector similarity search. |\n| **Guard** | Evaluates active team policies mid-run. Blocks, warns, or audits based on enforcement_mode. Emits a `guard_check` event in the run trace. |\n| **Output** | Sends formatted summary via Slack or email |\n| **Cleanup** | Always runs last — tear down resources, close loops |\n\n---\n\n## ConductGuard\n\nConductGuard is MDM for AI coding tools. The security or team lead configures policies and spend limits once — they propagate to every developer's machine within 60 seconds. Developers run Claude Code, Codex, and Cursor exactly as before. Governance just happens.\n\n![Guard dashboard showing stat cards and cost trend chart](apps/web/public/guard-docs/dashboard.png)\n*Real-time Guard dashboard — active developers, events, blocked calls, token usage, and Claude vs Codex cost breakdown.*\n\n### How control flows\n\n```\nSecurity / Team Lead  →  policies, spend limits, alert thresholds\n                               ↓  (synced every 60s)\n    Every developer's machine (PreToolUse hook + conductguard-mcp)\n                               ↓  (real-time)\nGuard dashboard  ←  who, what tool, what decision, tokens, cost\n```\n\n### For admins\n\n1. Open **Guard** in the Conduct dashboard\n2. Set a **Team monthly budget** and **Hard cap** under Guard → Spend\n3. Set **Default per-developer limit** and alert threshold (default 80%)\n4. Create policy rules under Guard → Policies (block/warn/audit on tool + pattern)\n5. Configure Slack channel under Guard → Settings → Notifications\n6. Configure policies and budgets in the Guard dashboard — developers are already workspace members, no invite step needed\n\n### For developers — two commands\n\n```bash\npip install conduct-cli\n\n# Authenticate (already done if you use Conduct)\nconduct login --server https://api.conductai.ai --api-key \u003capi-key\u003e\n\n# Sync Guard — installs hook + MCP, pulls policies\nconduct guard sync\n```\n\n`sync` pulls the latest policy, writes the PreToolUse hook to `~/.conductguard/hook.py`, registers it in `~/.claude/settings.json` and Codex, and registers the MCP server. Done.\n\n### Spend controls\n\n![Spend controls panel showing monthly budget, per-developer limit, and hard cap toggle](apps/web/public/guard-docs/spend-controls.png)\n*Guard → Spend — set team and per-developer limits. Hard cap blocks all sessions at 100%. Slack alert fires at the configured threshold.*\n\n![Spend breakdown by developer and by AI tool](apps/web/public/guard-docs/spend-by-developer.png)\n*By Developer and By AI Tool breakdown — sessions, tokens, cost, savings, and individual budget status.*\n\nWhen the workspace hard cap or a developer's personal limit is hit, the PreToolUse hook exits with code 2. Claude Code surfaces the message inline before the tool runs:\n\n```\nPreToolUse hook error: [ConductGuard] Your team's monthly AI budget of $50.00 has been\nreached. New tool calls are paused until the limit is raised. Contact your security team.\n```\n\nSpend alerts are deduped — Slack fires once per 5% increment, not on every tool call.\n\n### Policy enforcement\n\n![Audit log showing blocked and allowed events with rule IDs](apps/web/public/guard-docs/audit-blocked.png)\n*Guard → Activity — every tool call logged with decision (blocked/allowed), rule ID, developer, and AI tool.*\n\nRules are created in the dashboard and synced to every developer within 60 seconds:\n\n| Field | Example |\n|---|---|\n| Match tool | `bash` |\n| Match pattern | `rm -rf` |\n| Action | `block` |\n| Message | `Destructive delete blocked. Use git to revert.` |\n\nWhen a rule fires, Slack is notified in real time:\n\n```\n🚫 dev@yourteam.com blocked by no-rm in claude-code\n   Deleting files is not allowed. Use git to revert changes instead.\n```\n\n### Slack notifications\n\n![Guard Settings showing Slack channel input and notification toggles](apps/web/public/guard-docs/settings-notifications.png)\n*Guard → Settings — configure the alert channel and toggle block/warn and budget threshold notifications independently.*\n\n### Activity log\n\n![Activity log showing Claude Code and Codex tool calls with token counts](apps/web/public/guard-docs/activity-log.png)\n*Guard → Activity — every Claude Code and Codex session logged: tool call type, input summary, tokens in/out. Realtime.*\n\n### MCP server (Cursor / Windsurf)\n\n```bash\n# Auto-registered at conduct guard sync. To add manually:\nconductguard-mcp\n```\n\nAdd to `~/.cursor/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"conductguard\": {\n      \"command\": \"conductguard-mcp\",\n      \"args\": [\"--workspace\", \"\u003cworkspace-id\u003e\", \"--token\", \"\u003cmember-token\u003e\"]\n    }\n  }\n}\n```\n\nThree tools exposed to the AI: `guard_status`, `guard_check`, `guard_sync`.\n\n### Guard block in YAML\n\n```yaml\nblocks:\n  check_policies:\n    type: guard\n    label: Check team policies\n    enforcement_mode: block   # block | warn | audit\n    next: deploy_fix\n```\n\n### Roles\n\n| Role | Guard access |\n|---|---|\n| **admin** | Full — policies, budgets, settings, members |\n| **security** | Full policy + activity access. Cannot manage members. |\n| **developer** | View policies. Own activity and spend only. |\n| **viewer** | Own activity only. Read-only. |\n\n---\n\n## Agent Memory\n\nMemory blocks give agents a persistent knowledge store. The agent recalls what it learned last time on this repo before acting — and records the outcome after.\n\n```yaml\nblocks:\n  recall_context:\n    type: memory\n    action: read\n    scope: repo\n    key: \"{{_trigger.repo_full_name}}\"\n    limit: 5\n    next: fetch_issue\n\n  record_outcome:\n    type: memory\n    action: write\n    scope: repo\n    key: \"{{_trigger.repo_full_name}}\"\n    summary: |\n      Issue #{{fetch_issue.issue_number}}: {{fetch_issue.title}}\n      Fix: {{implement_fix.approach}}\n    next: notify\n```\n\nPowered by vector similarity search (OpenAI `text-embedding-3-small`). Falls back to recency-based retrieval if no embedding key is configured — memory still works.\n\n**Two scopes:**\n- `repo` — memories isolated per repository (5 repos = 5 independent experts)\n- `workspace` — memories shared across all repos in the workspace (team conventions)\n\n---\n\n## Observability — Three audit layers\n\n| Layer | What it covers | Where |\n|-------|---------------|-------|\n| **Run trace** | Every block state, LLM call, tool call, Guard decision — live SSE stream | `/runs/{id}` |\n| **Workspace audit** | Credential changes, agent installs, member events — immutable, append-only | `/audit` |\n| **Guard audit** | Every developer AI tool call — decision, rule triggered, tokens, cost, Slack alert | `/guard/audit` |\n\nWhen a Guard block fires inside a workflow, a `guard_check` run event is emitted inline in the run trace — rules evaluated, verdict, warnings — alongside the other block events. The same event is also written to the Guard audit log. Two lenses on the same moment.\n\n---\n\n## Integrations\n\n| Integration | Actions |\n|-------------|---------|\n| **GitHub** | clone repo, push file, create branch, open PR, merge PR, add secret |\n| **Slack** | post message, send DM, handle approval buttons, Guard policy alerts |\n| **Linear** | fetch / create / update issues, add comments |\n| **Vercel** | list / get / wait for deployments |\n| **Railway** | trigger / monitor deployments |\n| **DigitalOcean** | create / destroy droplets |\n| **Email** | send via Resend or SendGrid |\n\n---\n\n## Architecture\n\n```\napps/\n  web/                  Next.js — canvas UI, run feed, Guard dashboard, settings\n  api/                  FastAPI + SQLAlchemy + Alembic\n  api/app/runtime/      DAG executor — block dispatch, _emit(), Guard block\n  api/app/modules/guard/ Guard team, policies, spend, audit events, MCP auth\n  api/worker.py         Background run executor (Redis queue)\npackages/\n  conduct-cli/          Python CLI — trigger agents, switch workspaces, guard sync\n                        conductguard-mcp — MCP server for editors (policy enforcement)\n                        conduct-mcp — MCP server exposing run/list/status as tools\ntools/\n  booster/              Agent Booster — AST + vector context router, 5–15× token savings\n                        booster serve — MCP server (smart_read, search_context, route_model)\n```\n\n---\n\n## Quick start (self-hosted)\n\n### Prerequisites\n\n- Docker + Docker Compose\n- Anthropic API key\n\n### 1. Clone and configure\n\n```bash\ngit clone https://github.com/sseshachala/conductai.git\ncd conductai\ncp .env.example .env\n```\n\nEdit `.env`:\n\n```env\nANTHROPIC_API_KEY=sk-ant-...\nENCRYPTION_KEY=\u003c32-char random string\u003e\n```\n\n### 2. Start\n\n```bash\ndocker compose up -d\ndocker compose exec api alembic upgrade head\n```\n\n### 3. Open\n\n- **UI**: http://localhost:3000\n- **API docs**: http://localhost:8000/docs\n\n### 4. Create your first agent\n\n1. **Projects** → New project\n2. **Marketplace** → Install an agent template in one click\n3. **Settings → Environments** → add GitHub + Slack credentials\n4. Assign the environment to your agent on the canvas\n5. Hit **Run**\n\n---\n\n## CLI\n\n![Conduct CLI — run agents · enforce policies · switch workspaces](packages/conduct-cli/assets/conduct-cli-demo.gif)\n\n```bash\npip install conduct-cli\n\n# Authenticate\nconduct login \\\n  --server    https://api.conductai.ai \\\n  --api-key   cond_live_xxx \\\n  --workspace \u003cworkspace-id\u003e\n\n# Install all agent templates into a project\nconduct install-all --project DevOps --repo myorg/my-repo\n\n# Test all agents\nconduct test --all --project DevOps\n\n# Switch workspaces — updates CLI + Guard config, re-syncs policies atomically\nconduct switch staging\n\n# Check active workspace, Guard status, and Booster status\nconduct whoami\n\n# Guard — sync policies, hook, and MCP (run once, then keep up to date)\nconduct guard sync\nconduct guard status\n```\n\n→ Full reference and use cases at [conductai.ai/tools/conduct-cli](https://conductai.ai/tools/conduct-cli)\n\n---\n\n## Claude Code Plugins\n\nBoth tools are available as Claude Code plugins — no manual `.mcp.json` edits needed.\n\n```bash\n# In Claude Code\n/plugin marketplace add sseshachala/conductai\n```\n\nThis installs:\n\n| Plugin | What it wires |\n|--------|--------------|\n| **agent-booster** | `booster serve` MCP server — smart_read, search_context, get_symbols, route_model |\n| **conduct-cli** | `conductguard-mcp` + `conduct-mcp` MCP servers + Guard skill |\n\nPending review in the [Anthropic plugin directory](https://clau.de/plugin-directory-submission). Until then, install directly from this repo.\n\n→ [conductai.ai/tools/agent-booster](https://conductai.ai/tools/agent-booster)\n→ [conductai.ai/tools/conduct-cli](https://conductai.ai/tools/conduct-cli)\n\n---\n\n## Environment variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `ANTHROPIC_API_KEY` | Yes | Claude API key |\n| `ENCRYPTION_KEY` | Yes | 32-byte key for credential encryption |\n| `DATABASE_URL` | Yes | Postgres connection string |\n| `REDIS_URL` | Yes | Redis connection string |\n| `API_BASE_URL` | Yes | Public API URL (for webhook callbacks) |\n| `CLI_API_KEY` | Optional | Shared secret for CLI / CI access |\n| `SLACK_SIGNING_SECRET` | Optional | Verifies Slack interactive payloads |\n| `RESEND_API_KEY` | Optional | Email output via Resend |\n| `SENTRY_DSN` | Optional | Error capture — unhandled exceptions + block failures |\n| `CLERK_SECRET_KEY` | Optional | Enables Clerk authentication |\n| `NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY` | Optional | Clerk frontend key |\n| `OPENAI_API_KEY` | Optional | Enables vector similarity search for Memory blocks |\n\n---\n\n## Deployment\n\n### API + worker (Render)\n\n1. New Web Service → connect GitHub → root directory: `apps/api`\n2. Add a **PostgreSQL** database and a **Redis** instance\n3. Add a second service (same repo, root `apps/api`, start command: `python -m app.worker`)\n4. Set environment variables above\n5. After first deploy: run `alembic upgrade head` via Render shell\n\n### Frontend (Vercel)\n\n1. Connect GitHub repo → root directory: `apps/web`\n2. Set `NEXT_PUBLIC_API_URL=https://api.conductai.ai`\n3. Preview deployments created automatically for every PR\n\n---\n\n## Webhooks\n\n| Endpoint | Service | Events |\n|----------|---------|--------|\n| `POST /webhooks/vercel` | Vercel | deployment.succeeded / failed |\n| `POST /webhooks/railway` | Railway | DEPLOY_SUCCESS / FAILED / CRASHED |\n| `POST /webhooks/slack/interactions` | Slack | Approval button clicks, Guard alerts |\n| `POST /webhooks/inbound/{workflow_id}` | Any | Generic JSON trigger |\n\n---\n\n## Security\n\n- All credentials encrypted at rest (AES-256-GCM + HKDF-SHA256) — decrypted only at point of use, never logged\n- Per-workspace environments — agents only access credentials you assign\n- Three-layer audit log — run trace, workspace events, Guard developer tool audit\n- Approval gates — human confirmation before any action ships to production\n- ConductGuard — hard cap enforcement blocks AI calls before they reach the model\n- HMAC-SHA256 webhook signature verification on all inbound webhooks\n- Sentry integration — block failures captured with `run_id`, `block_id`, `workspace_id` tags\n\n---\n\n## Community\n\n- **Website** → [conductai.ai](https://conductai.ai)\n- **Issues \u0026 feature requests** → [GitHub Issues](https://github.com/sseshachala/conductai/issues)\n- **Questions** → open a [Discussion](https://github.com/sseshachala/conductai/discussions)\n- **Email** → [hello@conductai.ai](mailto:hello@conductai.ai)\n\nIf Conduct saves your team time, a ⭐ star goes a long way — it helps other teams find this.\n\n---\n\n## Contributing\n\nPRs welcome. Open an issue first for anything beyond a small fix.\n\n```bash\ngit clone https://github.com/sseshachala/conductai.git\ncd conductai\ndocker compose up -d\ndocker compose exec api alembic upgrade head\n```\n\n---\n\n## License\n\nMIT — use it, fork it, build on it.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsseshachala%2Fconductai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsseshachala%2Fconductai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsseshachala%2Fconductai/lists"}