dricket · Git tickets
Tickets that live in Git. Claimed by fast-forward.
dricket is a ticketing system with no server. Every ticket is a Markdown file in a Git repository, and who is working on it right now is decided by Git itself: only one fast-forward publication lands.
One static binary · Linux, macOS and Windows · GPL-3.0-or-later
$ dk add --prefix app -m "Login error" -l bug --unclaimed app-1 $ dk next --claim --size M claimed app-1 (epoch 1, lease until …) $ dk sync && $EDITOR tickets/app/0000/app-1/ticket.md $ dk commit app-1 committed app-1 (rev 2, commit …) $ dk release --stage review -m "Fix on dk/app-1" app-1 released app-1 -> review
Why dricket
Git is the database
Your Git host is the database and the lock manager. There is nothing to deploy, patch or pay for.
One claim wins
Claiming is a fast-forward publication. Exactly one claimant succeeds and the others are told immediately.
Markdown you can edit
Claim, sync, use any editor, publish with dk commit. Humans and agents work on the same files.
Safe for agents
Leases, cooperative fencing with epochs, immutable identity and transition checks keep shared state coherent.
How a claim works
Two runners race for the same ticket. Git accepts the first fast-forward and rejects the second. The loser fetches, sees who owns it and moves on to the next ticket.
- Leases have a size (S, M, L) instead of a guessed duration
- Owners extend a lease with a reason
- A stale epoch is refused and local work is kept
- Comments reach the owner without touching the ticket file
runner A Git remote runner B
| fetch | |
|<------------------------| |
| claim app-6842 | |
|------------------------>| accepted: fast-forward |
| | claim app-6842 |
| |<------------------------|
| | rejected: not fast-forward
| |------------------------>|
| | B fetches, sees A owns itA small, strict CLI for agents
Inside the ticket repository dk finds the store, branch and project by itself, with no flags and no environment. Exit codes are part of the contract, so an agent knows what to do next.
11already claimed ·13claim lost, stop immediatelydk guideprints instructions that match your versiondk setup-agentinstalls an agent skill and theAGENTS.mdpointer- Ticket text is treated as untrusted input
$ dk show app-1 > ticket.md # edit ticket.md in an editor $ dk put app-1 -F ticket.md --claim --if-version 2 --json $ dk validate validate ok $ dk setup-agent installed .agents/skills/dricket/SKILL.md
Install
One static binary, shipped under one name: dk. Git 2.32 or newer must be installed.
# release archive: github.com/lariscus/dricket/releases (SHA-256 checksums included) $ go install github.com/HenrikPuls/dricket/cmd/dk@latest $ dk init tickets-store app $ cd tickets-store $ dk add -m "First ticket"
Trust model
Everyone allowed to push the ticket repository can edit tickets; your Git host owns authentication and branch rules. dricket validates documents and every identity, revision, epoch and claim transition, and dk validate can also run as a host-side gate. Report vulnerabilities privately as described in the security policy.
Questions
Do I need a ticket server?
No. dricket needs only a Git remote. A local repository works too.
How is it different from a hosted issue tracker?
The tickets are files in your repository, and claiming is an atomic Git operation, so several people and agents can work in parallel without a central service. It is a coordination layer, not a project-management suite.
What happens if two agents claim the same ticket?
One fast-forward push lands. The other gets exit code 11 (already claimed) and is told who owns the ticket.
Is it ready for my team?
dricket is in an early phase. It is built for teams and agents that share a ticket repository, and it works well there. Use in large-scale setups with many simultaneous writers has not been tested yet.