Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Open Issue Format (OIF)

Open Issue Format

Issues and review comments as files, in any git repository, about anything in it.

An issue is a Markdown file whose directory is its state. A comment is a create-only file recording who said what, when, about which issue or which path at which commit. Concurrent comments never conflict. Nothing installed, and nothing written into the files being discussed.

Sixty-second tour

board.md
issues/
├── backlog/
│   ├── column.md
│   └── add-jira-importer-nkhnsk.md
├── doing/
│   ├── column.md
│   └── fix-login-redirect-loop-7k2x9m.md
└── done/
    ├── column.md
    └── write-spec-outline-h87456.md

The directory is the status. The filename is the identity. Moving an issue is git mv issues/doing/fix-login-redirect-loop-7k2x9m.md issues/done/.

issues/doing/fix-login-redirect-loop-7k2x9m.md:

---
type: issue
resource: oif:app/7k2x9m
title: Login form rejects passwords containing "!"
kind: bug
priority: high
assignees: [coder/1.4]
requested_by: human:sam
tags: [auth]
about:
  - path: src/LoginForm.svelte
    commit: 3f9c2e1
created: 2026-09-13T03:10:00Z
---

Submitting a correct password with `!` clears the form and shows
"invalid credentials". Expected: login succeeds.

## Acceptance Criteria

- [x] Reproduce with a failing test
- [ ] Fix without changing the hashing path

Comments are separate files, one per comment, keyed by the issue's id:

comments/7k2x9m/k3n2wp.md

---
type: comment
at: 2026-09-13T04:12:00Z
by: human:sam
kind: verdict
result: changes_requested
---

Keep the strip for whitespace only.

Read an issue and its whole history with one command:

cat issues/*/*-7k2x9m.md comments/7k2x9m/*.md

Find what the board says about a file before you touch it:

grep -rl -- 'src/LoginForm.svelte' .     # or: oifmd about src/LoginForm.svelte

Not everything has a lifecycle. A standalone comment records a judgement with no work attached, at comments/<id>.md:

---
type: comment
at: 2026-09-15T04:10:00Z
by: human:sam
kind: confirms
about:
  - path: docs/orders.md
    commit: 3f9c2e1
---

Checked against the billing code at this commit. Holds.

Install

The format needs no tool. The validator is there when you want the conformance list in section 8 of the spec checked for you.

pip install oifmd

oifmd validate <board>      # check a board against the spec
oifmd about <path>          # what the board says about a file
oifmd new <board> todo "…"  # create an issue with a fresh id

Why

Several tools got here first and independently reached the same shape: Markdown plus frontmatter, one file per issue, living in the repo. Backlog.md, beads, git-issues and beaver-backlog each worked it out on their own, and OIF is built on what they demonstrated.

What is missing is the format itself, written down apart from any one tool: a specification you can implement against, a validator that says whether a board conforms, and a version number so it can change without breaking readers. That is what this is. Issues outlive whichever tool wrote them, and any agent can read a board cold.

Design rules that fall out of being agent-first and git-native:

  • State is the directory. A move is one atomic rename, not a read-modify-write that two agents can trample.
  • Identity is a random six-character id in the filename. Two branches can create issues at once and merge with no counter, no scan, no renumbering. Sequential keys like APP-2753 survive as aliases.
  • Records point at things; things never point back. Everything is written under the board root, so a board can describe a vendored dependency, a submodule, a generated tree or a repo you only cloned to review. The target's own tooling sees no diff.
  • One comment is one file, keyed by the issue's id. Two agents commenting at once write two different paths, so nothing conflicts and nothing is lost. Appending to a shared file does not survive concurrent writers; see SPEC.md section 7.1.
  • Unknown keys pass through. A conforming consumer never rejects them and keeps them when it rewrites a file.
  • Every column has a column.md. It keeps empty columns in git and tells an arriving agent what belongs there and how to leave.
  • The board declares its own vocabulary. board.md lists the columns and, optionally, the kinds an issue may have and which kinds may contain which. Epic, story and task are one team's words, not the format's. Ready board.md files for Kanban, Scrum and Shape Up are in profiles/.

An OIF board is a conforming Open Knowledge Format bundle: same substrate, same actor convention, type: issue on every file. The one deliberate divergence, identity by id rather than by path, is spelled out in SPEC.md section 9. A tracker is a service you log into; OIF is a directory you already have.

This repository

The roadmap for OIF itself lives in board/, in OIF. GitHub Issues stays open for conversation; accepted work lands in board/issues/ with the GitHub number kept in external_ids.

License

Apache-2.0.

Open Issue Format is an independent specification, not affiliated with or endorsed by Google. Open Knowledge Format, OKF and Google are marks of their respective owners. See SPEC.md section 10.

Metadata

Release files for oifmd 0.1.0.dev1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for oifmd 0.1.0.dev1
File Size Uploaded
oifmd-0.1.0.dev1.tar.gz 19.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for oifmd 0.1.0.dev1
File Interpreter ABI Platform
oifmd-0.1.0.dev1-py3-none-any.whl Python 3 none any Details

Total release size: 35.2 kB

Release files / oifmd-0.1.0.dev1.tar.gz

Download URL oifmd-0.1.0.dev1.tar.gz
Size 19.6 kB
Tags Source
SHA-256 checksum
How to use checksums
7c2b9bc20b78fd96861c6d4c24db01a4423d7afa047f53056a8ac732dcf4dcbf
BLAKE2b-256 checksum
How to use checksums
d07dc27a50b1ff8e2c65c975807b6cab9d8ef1bc035f8395534178620934e9ed
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release files / oifmd-0.1.0.dev1-py3-none-any.whl

Download URL oifmd-0.1.0.dev1-py3-none-any.whl
Size 15.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bd32d34bc73a639753e6c0536dde84884a5224234ef6120f71c99281a4953222
BLAKE2b-256 checksum
How to use checksums
0bebd86dcb2984d8b5579225b5ed9eb6d4b328e06a4bc6d873aab1b895b3ff24
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release history Release notifications | RSS feed

This release

0.1.0.dev1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page