moonbead

Minimal single-machine issue tracker for AI agents, backed by JSONL.

issue-tracker
ai-agent
coding-agent
moon add Lampese/moonbead@0.1.3
Download zip
Author
Version
0.1.3
License
Apache-2.0
Last updated
6 months ago
Downloads
30

Dependencies

README

#moonbead

Minimal single-machine issue tracker for AI agents, backed by JSONL.

#Install (macOS)

./scripts/install-macos.sh

Requires MoonBit CLI (moon). Installs moonbead to /opt/homebrew/bin, /usr/local/bin, or ~/.local/bin depending on what is writable.

#Install (Linux)

./scripts/install-linux.sh

Requires MoonBit CLI (moon). Installs moonbead to /usr/local/bin or ~/.local/bin depending on what is writable.

#Initialize

moonbead init

Creates .beads/issues.jsonl and adds a Moonbead section to AGENTS.md if missing.

#
Issue

pub(all) struct Issue {
id : String
title : String
description : String
status : String
priority : Int
created_at : UInt64
updated_at : UInt64
deps : Array[String]
notes : String
}

impl Eq for Issue
impl Show for Issue
impl ToJson for Issue

#
Lock

pub struct Lock {
path : String
}

#
Lock::release

async fn Lock::release(self : Lock) -> Unit

#
Store

pub struct Store {
beads_dir : String
issues_path : String
backup_path : String
tmp_path : String
lock_path : String
}

#
Store::backup_path

fn Store::backup_path(self : Store) -> String

#
Store::ensure_workspace

async fn Store::ensure_workspace(self : Store) -> Unit

#
Store::issues_path

fn Store::issues_path(self : Store) -> String

#
Store::load_issues

async fn Store::load_issues(self : Store) -> Array[Issue]

#
Store::lock_path

fn Store::lock_path(self : Store) -> String

#
Store::new

fn Store::new(beads_dir? : String) -> Store

#
Store::save_issues

async fn Store::save_issues(self : Store, issues : Array[Issue]) -> Unit

#
Store::tmp_path

fn Store::tmp_path(self : Store) -> String

#
acquire_lock

async fn acquire_lock(path : String, force? : Bool) -> Lock?

#
build_status_map

fn build_status_map(issues : Array[Issue]) -> Map[String, String]

#
find_issue_index

fn find_issue_index(issues : Array[Issue], id : String) -> Int?

#
is_ready

fn is_ready(issue : Issue, status_by_id : Map[String, String]) -> Bool

#
join_path

fn join_path(base : StringView, child : StringView) -> String

#
next_issue_id

fn next_issue_id(issues : Array[Issue]) -> String

#
normalize_status

fn normalize_status(value : String) -> String?

#
remove_dep_value

fn remove_dep_value(deps : Array[String], target : String) -> Array[String]

#
status_blocked

let status_blocked : String

#
status_closed

let status_closed : String

#
status_in_progress

let status_in_progress : String

#
status_open

let status_open : String

#
with_lock

async fn[T] with_lock(path : String, op : async () -> T, force? : Bool) -> T?

#
would_create_cycle

fn would_create_cycle(issues : Array[Issue], child : String, parent : String) -> Bool

Powered by MoonBit

Site sourceReport issuePackagesBuild queueSkillsStatistics

© 2026 mooncakes.io