Skip to main content

GitHub All-Stars #12: Beads, or: How to Give an AI Goldfish a Memory

Picture of Artur Skowroński, Head of Application Development

Artur Skowroński

Head of Application Development
Jan 21, 2026|16 min read
github_star_in_space
panda_orchestrating_raccons_and_rabbits

source: https://steve-yegge.medium.com/steveys-birthday-blog-34f437139cb5

1type Bead struct {
2 ID string `json:"id"`
3 Description string `json:"desc"`
4 Status string `json:"status"` // "open", "in_progress", "done"
5 BlockedBy []string `json:"blocked_by,omitempty"`
6}
meme_token_volume

Cause you know… Jevons Paradox is a thing.

1// Pseudocode of the write/update logic
2func (s *Store) UpdateBead(id string, update UpdateOp) error {
3 // 1. Open the append-only JSONL log (e.g., .beads/issues.jsonl) in APPEND mode
4 f, _ := os.OpenFile(pathToLog, os.O_APPEND|os.O_WRONLY, 0644)
5
6
7 // 2. Write the change “delta” as a new JSON line
8 // e.g. {"op": "status_change", "old": "open", "new": "done", "ts": 12345}
9 json.NewEncoder(f).Encode(update)
10
11 // 3. Update the SQLite cache (optional, can be rebuilt)
12}
1// ID generation (simplified)
2func GenerateID() string {
3 u := uuid.New() // random UUID
4 h := sha1.Sum([]byte(u.String()))
5 // Returns e.g. "bd-7f3a" (length may grow on collision)
6 return "bd-" + hex.EncodeToString(h[:])[:4]
beads_github_stars

Subscribe to our newsletter and never miss an article