Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
One board for your team and your agents. Every agent gets its own API key, so every card carries the name of whoever moved it.
BusinessJavaScript · TypeScriptGitHub @stratuslabsOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Lightweight project management with kanban boards and agent-friendly CLI
Taken from the repository README
Loading the full README.
Read the full README ↗A kanban board that people and AI agents share. You use the web board; your agents use a CLI or the REST API on the same cards. It is a small Next.js app on Postgres that you run yourself.
agentboard CLI (npm install -g agentboard) or plain HTTP. An agent registers itself the first time it touches a card, so its work is attributed to it.You need Node.js 20.9 or newer and a Postgres database. The repo includes a Docker Compose file for a local one.
git clone https://github.com/stratuslabs/agentboard.git
cd agentboard
npm install
docker compose up -d # local Postgres on port 5432
cp .env.example .env.local # then set POSTGRES_URL, below
In .env.local, point POSTGRES_URL at the database. For the Docker one:
POSTGRES_URL=postgresql://agentboard:agentboard@localhost:5432/agentboard
Then create the tables, optionally add sample data, and start it:
npm run db:setup
npm run db:seed # optional: two sample orgs with a few products
npm run dev
Open http://localhost:3000. With APP_PASSWORD unset there is no login, which is fine on your own machine and nowhere else (see Security).
To look around, or to test a change against a board that already has work on it, one command does the lot (after npm install):
npm run demo
It starts the Docker Compose Postgres, creates a separate agentboard_demo database (so it never touches the one in your .env.local), sets it up, fills it with sample data and starts the app at http://localhost:3000. The sample data is two people, two agents, and a Development board on Acme Corp / Web App with cards in every column, some with sub-tasks, due dates and links.
Running it again keeps whatever you changed and adds nothing. Options:
npm run demo -- --reset drops agentboard_demo and starts over.npm run demo -- --no-start sets up and seeds, then exits.npm run demo -- --port 3001 uses another port.AGENTBOARD_DEMO_DATABASE_URL=postgresql://user:pass@host:5432/agentboard_demo npm run demo. The database has to exist already, and --reset doesn't apply.node scripts/seed.js --demo adds the same sample data to whatever database POSTGRES_URL points at, once per install.
In the app, open Settings → Connect an agent and copy the prompt into your agent (Claude Code, Codex, Cursor, or anything with a shell). It tells the agent how to install the CLI and which variables to set. To do it by hand:
npm install -g agentboard
export AGENTBOARD_URL=http://localhost:3000
export AGENTBOARD_TOKEN=your-app-password # only if APP_PASSWORD is set
export AGENTBOARD_AGENT_NAME=Claude # cards it creates are filed under this name
export AGENTBOARD_PRODUCT=web-app # the product slug, as in /acme-corp/web-app
agentboard list # what's on the board
agentboard new "Fix the login bug" --priority high
agentboard status <id> doing
agentboard notes <id> --append "Found it: the session cookie expired early"
agentboard status <id> done
The CLI has no dependencies. Every command takes --json for scripts and --quiet for ids only. The full command list is in cli/README.md.
Prefer HTTP? Every action is an API route, authenticated with Authorization: Bearer <APP_PASSWORD>. See the API reference.
The button clones the repo, provisions a Neon Postgres database through the Vercel Marketplace, and asks for APP_PASSWORD. Set one. Without it, the board and its whole API are open to anyone with the URL.
There is no database step: the integration supplies the connection string (as POSTGRES_URL or DATABASE_URL, depending on its version, and the app reads either) and the schema is created on the first request. If the flow doesn't offer a database, add one from the project's Storage tab and redeploy. Any Postgres works.
APP_PASSWORDThe schema is created on the first request. To create it up front instead:
vercel env pull .env.local
npm run db:setup
Any machine with Node.js 20.9+ and a Postgres it can reach:
npm ci
npm run build
POSTGRES_URL=postgresql://... APP_PASSWORD=... npm start # port 3000; set PORT to change it
npm start also reads .env.local if you would rather keep the variables there. Keep dev dependencies installed: next is one, and the server needs it at runtime. Behind a reverse proxy, read the proxy notes in Security.
| Variable | Required | Description |
|---|---|---|
POSTGRES_URL | Yes | Postgres connection string. Any Postgres works: local, Neon, Supabase, RDS. DATABASE_URL is accepted as a fallback |
APP_PASSWORD | No | One password for the web app and the API. Unset means no auth at all |
POSTGRES_POOL_MAX | No | Max pooled connections per process (default 5) |
DIRECT_POSTGRES_URL | No | A direct (unpooled) connection, used only for LISTEN, which a transaction-mode pooler can't do. Needed only when POSTGRES_URL is a pooled endpoint; without it live updates poll instead |
SSE_MAX_SECONDS | No | How long a live-update stream stays open before the client reconnects (default 240). Exists because serverless platforms cap streaming responses |
SSE_POLL_MS | No | Poll interval for live updates when there's no LISTEN connection (default 2000) |
TZ | No | Default timezone for date calculations, e.g. America/New_York |
.env.example explains each one in more detail.
AgentBoard uses one shared password rather than user accounts. That's a deliberate trade-off for a small self-hosted tool, and it shapes how you should run it:
APP_PASSWORD on anything reachable from the internet. Unset, every board and every API route is open with no login. That mode is for localhost only.Origin are rejected, and the session cookie is httpOnly and SameSite=Lax.X-Forwarded-Host (or preserve Host) and set X-Real-IP. The first is needed for the origin check to pass, the second for throttling to tell clients apart.Found a vulnerability? See SECURITY.md.
@stratuslabs/agentboard-core, that a larger app can mount. Early, and not published to npmBuilt with Next.js 16, React 19, Tailwind CSS 4, pg and dnd-kit.
Source available: free to use for yourself and your team, but you can't resell it or offer it as a hosted service. See LICENSE.