Repository navigation
Releases: loki495/dibs
Release list
Dibs v0.1.0-alpha.3
Dibs v0.1.0-alpha.3
This is an alpha. Schemas, MCP tool arguments and defaults can still change between alpha releases. Back up database/database.sqlite before every upgrade.
Richer todo_revise, local ids in the web UI, JSON workspace export/import, and a guard that stops a GitHub pull from overwriting unpushed edits. Follows v0.1.0-alpha.2.
todo_revise and todo:agent:update change labels, Group and parent
- Labels:
addLabels/removeLabels(names, at most 20 each) are deltas, so labels the caller never saw are left alone. Names match case-insensitively and are stored lowercase, a missing added label is created, and removing a label the task lacks is ignored. A blank name, or one name in both lists, is a handled error. Knowledge labels work too; adding one moves the task to Knowledge. CLI: repeatable--add-label/--remove-label. - Group:
groupId,newGroupName(reuses or creates the Group of that name in the task's area) orclearGroup, at most one of the three. CLI:--new-group,--clear-group. - Parent:
parentIdmoves the task under another (cycle- and self-parent-checked);clearParentdetaches it. They cannot be combined. CLI:--parent,--clear-parent. - A blank Group name, an unavailable parent, or a Group change on a task with no area is a handled error that changes nothing.
Details in the agent interface.
Local id shown in the web UI
The id agents use is the local database id, but the UI showed only the GitHub number, so an id quoted by an agent could find an unrelated task in the search box. List rows, the detail header and deleted rows now show "id N", and a numeric search matches the local id as well as the GitHub number. todo_search is still text-only.
JSON workspace export and import
Settings, Data export/import downloads workspace content and history as JSON. Import validates and previews an archive, then restores it in one transaction into an empty workspace only; existing records are never overwritten or merged. Accounts, credentials, claims and runtime queues are not exported. See workspace transfer.
A pull refuses while pushes are pending
Pushing is last-local-write-wins, and a pull replaces local text with GitHub's, so a pending local edit used to be lost. todo:sync and the web pull now stop before fetching, with an error, while the push queue has any pending, failed or needs-attention row. Drain the queue or resolve those rows, then pull.
Documentation
- The README documents Codex and Antigravity MCP setup alongside Claude Code and opencode.
- Several docs claimed GitHub pushes check for conflicts. They don't: a remote edit made since the last pull is overwritten. The docs now say so.
Upgrade notes
Back up first (see Backup, restore and upgrade). No new migrations. Reconnect agent sessions after upgrading, so their MCP server loads the new tool arguments.
Known limitations
Unchanged: see Known limitations.
Dibs v0.1.0-alpha.2
This is an alpha. Schemas, MCP tool arguments and defaults can still change between alpha releases. Back up database/database.sqlite before every upgrade.
Two security fixes on top of v0.1.0-alpha.1, plus a safety guard for the test suite.
Agents only see trusted authors' text
Anyone who can open an issue or comment on the mirror repository could write instructions that an agent would then read and act on, with its own (much wider) permissions.
- Dibs still imports everything from GitHub, and the web UI still shows everything.
- Every agent-facing read (all MCP tools and the
todo:agent:*CLI) replaces the title, body, search excerpt, comment or closing note written by an untrusted author with a short note, and marks itwithheld: true. Ids, state, labels and the author's login stay visible. - Trusted means the mirrored repository's owner plus the logins in the new
DIBS_TRUSTED_GITHUB_AUTHORS(comma-separated, empty by default). Text created through Dibs itself has no GitHub author and is always shown, so local-only instances see no change. - Text imported from deleted GitHub accounts (
ghost) is withheld.
See Prompt injection through imported GitHub content in the security model.
Demo: a cap on per-visitor database copies
Every demo request without the visitor cookie copies the template database, so a client that never sends the cookie back could fill the disk. The demo now keeps at most DEMO_MAX_INSTANCES copies (default 2000) and evicts the least recently written first. Only affects deployments with DIBS_DEMO_MODE=true.
Tests refuse to run against a real database
The suite now aborts before touching any database unless the connection is in-memory SQLite, so a cached config or an exported DB_DATABASE/DB_URL can no longer point it at real data.
Dependencies
Dropped the unused concurrently dev dependency and updated source-map-js, clearing two Dependabot advisories in build-time tooling. Neither reached the built app.
Upgrade notes for existing installs
Back up first (see Backup, restore and upgrade).
- Run migrations. One additive migration (
issues.author_login).bash docker/setup.shruns it, ordocker compose exec -T -u www-data app php artisan migrate --force. - If you mirror GitHub, run an import once afterwards:
docker compose exec -T -u www-data app php artisan todo:sync. That fills in issue authors. Until then, existing imported issues read as created through Dibs, so they are shown to agents. - If your GitHub token's account isn't the repository owner, add its login to
DIBS_TRUSTED_GITHUB_AUTHORS. Otherwise your own text, once it round-trips through GitHub, is withheld from agents. Add anyone else whose text agents should read. - CLI output change:
todo:agent:show,todo:agent:createandtodo:agent:updatenow print the same JSON shape as thetodo_showMCP tool (with up to 50 comments) instead of the web UI's. Update any scripts that parse it. - Reconnect agent sessions after upgrading, so their MCP server loads the new code.
Known limitations
Unchanged from alpha.1: see Known limitations. Withheld issues still show their labels, state and author login to agents.
Dibs v0.1.0-alpha.1
This is an alpha. It runs, it is tested, and the maintainer uses it daily, but schemas, MCP tool arguments and defaults can still change between alpha releases. Back up database/database.sqlite before every upgrade.
What Dibs is
A self-hosted task tracker built for AI agents as first-class users. Any agent session, including a fresh one with no context, connects to the same host-local MCP server, asks what is open, claims a task, records plans, research and decisions as it works, and the next session picks up where the last one stopped. Local SQLite is the source of truth; GitHub Issues and Projects are an optional, asynchronous mirror.
Main features
- MCP tools and the claim lifecycle. Create, list, peek, show, update and comment on tasks; plans and knowledge notes; claim, heartbeat, release and complete, so several agents do not duplicate work. A claim binds to the agent's real OS process and the UI shows whether it is still alive.
- Local-only mode. With no GitHub repository configured everything works against one local repository record, and nothing contacts GitHub. Work is organized with labels and parent tasks.
- GitHub mirroring (optional). Writes land in SQLite first and are pushed through a durable queue with retry and backoff that honours GitHub's rate-limit headers. Creates never duplicate: an ambiguously failed create is looked up on GitHub before it is retried. A first import adopts a local-only instance and queues everything created locally.
- Activity log. A browsable, filterable record of what humans and agents changed, with pruning.
- PWA. The workspace installs to a phone or desktop home screen and has a mobile layout.
- Docker or bare metal. Docker Compose is the quick start;
docs/bare-metal.mdcovers running directly on a Linux host with PHP 8.5, including systemd units and upgrades. - Sample agent skill.
skills/dibs/SKILL.mdteaches an agent cold start, plans, claims, and recording research and lessons.
GitHub token scopes
Only needed for mirroring. See Token scopes in the README (classic repo + project, or a fine-grained token with Issues and Projects read/write on the one repository).
Container layout
docker/setup.sh starts three containers:
webserves the UI over HTTP (no host PID namespace).appis where agents and Artisan commands run (docker compose exec ... app ...). It shares the host PID namespace and its main process,dibs:claims:watch, records claim liveness for the UI. It serves no HTTP.schedulerdrains the GitHub push queue and prunes the activity log.
Upgrade notes for existing installs
Back up first (see Backup, restore and upgrade).
- Move your Traefik labels, networks, ports and other HTTP overrides from
apptoweb. HTTP is now served byweb;appexposes no port. - Run migrations.
bash docker/setup.shdoes it, ordocker compose exec -T -u www-data app php artisan migrate --force. Thendocker compose restart app web scheduler. - Container user is configurable. The dev containers now run as
DIBS_UID/DIBS_GIDfrom.envinstead of a hardcoded 1000;docker/setup.shfills them in from the checkout directory's owner when they're missing. With a checkout owned by UID/GID 1000 nothing changes. Rebuild after setting them (setup.shdoes). - Reconnect agent sessions after the
apprestart; their MCP connections end with the container. - Changed defaults.
GITHUB_PROJECT_NUMBERSnow defaults to none, so set it explicitly if you mirror Projects (a blank value used to be read as project 0).DIBS_TIMEZONEnow defaults toUTC; set it if you relied on another zone..env.examplenow ships neutral values:APP_URL=http://localhost:8095, blankSESSION_SECURE_COOKIEandTRUSTED_PROXIES. Review your own.envagainst it, especially behind HTTPS. - Cloudflare-routed requests are never auto-logged-in.
AUTO_LOGIN_*applies only to private-network requests with no Cloudflare edge header; anything arriving through Cloudflare uses the normal login.
Known limitations
See Known limitations: one repository per instance, a single shared workspace for all users, Linux /proc needed for verified claim liveness, no natural-language capture yet, no built-in backup tooling, and Areas, Groups and Priority only from GitHub Projects.