Self-hosted AI dev platform

Build anything. Own everything. With us.

Your repo, your server, your agents — VB Kanban is the platform that runs them: installed on your own infrastructure, operated by us, and upgraded with new capability every month. Every card on the board is an agent session: it writes the code, reviews it, tests it, prices it — and stops at a merge gate only a human on your team can open.

VB-Kanban
|stage.aimixup.com
Claude Agent
Backlog2
In Progress1
Done3
#131high

Multi-workspace analytics dashboard

claudefeature
#130medium

SCIM provisioning for enterprise SSO

security
#129high

Retry policy for stuck agent sessions

claudebug
$2.1
#123medium

Notifications fix

claudedone
$1.13deployed
#122medium

Video generation issue

done
$4.65deployed
#121high

Call transcription STT integration

claudedone
$4.23deployed
Live
claude-code pushed 3 commits · VBK-131
LIVE
Who this is for

A chat/app builder is great for a weekend prototype. VB Kanban is built for the team after that.

One person, one prompt, one app — chat/app builders are genuinely good at that job. VB Kanban is a different tool, for the job that starts once a second person, a second month, or a review requirement shows up.

A chat/app builder
VB Kanban
Best at
one person, one prompt, one app — a landing page or a prototype, fast
a team of people and a team of agents, on one long-lived codebase
The 2nd contributor
there isn't a model for one
queue slots, per-task git worktrees, a merge lock, task participants
The 2nd month
a chat log
project memory, per-task memory, an audit trail of why
Review
you eyeball the preview
AI review phase → AI test gate → human-only merge
Cost
metered per message, flat
attributed per task, capped per task and per day, falling as memory compounds
Where it runs
their cloud, their model, their data
your server, your keys, your agents, your memory

Every buyer has hit the same cliff: a prototype over a weekend, it works, export to a repo — and the tool stops helping, exactly when a second contributor, a real migration, a regression or a review requirement shows up.

parallel agents in isolated worktreesplanning approval before codeper-task cost governanceRBAC + audit logself-hosteda dedicated engineer
The loop

The board knows whether it actually worked.

Every tool in this category records what an agent did. The board also records whether it worked — and that label is the input nobody else has.

RememberBuild
a shipped code path — a real API or DB hop, with work moving along ita human decision, not a code path — no packet travels it

Tap or hover any node or arrow. Solid arcs are shipped code paths — a real API or DB hop. The two dashed arcs are human decisions, and carry no packet.

01

The board labels every outcome, for free

Closed · reverted · rejected · sent back by review with a rework note · failed deploy. Those labels are a by-product of running the work, so there is no annotation step to skip and nobody to forget it.

02

The outcome labels the knowledge

Rework notes, failed deploys and error-state tasks are read straight off the board and extracted into facts with a root cause. They reach the next agent's task prompt as contraindications — an explicit "do not do the thing described", never an example to follow. Shipped: VBK-1775.

03

Nothing writes to memory directly

Every write proposes: evidence, validity dates, deterministic supersession, a tombstone so a deleted fact cannot be re-learned, and a promotion gate before anything reaches the team wiki. Reads are scoped at retrieval, not left to the model.

Retrieved context, measured against labelled ground truth
Avg tokens / caseFalse positives
Dump everything in16450.0%
Rank by relevance (BM25)76.837.5%
Governed memory — ours75.512.5%

Better precision at under half the tokens of dumping everything in. Four cases — small, and we would rather say it than have you find it. Deterministic labelled ground truth, not an LLM judge; regenerate it yourself with `php artisan coding-agent:eval-report`. The posture matters as much as the number: we run control arms against our own memory system and commit the report to the repo.

The design follows published 2026 work on governed agent memory. The numbers above are ours.

An assistant ingests what people already wrote and never learns whether it was right. A ticket tracker owns the board but not the runtime. An IDE agent owns the runtime but not the board. We own both ends of the arrow.

The differentiator

Everyone else added a chat. We made the card the session.

