Skip to main content

Skald

Track work from idea to release, in Markdown, in your repo, with your coding agents.

Skald turns a folder of Markdown files into a backlog that travels with your code. Capture an idea, plan it, hand it to an agent, answer the questions it raises, review the result, and ship it in a release, with every step recorded as a dated note in the story's own file. Agents drive it from a small CLI that fits in a session's context. You drive it from a local board that shows every project and worktree on the machine. There is no database and no service: one dependency-free Python package, and git is the history.

.skald/
├── config.json   # project name, story format version, columns  (committed)
├── AGENTS.md     # what an agent needs to know, written by `init` (committed)
├── stories/      # one Markdown file per story                   (committed)
│   └── a3f9c2-implement-wireguard-overlay.md
└── archive/      # stories shipped in a release, moved out of the way

Stories are committed with the code they describe, so the board travels with the branch and shows up in pull request diffs.

The Skald board showing this repository's backlog: Backlog, Ready, In progress, Review, and Done columns, a story claimed by an agent, and a button to commit the changed story files
A terminal session: skald status, skald claim, skald resume, a handoff note, skald move, and skald diff A story open on the board with a dependency chip, an acceptance checklist, and dated notes
An agent's session: claim, resume, hand off, move, and see the diff. The same story on the board: dependencies, acceptance criteria, notes.

What you get

  • A workflow agents can follow. context orients a session in one block, next and claim pick work without stepping on other agents, resume reads what the last session left behind, notes carry kinds such as decision and handoff, and acceptance checklists gate the move to done. The contract is one Markdown file that init writes for you.
  • A board for the human. Every registered project in one page, live updates, drag, multi-select, dependency graph, the working tree of every worktree on the machine, read-only views of other branches, dark mode, and a Help panel with the full CLI reference.
  • Git as the database. Story changes commit with the code they describe and carry Skald-Story trailers. diff, activity, and changelog read history back; render commits a snapshot GitHub shows in place; release turns the done column into a changelog section and a versioned archive.
  • More than one repository. A machine-local index gives you one board and project:id dependencies across every repository you use Skald in.
  • Nothing to run. Python standard library only, Python 3.9 or newer, Linux, macOS, and Windows. Tab completion for bash, zsh, and fish.

Is Skald the right tool?

Several projects keep a tracker inside the repository. They make different trade-offs, so this table is about focus rather than ranking. Checked against each project's README in September 2026; follow the links for current detail.

Skald Backlog.md Beads git-bug git-issue
Data lives in Markdown files under .skald/, committed Markdown files under backlog/, committed Dolt database under .beads/, with a JSONL export Git objects, not files in the worktree Text files under .issues/, committed
Unit of work Story: column, rank, dependencies, tags, dated notes Task: status, acceptance criteria, dependencies, labels, milestones Issue: status, priority, assignee, dependencies, labels, hierarchy Issue with comments, labels, status Issue with comments, tags, assignee, milestone, due date
Built for Coding agents first, humans reviewing on a board Humans and agents together Agents, with memory decay of closed work Humans, distributed and offline-first Humans, git-native
Agent interface CLI, MCP server, Claude Code hooks and skill, AGENTS.md CLI, MCP server, AGENTS.md CLI with JSON output, MCP server, AGENTS.md CLI CLI
Human interface Local web board across all projects on the machine Terminal board and local web board CLI CLI, TUI, web UI CLI
More than one repository Yes: one board, project:id references One project per workspace Separate repos with routing and sync Per repository, pushed to remotes Per repository
Work in progress across worktrees Board shows each checkout's working tree; a claim in a worktree is seen before it is committed Files per checkout; the MCP server follows the current worktree Not documented Shared: issues are git objects, not files Files per checkout
Committed snapshot skald render writes Markdown or HTML with a dependency graph backlog board export writes a Markdown report No No No
Sync with hosted trackers No No No Bridges to GitHub and GitLab Import and export with GitHub and GitLab
Runtime Python, standard library only TypeScript on Bun or Node Go Go Shell, jq, curl

Skald is a good fit when agents do most of the work, a human wants to see that work on one board across repositories, and the backlog should read well in a pull request diff. Reach for something else when you want threaded discussion on issues (git-bug, or the hosted tracker you already use), a long history that needs summarising to save context (Beads), or two-way sync with GitHub issues (git-bug, git-issue).

Install

