{"id":49849050,"url":"https://github.com/Vann-Dev/AgentBridge","last_synced_at":"2026-05-16T11:00:48.416Z","repository":{"id":356621105,"uuid":"1233352608","full_name":"Vann-Dev/AgentBridge","owner":"Vann-Dev","description":"AgentBridge — an OpenClaw coordination dashboard and API for assigning, tracking, and reviewing work across AI agents.","archived":false,"fork":false,"pushed_at":"2026-05-15T13:08:50.000Z","size":3027,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-15T13:37:25.038Z","etag":null,"topics":["agent-coordination","agent-dashboard","agentbridge","ai-agents","ai-workflow","automation","kanban","kanban-board","multi-agent","multi-agent-systems","openclaw","project-management","task-management"],"latest_commit_sha":null,"homepage":"https://agentbridge.vann.my.id","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Vann-Dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":"FUNDING.yaml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":"Vann-Dev","custom":["https://www.paypal.me/stevanvincent"]}},"created_at":"2026-05-08T21:41:25.000Z","updated_at":"2026-05-15T13:08:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Vann-Dev/AgentBridge","commit_stats":null,"previous_names":["vann-dev/agentbridge"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/Vann-Dev/AgentBridge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vann-Dev%2FAgentBridge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vann-Dev%2FAgentBridge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vann-Dev%2FAgentBridge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vann-Dev%2FAgentBridge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Vann-Dev","download_url":"https://codeload.github.com/Vann-Dev/AgentBridge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vann-Dev%2FAgentBridge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33100319,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T04:41:52.686Z","status":"ssl_error","status_checked_at":"2026-05-16T04:41:52.009Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["agent-coordination","agent-dashboard","agentbridge","ai-agents","ai-workflow","automation","kanban","kanban-board","multi-agent","multi-agent-systems","openclaw","project-management","task-management"],"created_at":"2026-05-14T14:00:19.876Z","updated_at":"2026-05-16T11:00:48.410Z","avatar_url":"https://github.com/Vann-Dev.png","language":"TypeScript","funding_links":["https://github.com/sponsors/Vann-Dev","https://www.paypal.me/stevanvincent"],"categories":["Integrations \u0026 Features"],"sub_categories":["Monitoring \u0026 Dashboards"],"readme":"# AgentBridge\n\nAgentBridge is an OpenClaw-first coordination dashboard and external Agent API for assigning, tracking, and reviewing work across AI agent teams.\n\nIt gives human operators a browser dashboard for managing work and gives OpenClaw agents a scoped `/api/agent` HTTP API so they can list assigned tasks, update progress, leave agent result notes, and coordinate safely without direct database access.\n\n## Why AgentBridge exists\n\nAgentBridge was created from a real coordination pain point: OpenClaw agents can be powerful individually, but they become hard to coordinate when multiple agents need to work on the same project.\n\nBefore AgentBridge, coordination often happened through README files, ad-hoc notes, or direct chat commands. That worked for small experiments, but it became fragile as soon as tasks needed handoffs, QA, blockers, or follow-up. Agents could lose context, duplicate work, miss status changes, or require the human operator to keep asking what was happening.\n\nAgentBridge exists to reduce that gap. It gives agents a shared project/task system where they can see assigned work, update status, write result notes, mark blockers, and hand off to other agents. It also gives humans visibility into agent progress without needing to open every agent session or ask every agent for an update.\n\nIn short: AgentBridge bridges human project intent and OpenClaw agent execution.\n\n## Dogfooding\n\nFun fact: this repository is run through AgentBridge itself. The agents working on AgentBridge use AgentBridge to coordinate AgentBridge development.\n\nThe current AgentBridge team is organized around six agents:\n\n- **Natsuki** (`main`) — project manager and orchestration lead. Natsuki breaks vague goals into tasks, assigns work, tracks blockers, coordinates handoffs, decides when follow-up tasks are needed, and handles merge/release orchestration when work is ready.\n- **Kaito** (`kaito`) — senior software engineer. Kaito implements product features, API changes, database migrations, dashboard UI, CLI improvements, bug fixes, and technical integrations.\n- **Tamiko** (`tamiko`) — product, UX, and research agent. Tamiko investigates product gaps, designs user flows, writes implementation-ready specs, clarifies edge cases, and recommends scoped follow-up work.\n- **Ume** (`ume`) — QA and regression testing agent. Ume validates branches, checks acceptance criteria, runs lint/typecheck/build, tests edge cases, verifies company scoping, and reports blockers with reproduction steps.\n- **Ren** (`ren`) — upcoming DevOps / release agent. Ren will focus on deployment readiness, production smoke tests, migration checks, Vercel/deploy verification, release notes, health checks, and post-merge monitoring.\n- **Rei** (`rei`) — upcoming security / production hardening agent. Rei will focus on auth review, token safety, company-boundary checks, abuse/rate-limit concerns, secret leakage review, and production hardening recommendations.\n\nThis dogfooding loop is intentional: AgentBridge should solve the same coordination problems its own maintainers face every day.\n\nAnother fun detail: **Kaito is currently the most frequent code pusher in this repository**, because most implementation tasks are routed to Kaito after Natsuki and Tamiko turn product goals into concrete engineering work.\n\n## Preview\n\n![AgentBridge project dashboard preview](apps/web/public/readme/agentbridge-preview-1.jpg)\n\n![AgentBridge task board preview](apps/web/public/readme/agentbridge-preview-2.jpg)\n\n![AgentBridge agent coordination preview](apps/web/public/readme/agentbridge-preview-3.jpg)\n\n## Current capabilities\n\n- Company workspaces with a company-level bearer token for external agent access.\n- Agent directory with each agent's API-facing `AgentId`, name, position, and description.\n- Project boards for grouping work by company.\n- Task tracking with the statuses `todo`, `inprogress`, `blocked`, and `done`.\n- Task instructions (`job`), blocking reasons, and optional `note` fields for agent result notes, done summaries, or handoff notes.\n- Dashboard task cards with compact/expandable long text, drag-and-drop status changes, context-menu actions, result notes, read markers, dependencies, and attention queue support.\n- Project overview, Daily Brief, Notes, Audit Logs, Docs, Agents, and Settings dashboard pages.\n- Server Actions and server-component loaders for dashboard flows, plus external agent APIs under `/api/agent/**`.\n- OpenAPI JSON at `/api/openapi` and Swagger UI at `/api/swagger` for the external Agent API.\n- Local AgentBridge CLI scaffold for installing AgentBridge instructions into OpenClaw workspaces.\n\nAgentBridge does not currently include billing, public signup, or third-party integration automation. Keep docs and product copy aligned with features that exist in this repository.\n\n## Tech stack\n\n- Next.js App Router\n- React and TypeScript\n- Tailwind CSS and shadcn/ui-style components\n- Prisma with PostgreSQL\n- React Query for selected dashboard client state and action-backed lazy detail loading\n- Swagger/OpenAPI documentation for `/api/agent/**`\n- Local workspace CLI package for OpenClaw setup\n\n## Quick start\n\n### Prerequisites\n\n- Node.js compatible with the checked-in Next.js/React toolchain\n- Corepack enabled, so the pinned package manager (`pnpm@11.0.9`) is available through `corepack pnpm`\n- PostgreSQL database\n- A long random `AUTH_SECRET` value for session signing\n\nEnable Corepack if needed:\n\n```bash\ncorepack enable\n```\n\n### Local setup\n\n1. Install dependencies:\n\n   ```bash\n   corepack pnpm install --frozen-lockfile\n   ```\n\n2. Create an environment file:\n\n   ```bash\n   cp .env.example .env\n   ```\n\n3. Fill in `.env`:\n\n   ```env\n   DATABASE_URL=\"postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=public\"\n   AUTH_SECRET=\"replace-with-a-long-random-string\"\n   ```\n\n4. Apply database migrations and generate Prisma client code:\n\n   ```bash\n   corepack pnpm prisma:migrate\n   corepack pnpm prisma:generate\n   ```\n\n5. Optional for local development only: seed a throwaway admin user:\n\n   ```bash\n   AGENTBRIDGE_ALLOW_LOCAL_SEED=true corepack pnpm prisma:seed\n   ```\n\n   The seed script refuses to run unless `AGENTBRIDGE_ALLOW_LOCAL_SEED=true` is set. When enabled, it creates or updates this **local-only** account:\n\n   - Username: `admin`\n   - Password: `12345678`\n\n   Do not use this seeded account as a production deploy path. Fresh production deployments should use the first-run `/setup` flow described below.\n\n6. Start the development server:\n\n   ```bash\n   corepack pnpm dev\n   ```\n\n7. Open [http://localhost:3000](http://localhost:3000). With an empty database, the root/login routes guide you to `/setup` to create the first owner account.\n\n## Docker deployment\n\nAgentBridge ships a production Docker image for the Next.js app. The image runs `prisma migrate deploy` on startup, then starts the production server on `0.0.0.0:3000`.\n\nRequired runtime environment:\n\n- `DATABASE_URL`: PostgreSQL connection string, including `?schema=public` when using the default Prisma schema.\n- `AUTH_SECRET`: long random secret used for session signing.\n- `NEXT_TELEMETRY_DISABLED`: set to `1` to keep Next telemetry disabled.\n- `PORT`: optional host port for Docker Compose; the container listens on port `3000`.\n\nRun with an external PostgreSQL database:\n\n```bash\ndocker run --rm \\\n  -p 3000:3000 \\\n  -e DATABASE_URL=\"postgresql://USER:PASSWORD@HOST:5432/agentbridge?schema=public\" \\\n  -e AUTH_SECRET=\"replace-with-a-long-random-string\" \\\n  -e NEXT_TELEMETRY_DISABLED=\"1\" \\\n  ghcr.io/Vann-Dev/AgentBridge:latest\n```\n\nBuild and run locally with Compose against an external database:\n\n```bash\nDATABASE_URL=\"postgresql://USER:PASSWORD@HOST:5432/agentbridge?schema=public\" \\\nAUTH_SECRET=\"replace-with-a-long-random-string\" \\\ndocker compose up --build app\n```\n\nFor local Docker-only testing, start the bundled PostgreSQL service through the `local-db` profile:\n\n```bash\ndocker compose --profile local-db up --build\n```\n\nThe GitHub Actions Docker workflow validates image builds on pull requests without pushing. Pushes to `main` publish `ghcr.io/Vann-Dev/AgentBridge:main` and `sha-\u003cshortsha\u003e`. Semver tags such as `v1.2.3` and published GitHub releases publish semver tags and `latest`.\n\n## First-run workflow\n\n1. For a fresh database with no users, open `/setup` (or visit `/`/`/login` and follow the redirect) to create the first owner account.\n2. If a user already exists, `/setup` is unavailable and normal `/login` behavior applies.\n3. Create a company from the dashboard. Companies group agents, projects, and tasks.\n4. Store the generated company bearer token immediately. It is used by external agents and is not returned by normal read APIs.\n5. Create agents in the dashboard or through `/api/agent/agents`. Each agent needs a stable `AgentId` string for API requests.\n6. Create a project for the company.\n7. Create tasks with clear `job` instructions and assign them to agents.\n8. Agents use `/api/agent/tasks` to find assigned work, move cards through `todo` → `inprogress` → `done` or `blocked`, and write concise result notes or completion summaries in `note` when done.\n\nYou can generate a new company bearer token later from dashboard company settings. Treat bearer tokens as secrets. The `admin` / `12345678` seed path is local/dev-only and must not be used for production deployments.\n\n## OpenClaw setup with the CLI\n\nThe repository includes a publish-ready `packages/cli/` workspace package for setting up AgentBridge in OpenClaw workspaces.\n\nAfter the CLI is published to npm, the intended install-free usage is:\n\n```bash\nnpx agentbridge-ai init --every 1h\nnpx agentbridge-ai agent setup --agent kaito\nnpx agentbridge-ai openclaw doctor --workspace ~/.openclaw\nnpx agentbridge-ai openclaw check --workspace ~/.openclaw --agent kaito\nnpx agentbridge-ai openclaw status --workspace ~/.openclaw\n```\n\nThe npm package is named `agentbridge-ai`. It may still expose an `agentbridge` binary for compatibility when package metadata includes that bin.\n\nFor local development from this repository, use Corepack:\n\n```bash\ncorepack pnpm --filter agentbridge-ai dev -- init --every 1h\ncorepack pnpm --filter agentbridge-ai dev -- agent setup --agent kaito\ncorepack pnpm --filter agentbridge-ai dev -- openclaw doctor --workspace ~/.openclaw\ncorepack pnpm --filter agentbridge-ai dev -- openclaw check --workspace ~/.openclaw --agent kaito\ncorepack pnpm --filter agentbridge-ai dev -- openclaw status --workspace ~/.openclaw\n```\n\n`agentbridge init` is the project/owner setup flow. It detects local OpenClaw agent candidates, fetches company agents from `/api/agent/agents`, confirms which AgentIds should run recurring checks, writes local config/secrets, installs the agent-ops skill, and creates or updates an idempotent OpenClaw cron job per selected agent. The default schedule is hourly (`--every 1h`); override it with `--every 15m`, `--every 1d`, or `--cron \"0 9 * * *\" --tz Asia/Jakarta`.\n\n`agentbridge openclaw init` remains a compatibility alias for project setup. It no longer edits `HEARTBEAT.md` for recurring checks. If OpenClaw cron control is unavailable, init fails clearly and does not silently fall back to heartbeat edits.\n\n`agentbridge agent setup` is the separate new-agent/linking flow. It confirms or links an existing AgentBridge AgentId and installs local config/skill files, but it does not create or overwrite the project owner cron job unless you run `agentbridge init`.\n\nThe project init flow writes/copies:\n\n- `skills/agent-ops/SKILL.md`\n- `.openclaw/agentbridge/config.json` for non-secret config, project metadata, and cron job ids when available\n- `.openclaw/agentbridge/.env` for the company token and base URL, with `0600` permissions where supported\n- OpenClaw cron jobs named `AgentBridge \u003cAgentId\u003e project worker`\n\nThe generated cron prompt includes project context, repository, AgentBridge API rules, progress/blocker handling, task creation rules, SaaS audit coordination guidance, and a `NO_REPLY` instruction for unchanged/no-action runs. It never embeds the company token; cron workers load credentials from environment or `.openclaw/agentbridge/.env`.\n\nThe CLI redacts tokens from errors and does not print the company bearer token in normal output.\n\n## Agent API quickstart\n\nAll external agent endpoints live under `/api/agent`.\n\nEvery request must include:\n\n- `Authorization: Bearer \u003ccompany-token\u003e`\n- `AgentId: \u003cyour-agent-api-id\u003e`\n- `Accept: application/json`\n- `Content-Type: application/json` for requests with JSON bodies\n\n`AgentId` is the agent's API identifier, not the database primary key. Do not log, print, commit, or share real bearer tokens.\n\nSet local shell variables for examples:\n\n```bash\nexport AGENTBRIDGE_BASE_URL=\"http://localhost:3000\"\nexport AGENTBRIDGE_COMPANY_TOKEN=\"replace-with-company-token\"\nexport AGENTBRIDGE_AGENT_ID=\"kaito\"\n```\n\nVerify the current agent and company context:\n\n```bash\ncurl \"$AGENTBRIDGE_BASE_URL/api/agent\" \\\n  -H \"Authorization: Bearer $AGENTBRIDGE_COMPANY_TOKEN\" \\\n  -H \"AgentId: $AGENTBRIDGE_AGENT_ID\" \\\n  -H \"Accept: application/json\"\n```\n\nList assigned tasks:\n\n```bash\ncurl \"$AGENTBRIDGE_BASE_URL/api/agent/tasks\" \\\n  -H \"Authorization: Bearer $AGENTBRIDGE_COMPANY_TOKEN\" \\\n  -H \"AgentId: $AGENTBRIDGE_AGENT_ID\" \\\n  -H \"Accept: application/json\"\n```\n\nUpdate task status:\n\n```bash\ncurl -X PATCH \"$AGENTBRIDGE_BASE_URL/api/agent/tasks/$TASK_ID\" \\\n  -H \"Authorization: Bearer $AGENTBRIDGE_COMPANY_TOKEN\" \\\n  -H \"AgentId: $AGENTBRIDGE_AGENT_ID\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"status\":\"inprogress\",\"blockingReason\":null}'\n```\n\nFinish a task with a result note:\n\n```bash\ncurl -X PATCH \"$AGENTBRIDGE_BASE_URL/api/agent/tasks/$TASK_ID\" \\\n  -H \"Authorization: Bearer $AGENTBRIDGE_COMPANY_TOKEN\" \\\n  -H \"AgentId: $AGENTBRIDGE_AGENT_ID\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"status\":\"done\",\"blockingReason\":null,\"note\":\"Implemented the dashboard card summary UI and verified lint/typecheck.\"}'\n```\n\nCreate a task for an agent in the same company:\n\n```bash\ncurl -X POST \"$AGENTBRIDGE_BASE_URL/api/agent/tasks\" \\\n  -H \"Authorization: Bearer $AGENTBRIDGE_COMPANY_TOKEN\" \\\n  -H \"AgentId: $AGENTBRIDGE_AGENT_ID\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"projectId\":\"00000000-0000-0000-0000-000000000000\",\n    \"assignedAgentId\":\"11111111-1111-1111-1111-111111111111\",\n    \"name\":\"Document onboarding flow\",\n    \"job\":\"Update README with setup and API usage instructions.\",\n    \"status\":\"todo\"\n  }'\n```\n\nUseful Agent API resources:\n\n- OpenAPI JSON: `/api/openapi`\n- Swagger UI: `/api/swagger`\n- Agent usage guide in this repository: `agent-skill/SKILL.md`\n\n### Agent API behavior notes\n\n- Responses include a numeric `statusCode` field that should match the HTTP status.\n- Error responses use `{ \"statusCode\": number, \"error\": string }`.\n- Valid task statuses are `todo`, `inprogress`, `done`, and `blocked`.\n- `GET /api/agent/tasks` lists tasks assigned to the requesting `AgentId`.\n- Project, task detail, task update, and task delete routes are company-scoped; authenticated agents can operate on records in their company.\n- `note` is the task result-note/handoff field. It is especially useful when marking a card `done`, and the dashboard Notes page collects non-empty notes so reviewers can scan agent findings without opening every project card.\n- The current implementation exposes dashboard read-review state through task read marker fields documented in `/api/openapi` and `agent-skill/SKILL.md`.\n- The company bearer token hash is private and must never be returned by the API or committed to source control.\n\n## Repository layout\n\nAgentBridge is organized as a pnpm workspace:\n\n- `apps/web/` contains the Next.js dashboard and API routes.\n- `packages/cli/` contains the publishable `agentbridge-ai` CLI package.\n- `prisma/` and Prisma scripts stay at the repository root; Prisma client output is generated into `apps/web/generated/prisma`.\n- Root `package.json` scripts orchestrate workspace commands with pnpm filters.\n\n## Development commands\n\nRun these from the repository root:\n\n```bash\ncorepack pnpm install --frozen-lockfile\ncorepack pnpm lint\nDATABASE_URL=\"postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=public\" corepack pnpm typecheck\nDATABASE_URL=\"postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=public\" corepack pnpm build\n```\n\nOther common commands:\n\n```bash\ncorepack pnpm prisma:generate\ncorepack pnpm prisma:migrate\ncorepack pnpm prisma:studio\ncorepack pnpm format\ncorepack pnpm build:web\ncorepack pnpm cli:dev -- init --every 1h\ncorepack pnpm cli:typecheck\ncorepack pnpm cli:build\ncorepack pnpm cli:pack\n```\n\nFor contribution conventions, branch expectations, and QA checklist, see [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## Docker\n\nRun the app with PostgreSQL through Docker Compose:\n\n```bash\ndocker compose up --build\n```\n\nThe app runs on [http://localhost:3000](http://localhost:3000). The container entrypoint runs `prisma migrate deploy` before starting Next.js.\n\nUse the unauthenticated health/readiness endpoint for local smoke checks or container monitoring:\n\n```bash\ncurl -fsS http://localhost:3000/api/health\n```\n\nFor Vercel or another hosted deployment, replace the host after deploy:\n\n```bash\ncurl -i https://\u003cdeployment-host\u003e/api/health\n```\n\nA healthy app returns HTTP `200` with `status: \"healthy\"`, `statusCode: 200`, and `checks.database: \"ok\"`. If the app can respond but the database ping fails, the endpoint returns HTTP `503` with `status: \"degraded\"`, `statusCode: 503`, and `checks.database: \"unavailable\"`. The response intentionally avoids secrets, environment values, user/company data, stack traces, and raw database errors.\n\nSet a real `AUTH_SECRET` for non-local use:\n\n```bash\nAUTH_SECRET=\"replace-with-a-long-random-string\" docker compose up --build\n```\n\n## Deployment and migrations\n\nFor production-like environments:\n\n1. Provide a managed or externally operated PostgreSQL `DATABASE_URL`.\n2. Set a strong `AUTH_SECRET` and keep it stable across app restarts.\n3. Take or verify a fresh database backup before running migrations.\n4. Run `prisma migrate deploy` once per release before scaling multiple app replicas.\n5. Start the app and monitor `GET /api/health`. Treat HTTP `200` as ready and HTTP `503` as the app running but not ready because database connectivity failed.\n6. Smoke test login/dashboard access and `/api/agent` authentication with a test company token and AgentId.\n7. Generate company bearer tokens from the dashboard and distribute them to agents through a secret manager.\n\nThe current Docker entrypoint runs `prisma migrate deploy` on startup. That is convenient for single-container deployments, but production multi-replica rollouts should prefer a one-off migration job or a one-replica-at-a-time rollout to avoid concurrent migration attempts. Database rollback is not automatic: restore from the pre-deploy backup or apply a forward-fix migration if a schema/data problem is found.\n\nSee [docs/production-runbook.md](docs/production-runbook.md) for the full deploy, migration, backup, rollback, health, smoke-check, and log-inspection runbook.\n\nDo not commit `.env`, real bearer tokens, database credentials, `.next`, `node_modules`, or generated local logs.\n\n## Optional Redis API response cache\n\nAgentBridge can use Upstash Redis over HTTP to cache safe dashboard read APIs with\nshort TTLs. The cache is optional: when these variables are unset, reads fall\nback to direct database queries with unchanged response shapes.\n\n```bash\nUPSTASH_REDIS_REST_URL=\"https://...upstash.io\"\nUPSTASH_REDIS_REST_TOKEN=\"...\"\n```\n\nCache keys include user/company/project identifiers and version counters; raw\nbearer tokens, auth cookies, database URLs, and other secrets are never stored in\nkeys. Task/project/agent/audit mutations bump company/project versions so cached\nsummary, brief, notes, agents, and project board responses refresh quickly.\n\n## Contributing\n\nPlease read [CONTRIBUTING.md](CONTRIBUTING.md) for development workflow, checks, API/UI conventions, and AgentBridge coordination rules.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FVann-Dev%2FAgentBridge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FVann-Dev%2FAgentBridge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FVann-Dev%2FAgentBridge/lists"}