A chat-on-a-board tool drafts text for a human to carry out. On VB Kanban, the card is the agent's working session — it has a shell, a checkout, and a real turn budget, not a comment box.

Chat-on-a-board tools
VB Kanban
Where the AI lives
a chat panel bolted onto a board; it summarises, drafts, triages
the task IS the session — no second surface to copy out of
What it can do
write text into a field
run tools, edit the repo, run the tests, open the PR
What stops it
nothing — output lands in a field
planning approval → AI review → AI test gate → human-only merge

Everyone else added a chat to their board. We made the card the session — and put a merge gate at the end of it.

The design module

The agent doesn't start by writing code — it starts by drawing what it intends to build.

Wireframes, architecture and decision diagrams, on a real vector canvas, created by the agent through the board's own tools and edited by a human in the same view. Nothing gets built until a human approves the shape of it — a design → approval → implementation loop no chat builder and no ticket tracker has. The two canvases below are a worked example of that output: real designs live in your instance and stay there, so what a public page can show is the shape of the artefact, never someone's board.

1
Draft
Agent + human

The agent creates a design and draws on it via MCP tools — or a human sketches directly on the same canvas. Either can keep editing.

2
Review
Agent submits

The agent calls submit_design_for_review — the only status transition it has. A human sees Approve or Send back for rework, with an optional note delivered back as a comment.

3
Approved
Human only

The canvas becomes read-only, an immutable snapshot is recorded, and Implement design creates the build sub-task. Writes to an approved scene are rejected outright — reopening is a deliberate human click, never a side effect of a stray keystroke.

draft ⇄ review, review → approved, approved ⇄ draft to reopen — every human-only transition, enforced by which tools the agent is even given.
Worked example of an agent's wireframe: an invite-teammates screen with an inline invite panel, member rows and a pending invite, four numbered annotations explaining each decision, and a strip comparing the three layouts considered — a modal and a separate page marked rejected, the inline panel kept.Open full size
A worked example of the first artefact: the screen, the reasoning pinned to it, and the alternatives that were considered and rejected. An approval gate needs the rejected options in front of it, not just the winner. Open it full size to read the panels.
How it actually works
A real canvas, not a mockup of one

Designs are vector scenes on an embedded drawing surface — shapes, text, arrows, groups — created through the board's own MCP tools (create_design, update_design_scene) and editable by a human in the same view.

The hand-off carries structure, not a picture

An approved design's scene is handed to the implementing task as compact JSON — geometry and labels — not a rendered PNG. The next agent reads coordinates and text directly; a human still sees the picture on the canvas.

Versioned and idempotent

Every scene edit and every status change appends to an append-only history. Clicking Implement design twice refreshes the same build sub-task to the current version — it never forks a duplicate.

How a card actually moves

The full task lifecycle — a rail, not a chat log

Every card walks the same nine columns a human sees on the board. Tap or hover a stage to see what actually happens there.

Two ways off the happy path
In Progress

A real tmux session kb-{uuid} runs the agent CLI inside your own checkout; the log streams to the card over a WebSocket, line by line.

The safety nets underneath

Watchdog

Two independent levels check for a dead session or a stalled log before anything is left stuck: an in-process check every ~3 seconds, plus a safety-net tick scanning for a dead tmux session or a pane.log that stopped growing.

Progress audit

A wider sweep runs every 10 minutes underneath the watchdog, covering running, queued and coordinating tasks — the net for the case a handler itself hangs and nothing else is watching that task anymore.

Budget gate

A configured per-task or per-day USD limit is checked before a turn is even allowed to start — a run that would exceed it is sent back with an alert instead of being left to run up a bill.

Who does the work

Claude Code
claude -p --output-format stream-json --permission-mode bypassPermissions
resume: --resume <session-id>
OpenCode
opencode run --format json
resume: opencode session id (ses_...)
Codex
codex exec --json --dangerously-bypass-approvals-and-sandbox
resume: codex exec resume <thread-id>
Gemini
gemini --output-format json --approval-mode yolo --skip-trust
resume: --resume <session-id>

