Task Tickets as YAML in Git — Ask If It's Implemented Gitoza, a local-first task management tool, stores task tickets as YAML files in Git, allowing AI IDEs to read them directly and answer whether a ticket's work is actually in the codebase. The project addresses ticket-code drift by keeping tickets on disk, enabling agents to compare tickets with source code without vendor APIs. Gitoza's design minimizes merge conflicts by using small, boring schemas where different fields are separate lines. SaaS boards and the codebase drift apart. A task ticket stays open after the code shipped. Another is marked done and never landed. Managers follow the board; engineers follow the repo. Nobody has a cheap way to ask: is this actually in the code? The fix is not a better dashboard. It is task tickets as YAML on disk —plus wiki Markdown—so an AI IDE can read them like any other file. Gitoza is the local-first UI for that layout. Files live in Git so the team can sync: the product repo , or a dedicated Git repo for planning. What matters is local files, not a vendor database. Cloud trackers live in a different universe from the branch you just merged. That is ticket–code drift : the board and Git no longer describe the same work. Typical mess: main . The ticket is still You cannot ask Jira “does this match the repo?” without glue, exports, and hope. The agent in your IDE already sees the code. It cannot see a SaaS board unless you copy-paste. When YAML task tickets sit on disk , the agent can open them. Give it the ticket folder and the code folder—same clone or two checkouts—and the question becomes ordinary. Gitoza stores Git-based task management as files: .gitoza/tasks/tickets/{project}/{ticket-id}.yaml .gitoza/wiki/ The ticket id is the filename . Frontmatter holds status , assignee , priority , type , tags. The Markdown body holds the description. Wiki pages sidebar: Library are nested Markdown under .gitoza/wiki/ —docs, diagrams, the notes that used to live in a Confluence tab nobody opens. Those paths live in a Git repo you connect as a workspace . Many teams keep task tickets beside the product. Others use a dedicated planning repo so tickets are not mixed into application history. Either way the format is the same: plain-text YAML on disk . Browse and edit in the desktop app: tree + detail, same pattern as Tickets. Search hits the local index. No spinner waiting on a vendor API. That is why a local-first ticket tracker feels quicker than SaaS—the source of truth is disk, not a round-trip. Point an AI IDE Cursor, VS Code with an agent, or similar at the YAML task tickets—and at the source tree, even if that is a second folder. Then ask what a Kanban column cannot answer: Those three close the status ↔ code gap. You are not trusting the board. You are checking the files. The same files stop duplicate work: If the answer is yes, you do not file another ticket, and you do not implement the same fix twice. That is how YAML tickets in Git keep the backlog clean—search on disk, not another Jira query. You only attach the ticket files you care about. Retrieval is grep and the local index. Native files beat a Jira MCP bridge. The agent does not care whether those files came from the product remote or a dedicated tickets remote. Local-first does not mean solo-only. You edit on disk, then Sync on the gitoza branch when you want the team to see it. Git is the bus. That is the part that scares people: Git merge conflicts . The fear is larger than the rate. Two people changing the same task ticket is not automatically a conflict. Git merges by line. You conflict when both sides rewrite the same field or the same stretch of body —not because you both touched the file. Gitoza is shaped so that happens less often: status . A third updates the body. A fourth reassigns. Those are different lines. Git usually just takes both.Conflicts still happen if two people rewrite the same sentence of the body at once. That is the honest case—and it is the same class of edit that would clobber a field in a SaaS form, except here you see both versions. The system is stable because the files are small, the schema is boring, and the merge rules match how people actually work: status here, tags there, comments at the bottom. Gitoza is task and ticket management in Git : Tickets, Releases, Library wiki , optional tests under .gitoza/test/ . Connect the product repo or a dedicated planning repo. Confirm Changes before you push. Conflict panels when rebase needs a decision. Your AI IDE reads the same YAML and Markdown without MCP. gitoza.com https://gitoza.com — desktop app, no account. A board that is not on disk will always drift. Gitoza keeps task tickets as YAML —and wiki as Markdown—so the AI IDE has something it can actually read. Same repo as the code, or a dedicated Git repo. That is enough to ask whether work is implemented, whether a ticket already exists, and whether the backlog is lying—without waiting on SaaS. Git sync is how the team shares; field-level merges, appended comments, and a keep-mine / keep-theirs UI are why that sync is less intimidating than the word “conflict” suggests.