The decentralized development agent platform with on-chain identity and encrypted inter-agent communication.
corvid-agent spawns, orchestrates, and governs autonomous AI agents that do real work β writing code, deliberating decisions, opening PRs, and communicating with other agents through cryptographic channels on Algorand.
See VISION.md for architecture, competitive positioning, and long-term roadmap.
| Metric | Count |
|---|---|
| Unit tests | 5,192 across 206 files (14,598 assertions) |
| E2E tests | 360 across 31 Playwright specs |
| Module specs | 108 with automated validation |
| MCP tools | 37 corvid_* tool handlers |
| API endpoints | ~200 across 37 route modules |
| DB migrations | 67 (82 tables) |
| Test:code ratio | 1.14Γ β more test code than production code |
Cross-platform CI: Ubuntu, macOS, Windows.
Every agent platform assumes agents operate in isolation on a single machine. corvid-agent assumes agents need to interoperate β across teams, across servers, across trust boundaries.
The moment Agent A (on your infrastructure) needs to delegate work to Agent B (on someone else's), you need answers to:
- Identity β How does Agent A know Agent B is who it claims to be?
- Communication β How do they exchange messages without a centralized broker?
- Verification β How does Agent A verify that Agent B completed the work?
- Accountability β How do you audit what happened if something goes wrong?
Algorand provides the answers. On-chain wallets give agents verifiable identity. AlgoChat gives them encrypted P2P messaging. Transaction history provides an immutable audit trail. This isn't bolted on β it's native to the platform.
corvid-agent is not a personal life automation tool like OpenClaw. It doesn't send your emails or control your smart home.
It is not a cloud-hosted coding agent like Devin. You own and operate it.
It is a self-hosted, open-source agent runtime purpose-built for development workflows, with the only native on-chain identity and inter-agent communication layer in the ecosystem.
Built with Bun, Angular 21, SQLite, Claude Agent SDK, and Algorand.
git clone https://github.com/CorvidLabs/corvid-agent.git
cd corvid-agent
bash scripts/dev-setup.sh # guided setup: prerequisites, env, deps, build
bun run devOr manually:
bun install
cp .env.example .env # add API key, or leave blank if using Claude Code CLI
bun run build:client
bun run devServer starts at http://localhost:3000. See .env.example for all configuration options.
New here? Follow the 5-minute quickstart to create your first agent and have it open a PR.
# Claude access β pick one (or skip both for Ollama-only mode):
ANTHROPIC_API_KEY=sk-ant-... # Option A: Anthropic API key
# (or install Claude Code CLI) # Option B: uses your Claude subscription
ALGOCHAT_MNEMONIC=your 25 words ... # Optional β on-chain identity & messaging
OLLAMA_HOST=http://localhost:11434 # Optional β local model inference# Telegram β talk to agents from your phone
TELEGRAM_BOT_TOKEN=123456:ABC-DEF...
TELEGRAM_CHAT_ID=123456789
TELEGRAM_ALLOWED_USER_IDS=111222333 # comma-separated, empty = allow all
# Discord β talk to agents from Discord
DISCORD_BOT_TOKEN=your-bot-token
DISCORD_CHANNEL_ID=channel-id
# Slack β talk to agents from Slack channels
SLACK_BOT_TOKEN=xoxb-your-bot-token
SLACK_CHANNEL_ID=C0123456789
SLACK_SIGNING_SECRET=your-signing-secret
# Voice β TTS/STT for Telegram voice notes and audio responses
OPENAI_API_KEY=sk-...- Spawn and manage Claude or Ollama agent sessions with configurable system prompts, tool permissions, and budgets
- Real-time streaming via WebSocket with terminal-style UI
- Tool approval workflows for sensitive operations
- Automatic context management with turn-based resets
- Talk to agents directly from Telegram with long-polling integration
- Voice note support: send a voice message, agent transcribes via Whisper STT and responds
- Voice responses: agents with voice enabled reply with audio (OpenAI TTS) plus text
- Per-user sessions with
/start,/status,/newcommands - Authorization via
TELEGRAM_ALLOWED_USER_IDS
- Talk to agents from any Discord channel via raw WebSocket gateway (no discord.js dependency)
- Auto-reconnect with exponential backoff, heartbeat, and session resume
- Per-user sessions with
/statusand/newcommands - Messages over 2000 characters automatically chunked
- Talk to agents from Slack channels with bidirectional message bridge
- Notification delivery for schedule approvals, work task results, and agent questions
- Question routing:
corvid_ask_ownerquestions appear in Slack with response buttons - Implements the ChannelAdapter interface for consistent bridge behavior
- Give each agent a distinct personality with archetype, traits, background, and voice guidelines
- Example messages to set communication tone and style
- Persona is injected into the system prompt for both Claude SDK and Ollama sessions
- API:
GET/PUT/DELETE /api/agents/{id}/persona
- Composable packages of tools + prompt additions that can be assigned to agents
- 5 built-in presets: Code Reviewer, DevOps, Researcher, Communicator, Analyst
- Create custom bundles and assign multiple to a single agent
- Tools from bundles are merged with the agent's base permissions at session start
- API:
/api/skill-bundles(CRUD),/api/agents/{id}/skills(assign/unassign)
- Text-to-speech via OpenAI TTS API (
tts-1model) with 6 voice presets (alloy, echo, fable, onyx, nova, shimmer) - Speech-to-text via OpenAI Whisper API for transcribing voice messages
- Intelligent caching: synthesized audio is stored in SQLite by text hash + voice preset
- Per-agent voice configuration:
voiceEnabledandvoicePresetfields on the agent model
- Structured deliberation with multiple agents and a chairman
- Pipeline: responding β discussing (N rounds) β reviewing β synthesizing
- Chairman synthesizes a final decision from independent agent responses
- Agents call
corvid_create_work_taskto propose code changes - Automatic git worktree, branch creation, and PR submission
- Validation loop: TypeScript type-check + test suite (up to 3 iterations)
- Protected file enforcement prevents agents from modifying critical code
- DAG-based multi-step workflows with suspend/resume
- Node types: agent session, work task, condition, delay, transform, parallel fork/join
- Cron and interval-based task scheduling with configurable approval policies
- Actions: agent chat, work tasks, council launches, GitHub operations, inter-agent messaging
- GitHub webhook-driven automation with
@mentiontriggers
- Algorand-backed agent wallets with AES-256-GCM encryption at rest
- X25519 PSK encrypted messaging channels
- Owner commands:
/stop,/approve,/deny,/mode,/work,/council - Credit system with ALGO-based purchasing
- Delivery via Discord, Telegram, GitHub Issues, and AlgoChat
- Blocking
corvid_ask_ownerfor two-way agent-to-owner questions - First-response-wins across all configured channels
- Ollama cloud model support with
-cloudsuffix routing to remote instances - Local proxy handles authentication forwarding for remote Ollama hosts
- Merged local + remote model listings in the dashboard
- 18 test cases across 6 categories: coding, context, tools, algochat, council, instruction
- Per-category scoring with aggregate scorecard for evaluating model capabilities
- Integrated into the dashboard and API at
/api/exam
- GitHub
@mentionpolling for automated issue and PR responses - Configurable per-agent poll intervals with centralized deduplication
- Filters by event type (issue comments, issues, PR review comments, pull requests)
- Pull request review detection via GitHub search API
- Heartbeat monitoring with automatic health history tracking
- Health collector aggregates metrics from sessions, schedules, work tasks, and system resources
- Configurable incident detection with auto-generated runbook suggestions
- API:
/api/healthfor live status, plus health trend analysis via MCP tools
- Track PR outcomes (merged, closed, changes-requested) from scheduled work
- Learn from results to improve future schedule effectiveness
- Automatic correlation between schedule executions and PR dispositions
- Collect performance snapshots across API routes and agent sessions
- Trend detection with rolling window analysis
- Automatic regression alerts when metrics degrade beyond thresholds
- API:
/api/performancefor snapshots, trends, and regression queries
- Track schedule execution frequency, cost, and token usage over time
- Anomaly detection for cost spikes and unusual execution patterns
- Per-schedule and aggregate usage analytics
- API:
/api/usagefor monitoring and alerting
- Health-gated scheduling: suppress non-critical work when system health is degraded
- Priority rules engine for scheduling decisions based on agent state and workload
- Automatic backoff when health checks indicate resource pressure
- Repository-level locking to prevent concurrent work task conflicts
- Issue deduplication to avoid filing duplicate issues across scheduled runs
- Bounded LRU caches with configurable TTL per namespace
- Replaces per-module Map/Set patterns to prevent unbounded memory growth
- Optional SQLite persistence for crash recovery
- Used across polling, messaging, AlgoChat bridge, and Slack bridge
- Tree-sitter parser for TypeScript, JavaScript, Python, Go, Rust, and more
- Extracts functions, classes, imports, and call graphs for smarter work tasks
corvid_code_symbolsandcorvid_find_referencestools for agent use
- OpenTelemetry tracing with OTLP HTTP export
- Prometheus metrics endpoint
- Immutable audit log with trace context propagation
+--------------------------+
| Angular 21 Dashboard |
| (signals, standalone) |
+------------+-------------+
|
HTTP / WebSocket
|
+--------------------------------+--------------------------------+
| Bun Server (port 3000) |
| |
| +----------+ +----------+ +-----------+ +----------------+ |
| | Process | | Council | | Scheduler | | Work Tasks | |
| | Manager | | Engine | | Service | | (git worktree) | |
| +----------+ +----------+ +-----------+ +----------------+ |
| | Telegram | | Discord | | Voice | | Personas | |
| | Bridge | | Bridge | | TTS / STT | | + Skills | |
| +----------+ +----------+ +-----------+ +----------------+ |
| | Workflow | | A2A | | Marketplace | | Sandbox | |
| | Engine | | Protocol | | + Plugins | | (containers) | |
| +----------+ +----------+ +-------------+ +---------------+ |
| | Mention | | Exam | | Improvement | | Notifications | |
| | Polling | | System | | Pipeline | | (multi-chan) | |
| +----------+ +----------+ +-------------+ +---------------+ |
| | Reputation | | Tenants | | Health | | Feedback | |
| | + Trust | | + Billing| | Monitoring | | Loop | |
| +------------+ +---------+ +-------------+ +--------------+ |
| | Performance| | Usage | | Observability (OTEL) | |
| | Metrics | | Monitor | | Tracing + Metrics + Audit | |
| +------------+ +---------+ +-------------------------------+ |
| | | | | |
| +----+-----+ +----+-----+ +-----+-----+ +------+--------+ |
| | Claude | | Ollama | | AlgoChat | | GitHub API | |
| | Agent SDK| | (local) | | (Algorand)| | (webhooks) | |
| +----------+ +----------+ +-----------+ +---------------+ |
| |
| +-----------------------------------------------------------+ |
| | SQLite (bun:sqlite) | |
| | 67 migrations | FTS5 search | WAL mode | foreign keys | |
| +-----------------------------------------------------------+ |
+-----------------------------------------------------------------+
server/ Bun HTTP + WebSocket server
a2a/ Google A2A protocol inbound task handling and agent card
algochat/ On-chain messaging (bridge, wallet, directory, messenger)
ast/ Tree-sitter AST parser for code understanding
billing/ Usage metering and billing
channels/ Channel adapter interfaces for messaging bridges
councils/ Council discussion and synthesis engines
db/ SQLite schema (67 migrations) and query modules
discord/ Bidirectional Discord bridge (raw WebSocket gateway)
docs/ OpenAPI generator, MCP tool docs, route registry
events/ Event bus and WebSocket broadcasting
exam/ Model exam system with 18 test cases across 6 categories
github/ GitHub API operations (PRs, issues, reviews)
feedback/ PR outcome tracking and schedule effectiveness learning
health/ Health monitoring, heartbeat, incident detection, and runbook
improvement/ Self-improvement pipeline and health metrics
lib/ Shared utilities (logger, crypto, validation, web search, dedup)
marketplace/ Agent marketplace β publish, discover, consume services
mcp/ MCP tool server and 37 corvid_* tool handlers
memory/ Structured memory with vector embeddings
middleware/ Auth, CORS, rate limiting, startup validation
notifications/ Multi-channel notification delivery (Discord, Telegram, GitHub, AlgoChat)
observability/ OpenTelemetry tracing, Prometheus metrics
openapi/ OpenAPI spec generator and route registry
performance/ Performance metrics collection and regression detection
permissions/ Capability broker β grant, revoke, and check agent tool access
plugins/ Plugin SDK and dynamic tool registration
polling/ GitHub mention polling for @mention-driven automation
process/ Agent lifecycle (SDK + Ollama, approval, event bus, persona/skill injection)
providers/ Multi-model cost-aware routing
public/ Static assets served by the HTTP server
reputation/ Reputation and trust scoring
routes/ REST API routes (37 route modules)
sandbox/ Container sandboxing for isolated execution
scheduler/ Cron/interval execution engine
selftest/ Self-test and validation utilities
slack/ Bidirectional Slack bridge (channel adapter, notifications, questions)
telegram/ Bidirectional Telegram bridge (long-polling, voice)
tenant/ Multi-tenant isolation and access control
usage/ Schedule usage monitoring and anomaly detection
voice/ TTS (OpenAI) and STT (Whisper) with caching
webhooks/ GitHub webhook and mention polling
work/ Work task service (worktree, branch, validate, PR)
workflow/ Graph-based DAG workflow orchestration engine
ws/ WebSocket handlers with pub/sub
client/ Angular 21 SPA (standalone components, signals)
cli/ CLI entry point and commands
shared/ TypeScript types shared between server and client
deploy/ Docker, docker-compose, systemd, launchd, nginx, caddy, Helm, K8s
e2e/ Playwright end-to-end tests (31 spec files, 360 E2E tests)
Extensible tool system via Model Context Protocol:
| Category | Tools |
|---|---|
| Messaging | corvid_send_message, corvid_list_agents |
| Memory | corvid_save_memory (on-chain encrypted), corvid_recall_memory (FTS5) |
| GitHub | corvid_github_star_repo, corvid_github_fork_repo, corvid_github_list_prs, corvid_github_create_pr, corvid_github_review_pr, corvid_github_get_pr_diff, corvid_github_comment_on_pr, corvid_github_create_issue, corvid_github_list_issues, corvid_github_repo_info, corvid_github_unstar_repo, corvid_github_follow_user |
| Automation | corvid_create_work_task, corvid_manage_schedule, corvid_manage_workflow |
| Discovery | corvid_discover_agent, corvid_invoke_remote_agent (A2A protocol) |
| Web | corvid_web_search (Brave), corvid_deep_research (multi-angle) |
| Credits | corvid_check_credits, corvid_grant_credits, corvid_credit_config |
| Owner Comms | corvid_notify_owner, corvid_ask_owner, corvid_configure_notifications |
| Reputation | corvid_check_reputation, corvid_check_health_trends, corvid_publish_attestation, corvid_verify_agent_reputation |
| Code | corvid_code_symbols (AST symbols), corvid_find_references (cross-file refs) |
| Admin | corvid_repo_blocklist (manage off-limits repos) |
| Session | corvid_extend_timeout |
Tools are permission-scoped per agent via skill bundles and agent-level allowlists. Scheduler-blocked enforcement prevents unintended side effects from automated runs.
~200 REST endpoints and a WebSocket interface across 37 route modules:
| Group | Endpoints | Description |
|---|---|---|
| Agents | GET/POST/PUT/DELETE /api/agents |
Agent CRUD with model, voice, and permission config |
| Personas | GET/PUT/DELETE /api/agents/:id/persona |
Character system β archetype, traits, voice style |
| Skills | /api/skill-bundles, /api/agents/:id/skills |
Composable tool + prompt bundles |
| Sessions | GET/POST/PUT/DELETE /api/sessions |
Session lifecycle and message history |
| Councils | /api/councils, /api/councils/:id/launch |
Multi-agent deliberation with stage tracking |
| Workflows | /api/workflows |
DAG orchestration with suspend/resume |
| Schedules | /api/schedules |
Cron/interval automation with approval |
| Work Tasks | /api/work-tasks |
Self-improvement task tracking |
| Marketplace | /api/marketplace |
Agent service listings, reviews, federation |
| Webhooks | /api/webhooks, POST /webhooks/github |
GitHub event-driven automation |
| Mention Polling | /api/mention-polling |
GitHub @mention polling configuration |
| Reputation | /api/reputation |
Trust scores, events, attestations |
| Billing | /api/billing |
Subscriptions, usage metering, invoices |
| Sandbox | /api/sandbox |
Container policies and allocation |
| Dashboard | /api/dashboard/summary |
Aggregated dashboard summary with activity feed |
| Analytics | /api/analytics |
Cost, token, and session statistics |
| Audit | /api/audit |
Immutable audit log queries |
| Exam | /api/exam |
Model examination and capability scoring |
| MCP API | /api/mcp |
Model Context Protocol endpoints |
| MCP Servers | /api/mcp-servers |
External MCP server configuration |
| Ollama | /api/ollama |
Ollama provider management and model pulls |
| Plugins | /api/plugins |
Plugin registry and capability management |
| Permissions | /api/permissions |
Capability broker β grant, revoke, and check agent tool access |
| Allowlist | /api/allowlist |
Address allowlist management |
| Repo Blocklist | /api/repo-blocklist |
Blocked repository management |
| GitHub Allowlist | /api/github-allowlist |
GitHub username allowlist management |
| Projects | /api/projects |
Project CRUD and filesystem browsing |
| Tenants | /api/tenants |
Multi-tenant registration and member management |
| Auth Flow | /api/auth |
Device authorization for CLI login |
| Settings | /api/settings |
Application settings and operational mode |
| Performance | /api/performance |
Performance snapshots, trends, and regression detection |
| Usage | /api/usage |
Schedule usage monitoring and anomaly detection |
| Feedback | /api/feedback |
PR outcome tracking and schedule learning |
| System Logs | /api/system-logs |
System log queries and credit history |
| AlgoChat | /api/algochat/status, /api/algochat/network, /api/algochat/psk-* |
Bridge status, network switching, PSK contacts and QR codes |
| Wallets | /api/wallets/summary, /api/wallets/:address/* |
External wallet summaries, messages, and credit grants |
| Feed | GET /api/feed/history |
Combined agent + AlgoChat message history |
| Escalation | /api/escalation-queue, /api/operational-mode |
Approval queue management and operational mode control |
| Backup | POST /api/backup |
Trigger database backup |
| Self-Test | POST /api/selftest/run |
Run self-test suite (unit/e2e/all) |
| Health | GET /api/health, /health/live, /health/ready |
Health check, liveness and readiness probes |
| A2A | /.well-known/agent-card.json |
Google A2A protocol Agent Card |
| WebSocket | WS /ws |
Real-time streaming and event subscriptions |
bun test # 5192+ server tests (~120s)
cd client && npx vitest run # Angular component tests (~2s)
bun run test:e2e # 31 Playwright spec files, 360 tests
bun run spec:check # Validate all module specs in specs/5192 unit tests covering: API routes, audit logging, authentication, bash security, billing, CLI, credit system, crypto, database migrations, Discord bridge, feedback loop, GitHub tools, health monitoring, marketplace, MCP tool handlers, notifications, multi-model routing, multi-tenant isolation, observability, owner communication, performance metrics, personas, plugins, process lifecycle, rate limiting, reputation, sandbox isolation, scheduling, skill bundles, Slack bridge, Telegram bridge, tenant isolation, usage monitoring, validation, voice TTS/STT, wallet keystore, web search, workflows, work tasks, and Angular components.
360 E2E tests across 31 Playwright spec files covering 198/202 testable API endpoints and all 37 Angular UI routes.
108 module specs in specs/ with automated validation via bun run spec:check β checks YAML frontmatter, required sections, API surface coverage (exported symbols vs documented), file existence, database table references, and dependency graph integrity. Runs in CI on every commit.
| Layer | Technology |
|---|---|
| Runtime | Bun β server, package manager, test runner, bundler |
| Frontend | Angular 21 β standalone components, signals, responsive mobile UI |
| Database | SQLite β WAL mode, FTS5, 67 migrations |
| Agent SDK | Claude Agent SDK |
| Local Models | Ollama β Qwen, Llama, etc. |
| Voice | OpenAI TTS/Whisper β 6 voice presets, STT transcription |
| Blockchain | Algorand β on-chain identity and messaging |
| Tools | MCP SDK |
| Observability | OpenTelemetry β tracing, Prometheus metrics |
| Validation | Zod β runtime schema validation |
- Authentication β API key required on non-localhost; WebSocket auth enforced
- Encryption β AES-256-GCM for wallets and memory; X25519 for on-chain messaging
- File protection β agents cannot modify security-critical files (enforced at runtime)
- Bash validation β dangerous commands blocked before execution
- Environment isolation β agent subprocesses receive only safe environment variables
- Rate limiting β per-IP sliding window (600 GET/min, 60 mutation/min)
- Spending limits β daily ALGO cap, per-message cost check, credit gating
- Bridge authorization β Telegram user allowlist, Discord channel restriction
- Audit logging β immutable, insert-only log with trace IDs
- Startup validation β server refuses to start without API key on non-localhost bind
- Prompt injection detection β multi-layer scanner with encoding attack detection
- Multi-tenant isolation β DB filter runtime guards, API key authority over headers, tenant-scoped WebSocket broadcasts
- Social engineering protection β detects manipulation attempts in issue/PR comments
- Malicious code scanning β unified CI security gate with
bun run security:scan
See SECURITY.md for the full security model and responsible disclosure.
The deploy/ directory includes production configurations:
Dockerfile+docker-compose.ymlβ multi-stage build, non-root containercorvid-agent.serviceβ systemd unit for Linuxcom.corvidlabs.corvid-agent.plistβ macOS LaunchAgentdaemon.shβ cross-platform daemon installerrun-loop.shβ auto-restart wrapper with update supportnginx/+caddy/β reverse proxy with TLS terminationhelm/β Helm chart for Kubernetes deploymentk8s/β raw Kubernetes manifests (configmap, ingress, service, statefulset)
| Variable | Description | Default |
|---|---|---|
ANTHROPIC_API_KEY |
Anthropic API key (not needed if Claude Code CLI is installed) | β |
ALGOCHAT_MNEMONIC |
25-word Algorand account mnemonic | β |
ALGORAND_NETWORK |
Network: localnet, testnet, mainnet |
localnet |
PORT |
HTTP server port | 3000 |
BIND_HOST |
Bind address | 127.0.0.1 |
API_KEY |
Bearer token for auth (required on non-localhost) | β |
OLLAMA_HOST |
Ollama API base URL | http://localhost:11434 |
GH_TOKEN |
GitHub token for work tasks and PRs | β |
TELEGRAM_BOT_TOKEN |
Telegram bot token (enables bridge + notifications) | β |
TELEGRAM_CHAT_ID |
Telegram chat ID for the bridge | β |
TELEGRAM_ALLOWED_USER_IDS |
Comma-separated authorized Telegram user IDs | β |
DISCORD_BOT_TOKEN |
Discord bot token (enables bridge) | β |
DISCORD_CHANNEL_ID |
Discord channel ID to listen in | β |
SLACK_BOT_TOKEN |
Slack bot token (enables bridge + notifications) | β |
SLACK_CHANNEL_ID |
Slack channel ID for the bridge | β |
SLACK_SIGNING_SECRET |
Slack signing secret for event verification | β |
OPENAI_API_KEY |
OpenAI key for voice TTS/STT | β |
BRAVE_API_KEY |
Brave Search API key | β |
LOG_LEVEL |
debug, info, warn, error |
info |
See .env.example for the full list of 30+ options including wallet encryption, ALGO spending caps, scheduler config, and CORS settings.
These apps were designed, coded, tested, and deployed autonomously by corvid-agent β no human-written application code. Each is an Angular 21 standalone app hosted on GitHub Pages.
Ecosystem landing page: corvid-agent.github.io
| App | API | Description |
|---|---|---|
| weather-dashboard | Open-Meteo | Forecasts, hourly/daily charts, air quality, UV meter, wind compass, astronomy |
| bw-cinema | TMDb + Internet Archive | Classic black-and-white film browser with search, favorites, and streaming |
| space-dashboard | NASA | APOD gallery, Mars rover photos, ISS tracker, near-Earth objects |
| pd-gallery | Art Institute of Chicago | 130k+ public domain artworks with collections and genre browsing |
| pd-audiobooks | LibriVox | Public domain audiobook player with chapter navigation and reading lists |
| poetry-atlas | PoetryDB | Classic poetry explorer with 129 poets, search, favorites, and discovery |
| quake-tracker | USGS | Real-time earthquake dashboard with magnitude filtering and seismic analytics |
| pd-music | MusicBrainz + Internet Archive | Public domain music explorer with streaming and curated collections |
| pixel-forge | Canvas API | Pixel art editor with drawing tools, palette presets, and gallery |
CLAUDE.mdβ Agent instructions for working on this repoVISION.mdβ Project manifesto and long-term direction.env.exampleβ All configuration options with descriptionsCONTRIBUTING.mdβ Development setup and guidelinesSECURITY.mdβ Responsible disclosure policy
See CONTRIBUTING.md for development setup and guidelines.