Model selection reads a catalog of executors and models per board — an admin can restrict which of the four are offered. Planning rules (Admin → AI → Planning) decide which executor/model a new sub-task gets, so one board can have an expensive model plan and a cheap one execute the sub-tasks it hands out.

Working as a team

One board. Everyone's machines.

Everyone points the desktop app at the same board. The card, the columns and the review gate stay shared — what changes is whose machine does the work, and whose agent subscription pays for it.

The server

Headless, always on, isolated git worktree per task.

Queued work, overnight runs, anything nobody needs to watch.

A teammate's laptop

The desktop app finds the agent CLIs already installed there — including ones inside WSL on Windows.

The card someone wants to drive themselves, with their own keys.

A laptop with no internet

Ollama and LM Studio are detected the same way, with the models that machine can actually serve.

Work that is not allowed to leave the building.

Local agentson this machine
  • Claude CodeCLIcan run
  • OpenCodeCLIcan run
  • CodexCLIcan run
  • GeminiCLIcan run
  • Ollamalocal modelscan run
  • LM Studiolocal modelsdetected

Found by asking each one for its version — on Windows, including the ones installed inside WSL, which is where most of them actually live.

Nobody shares an API key

The agent that runs on a laptop is the one already installed there, signed in as that person. The board never holds their model credentials.

The board token lives in the OS keychain

Keychain, DPAPI or libsecret through the OS itself. Where the OS can't encrypt, the app says so in the interface instead of pretending.

The prompt is never a shell string

It goes to the agent over stdin, never assembled into a command line — so a task's own text can't become an argument to the agent.

The agent is told where it is

A local run's prompt states that it is on a person's machine, not an isolated server worktree, so it treats destructive commands accordingly.

Same board, same rail, same human merge gate — whether the work ran in a data centre or on a laptop at a kitchen table.

You bring two things, we operate the rest

A repo and a box. Everything else keeps arriving.

The agents are yours — your repo, your keys, your server. VB Kanban is the platform we install on it and keep operating: new capability lands in your running instance, not a separate upgrade project.

You bring
A git repository

Any stack — Laravel, Next.js, Expo, Go, Rust, a monorepo. The agents run your repo's own build, test and deploy commands, so no framework is imposed.

A Linux server or VPS

One you control — the board, its database, and every agent session run there.

Your own model keys, or ours

Bring credentials for any of the 4 supported agent CLIs — Claude Code, OpenCode, Codex, Gemini — or use ours.

We operate
Install and configuration

The database, the backend, the frontend, and the tmux runner — stood up and kept current.

The board wired to your repo

Workspace path, columns, the board prompt, executor and model catalog, budget limits.

The agent harness

The serial queue, the two-level watchdog, git-worktree isolation, the AI-review and AI-testing phases.

The plugin and skill set

The curated MCP tool surface and skill catalog every agent session gets on this board.

The admin panel

20 sections across Board, Agent, AI and Admin.

Monitoring

Agentless DevOps probes of the servers the board itself runs on.

Backups

Database backup history and age, tracked and alerted on.

A dedicated engineer on monthly support

A person on call for the platform, not a ticket queue.

Stacks the agents have actually driven
Laravel / PHPNode.js / Next.jsReact Native / ExpoPostgreSQLDockerKotlin / AndroidTauri (Rust)+ whatever your repo already runs

VB Kanban is built by VB Kanban. Its own roadmap runs on its own board — every commit that ships this platform carries the task id that produced it.

The capability you get next month is the work you can watch on a board today.

No upgrade project — new capability lands in your running instance as it ships.

No migration — nothing to move, nothing to schedule.

No vendor lock-in — the database, the repo and the memory stay on your machine.

A dedicated engineer and monthly support come with the platform — which is why this isn't a signup form.

Talk to our team
The money

Every task gets cheaper the longer the board runs.