pip install skald-kanban
# or: pipx install skald-kanban
# or: uv tool install skald-kanban
# latest from source: pip install git+https://github.com/Vitund-AI/skald.git
cd your-repo
skald init

The distribution name is skald-kanban; the command is skald, and git skald works too. init creates .skald/, writes the agent contract, registers the project on your machine, and points your CLAUDE.md or AGENTS.md at the contract. Shell completion is one line in your rc file:

eval "$(skald completion zsh)"       # or bash; fish: skald completion fish > ~/.config/fish/completions/skald.fish

Quick start

skald new "Implement WireGuard overlay" --tags infra --body "Configure wg0 on every node."
skald new "Write the network docs" --status ready --blocked-by a3f9c2
skald ls
skald open            # starts the board server if needed and opens this project

An agent's session looks like this:

skald context --as claude         # mine, next, blockers, claims elsewhere, uncommitted
skald claim a3f9c2 --as claude    # assign it and move it to in_progress
skald resume a3f9c2               # requirements, checklist, deps, latest handoff
skald note a3f9c2 "Why we chose X" --as claude --kind decision
skald note a3f9c2 "Done: ... Remaining: ... Next: ..." --as claude --kind handoff
skald move a3f9c2 review
git add .skald src && git commit --trailer "Skald-Story: a3f9c2"

For Claude Code, skald hooks claude --install --as claude adds a SessionStart hook that runs skald context so every session begins oriented without reading the whole backlog, a Stop hook that refuses to end with a broken backlog, and a skill that loads the contract. Agents without a shell can use skald mcp.

Documentation

Page Read it when
Getting started You are installing Skald or adding it to a repository.
Working with agents You want to know what the contract asks for and why, and how to hook Claude Code or any MCP client up to it.
The board You want every board feature in one place.
Stories You want the file format, the design-record layout for long stories, columns and roles, facets and epics, templates, archiving, and releases.
Git and CI You want commit trailers, reviewing what changed, the committed snapshot, hooks, the GitHub workflow, and the release flow.
Multiple projects You have more than one repository, or more than one checkout of one.
Importing You have an existing folder of Markdown records to bring in.
CLI reference You need the exact flags. Generated from the parser.
HTTP API You are scripting against the board server.
Troubleshooting Something printed an error or looks wrong.
Examples Worked setups on top of the core: routing stories to model-pinned agents by tag, with a report on what each model finished.

The design is in SPEC.md and the reasoning behind non-obvious choices in DECISIONS.md.

Development

pip install -e .
python -m unittest          # standard library only
skald serve                 # run against this repository's own backlog
skald docs                  # regenerate docs/cli.md after changing a command

This repository dogfoods Skald: its own backlog is in .skald/, and the board rendered from it is at .skald/README.md.

License

MIT. See LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

skald_kanban-0.5.0.tar.gz (161.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

skald_kanban-0.5.0-py3-none-any.whl (127.1 kB view details)

Uploaded Python 3

File details

Details for the file skald_kanban-0.5.0.tar.gz.

File metadata

  • Download URL: skald_kanban-0.5.0.tar.gz
  • Upload date:
  • Size: 161.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for skald_kanban-0.5.0.tar.gz
Algorithm Hash digest
SHA256 e2e37f094a921ff9d92efa1aea6a0d1bd17170d5004a19811daef304e13a461c
MD5 357059b67462b1dd8c096dd87c9900d3
BLAKE2b-256 d911757d056951db135c1cbccc58a4a9ec98de54b1a6d55a4111928a2f19c05a

See more details on using hashes here.

Provenance

The following attestation bundles were made for skald_kanban-0.5.0.tar.gz:

Publisher: publish.yml on Vitund-AI/skald

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file skald_kanban-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: skald_kanban-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 127.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for skald_kanban-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 076a1bcb96376ce962af962425df91eb09de5730f42e68461a0cdddb813e1b9a
MD5 51db3d22704a191ed57b39f6c34f2feb
BLAKE2b-256 45a899d0f10bbe12eba4ad55b66a5c04e976c3df8d1321190be41d66b998df89

See more details on using hashes here.

Provenance

The following attestation bundles were made for skald_kanban-0.5.0-py3-none-any.whl:

Publisher: publish.yml on Vitund-AI/skald

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.5.1

2 files

This release

0.5.0 This release

2 files

0.4.1

2 files

0.4.0

2 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