Skip to content

Releases: loki495/dibs

Dibs v0.1.0-alpha.3

Dibs v0.1.0-alpha.3 Pre-release
Pre-release

Choose a tag to compare

@loki495 loki495 released this 13 Oct 21:24
0c74b75

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) or clearGroup, at most one of the three. CLI: --new-group, --clear-group.
  • Parent: parentId moves the task under another (cycle- and self-parent-checked); clearParent detaches 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

Dibs v0.1.0-alpha.2 Pre-release
Pre-release

Choose a tag to compare

@loki495 loki495 released this 07 Oct 03:26
4822247

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 it withheld: 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.sh runs it, or docker 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:create and todo:agent:update now print the same JSON shape as the todo_show MCP 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

Dibs v0.1.0-alpha.1 Pre-release
Pre-release

Choose a tag to compare

@loki495 loki495 released this 06 Oct 08:29
eb89ce9

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.md covers running directly on a Linux host with PHP 8.5, including systemd units and upgrades.
  • Sample agent skill. skills/dibs/SKILL.md teaches 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:

  • web serves the UI over HTTP (no host PID namespace).
  • app is 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.
  • scheduler drains 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 app to web. HTTP is now served by web; app exposes no port.
  • Run migrations. bash docker/setup.sh does it, or docker compose exec -T -u www-data app php artisan migrate --force. Then docker compose restart app web scheduler.
  • Container user is configurable. The dev containers now run as DIBS_UID/DIBS_GID from .env instead of a hardcoded 1000; docker/setup.sh fills 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.sh does).
  • Reconnect agent sessions after the app restart; their MCP connections end with the container.
  • Changed defaults. GITHUB_PROJECT_NUMBERS now defaults to none, so set it explicitly if you mirror Projects (a blank value used to be read as project 0). DIBS_TIMEZONE now defaults to UTC; set it if you relied on another zone. .env.example now ships neutral values: APP_URL=http://localhost:8095, blank SESSION_SECURE_COOKIE and TRUSTED_PROXIES. Review your own .env against 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.