Agent work runs in a loop — read context, act, read the result, act again — and every token in that context is billed again on the next iteration. Memory shortens that loop; the panel below proves it, task by task, not our word for it.

Fewer loop iterations
A smaller thing to re-read each time
Cost per taskshape of the curve, not a promised number

The two factors multiply, not add — moderate progress on each is a large move on the bill.

It compounds — two curves, and a way to check both
Your curve

The board's memory grows with your repo's history, so the same class of task costs less on month six than on month one.

Our curve

Cost optimisation is a permanent line of work here, and it ships into your instance as a release — no upgrade project to get it.

You check it

A claim about falling costs is only worth something if you can audit it. The panel below is the receipt, on your own board.

Per-task attribution, not a monthly invoice
Economy score

A single 0–100 score blending continuation share, cache reuse and today's budget burn — not hand-computed from a token export.

Continuation savings

Every session is tagged fresh or continuation, and the dashboard compares their average cost in dollars.

Cache reuse

Share of input tokens served from cache instead of sent fresh — the single biggest lever on turn cost.

Per-task and per-turn cost

Every token-usage row is joined back to the task and session that produced it, board by board.

Budget guardrails

A configurable per-task and per-day USD limit stops a run before it starts, instead of overspending quietly.

Economics panelIllustrative example, not live data
Today's budget burn46%

Per-task and per-day USD limits are checked before a turn starts — over budget stops the run with an alert instead of quietly spending.

81/100
Economy score
continuation share · cache reuse · budget burn
Top tasks by cost
Refactor billing service
core-api · continuation
$4.12
New onboarding flow
mobile-app · fresh
$3.40
Fix flaky CI job
core-api · continuation
$1.85
Add export-to-CSV
internal-tools · continuation
$1.20

Agent work costs real money. The question is whether it's governed and falling, or metered and flat.

DevOps monitoring

The platform watches the servers it runs on.

One agentless probe script runs over SSH against every registered server — nothing is installed on the target host. Every rule below exists because of a real incident, not a guess.

13
host + stack signals watched, every 60s
4
version-support states, incl. an honest "unknown"
Sustained-breach
alerting — a spike during a deploy never pages anyone

Every rule requires several consecutive breaching samples before it fires, and re-notifies at most once per cooldown window — a single spike during a deploy never pages anyone. Skip that discipline and an alert channel eventually gets muted exactly like the monitoring it replaced, which defeats the point of building one.

63 zombie processes

Accumulated silently across roughly two months before anyone counted them by hand. One of 3 incidents like it — each is the reason one alert rule exists.

The same board that ships your features also watches the box it ships them from — and when a threshold breaches, it doesn't page a wiki, it files the alert as a card.

Security & control

Self-hosted isn't a compromise here — it's the whole point

Your code, your agents and their memory never leave your infrastructure. What VB Kanban adds on top is the governance and audit trail a team actually needs to let agents run there.

Isolation
  • Self-hosted or private cloud — your code, your agents, and the memory they accumulate never leave your infrastructure.
  • Turn on git-worktree isolation and every task gets its own working directory and branch, so concurrent agents never trample each other's checkout.
  • Nothing reaches your integration branch without a human doing the merge — an agent has no tool that can merge instead of asking for review.
Governance
  • Three roles: admin and product_manager see every board and the full admin panel; a plain user only sees boards explicitly granted to them.
  • Passwords are stored scrypt-hashed — never in plain text.
  • Secrets in the admin API are masked to "••••" plus the last 4 characters; only one guarded endpoint can reveal the real value.
  • A configured per-task and per-day budget is checked before a turn starts — a run that would exceed it is stopped and sent back with an alert instead of overspending overnight.
Attribution
  • One insert-only audit_log records who — human, agent, or system — did what, to what, and when.
  • Every MCP tool call an agent makes is logged automatically, alongside every deploy and task-lifecycle event.
Questions a buyer actually asks

Frequently asked questions

Every answer here traces back to a section above — this is the short version. Tap a question to open it.

Bring the repo and the box. The platform is our job.