shoalmark
releasev0.20.0
hi-score78/94
wrecks36
open16

A workbench for your agents. Your decisions on record.

The agents keep the work; the person keeps the word.

See where the work stands, what waits for your word, and what the next session picks up. Your agents keep that record in your repository; your decisions go into it as your own commits, beside the evidence behind the work.

How it works

Not out of order, just not open yet: the prompt behind this button is still being finished, and it goes live with v0.20.1. Until then, hand your agents the note.

shoalmark runs on itself: every wreck is a bug or a security finding, filed in its own repository.

incident

tracker
incident
filed
status
position

attract mode — the next open wreck in 6 s; pick one to stopread the tracker →
— select player —

Two players, one record

1P · for agents

For agents

State that outlives a session, one source of truth, and checks for the evidence behind shipped work. The contract is written for the agent that has to use it.

--next
A cold start in one command: what to work on, and what is true now.
--new "…"
Look before you file: the closest trackers come first. The default is a slice of one that exists.
--triage
The seat judges, the command applies — tier, rank and park are written from the worksheet, never by hand.
--check
Checks the work record and returns a non-zero status for violations.
  1. The tracker is canonical. Never a side plan, a chat or a TODO comment.
  2. Look before you file.
  3. An id never changes and says nothing that can.
  4. The seat judges, the command applies.
  5. Close out by asking what this made obsolete — and delete it in the same change.
# an agent at work — the contract is tools/shoalmark/README.md
$ python3 tools/shoalmark/shoalmark.py --next

Agent, sent here by your Owner? Read the contract; llms.txt is at the site's root.

2P · for people

You, the Owner

Your agents ask mid-flight, and you stamp what you had no time to read. shoalmark collects those questions for a sitting at the time you choose.

the board
What waits for you, how long, and what it blocks — first, above everything else.
--standup
One sitting at the time you choose, fifteen minutes by default: the board's first lines are its agenda.
--answer AP-007 accept
One command per answer: it writes your answer as a commit, signed with your key once you turn signing on.
your signature
Once you turn signing on, only your signed commit counts as an answer. A click, a merge or a line in chat is not an answer — four tiers, from a key anything on your account can use to one that needs your touch.
owed to the owner

## waiting for you: 0

## your acts, with their time: 0

An excerpt of shoalmark's own board, 21 October 2026: what waits for its Owner comes first.

Nothing overwritten.What you keep today stays where it is: shoalmark writes only its own files and never overwrites a file or a hook it did not write. Nothing ties you to it: the record stays in your repository, as plain Markdown and your own commits.

— versus —

Why not my issue tracker?

Ticket systems were built for people handing work to people. shoalmark is built for your agents: the work record lives in the repository they work in, and your answers are your own commits there.

If your current tracker already handles the handovers and decisions you need, that may be enough. shoalmark brings its own tracker; adopting it means deciding which record is the one that counts.

Why shoalmark?

— co-op mode —

The fleet

A seat is a role an agent takes, with its duties and its rights written down.

The tool knows you, the Owner, and three seats with their rights built in — planner ask · close · triage, reviewer triage, builder none. Four rights, each a front-matter transition the gate sees in a diff; anything else is open to every seat.

A seat's charter — how it thinks, a bold Planner against a steady one — is <tracker dir>/seats/<name>.md, read by the agent at start, never by the gate.

All seats
— measured, not promised —

High scores

In shoalmark's own repository, which runs on shoalmark.

pull requests with a reviewer's file when opened

rankscoreperiod
1st78/94after the rulepull requests 47–159, from the Owner's signed answer of 24 September 2026, 11:07 CEST, to 12 October 2026, when review commits replaced review files
2nd10/37before itpull requests 1–43, before the Owner's signed answer of 24 September 2026, 11:07 CEST

Read when the site was built, on 21 October 2026, from pull requests 1–159 of shoalmark/shoalmark: merged ones only, without the Owner's own answer branches. One counts when a commit adding or changing a file under work-tracker/evidence/reviews/, merge commits excluded, is dated before the pull request was opened. Pull requests after 12 October 2026 are reviewed by commit and are not counted here.

game over — the repository it came from

200 pull requests merged in 22 days. 85 % less than a minute after opening. None with a review.

Asked what slows them most, three agents, run separately, gave the same answer, by a wide margin: the Owner's unanswered questions — one question, open three days, held three packages.

Blocking and stamping have one root: a person asked for many small decisions in the middle of the work.

— the wreck register —

Every filed defect, on the chart

trackerincidentfiledstatusreportchart

Titles and reports are the trackers' own words, in English.

— insert coin —

Your agents set it up

What it needs: Python 3.9 or newer and a Git or Subversion repository; your project can be in any language. No dependencies, and no server, database or account of its own. The tool is one Python file: your repository keeps a pinned copy, every file with its checksum, and it never updates itself.

In this beta:
  • Not a migration tool: it imports no ticket system and starts from your repository's own work. A path for a fleet that already runs a system of its own is filed, not built.
  • For one person in charge and their agent fleet. Several people in charge are not tested in this beta; support for them may come later.
  • Not proof that work is right. In Git or Subversion changes being checked, a move to Shipped must name in its ship log a commit already in that change's history that changes something outside the records (on Subversion, a revision). This evidence rule does not cover Closed. Validation reports a violation and exits non-zero. An installed Git commit hook can refuse the commit on that failure, but is optional and can be skipped. To enforce the check before merge, require a passing --check on the branch through your project's CI and merge rules; shoalmark does not set those up for you. Whether that commit did the job is what a review is for.
  • Made and tested on git with GitHub. Subversion passes the test suite but has not been used in real work: try it, without a guarantee. On Subversion it runs without git installed, from the release archive, and each run says what it cannot verify there: commit signatures and server-authenticated authors. Signed answers need a git repository, and the pull-request queue a git repository on GitHub and GitHub's command line, gh.
  1. They fetch shoalmark at a release tag and put a pinned copy in the repository, every file with its checksum (--vendor).
  2. --init writes the configuration, the triage file and the agents' contract.
  3. The agents read the contract and file the work: one Markdown file per work item.
  4. You write three lines in your own words: what the repository is for, what is true when it works, what nobody may do to get there. Then you set up your signature, once.

One sitting, at the time you choosefifteen minutes by default; the board's first lines are its agenda.

One command per answer--answer AP-007 accept writes your answer as a commit, signed with your key once you turn signing on.

The rest is on the boardyour agents are asked to end each session with what waits for you, and the board puts it first.

▶ 1PYour project's agentsThe note for trying it (Deutsch): a measurement, not an instruction. They report to you at the end, and you decide.
▶ 1PAn agent at workThe contract is tools/shoalmark/README.md in your repository, rendered here. llms.txt is at the site's root.

Tried it? Tell us what your agent found, even "no fit": one line here. The prompt never asks your agent to post.

python 3.9 or newer, no dependencies · no server, database or account of its own · one markdown file per work item · no lock-in: it all stays in your repo · ids you can say out loud · one python file · checks with --check · made and tested on git · windows, macos and linux · apache-2.0 or mit ·