name: bbs
description: Manage issues with The Fold's CAS-native BBS (Bulletin Board System). Use for creating, updating, searching, and tracking issues. Invoke when the user wants to create tickets, find work, check issue status, or manage dependencies.
allowed-tools: Bash(./fold:*), Read, Grep, Glob
BBS (Bulletin Board System) Skill
Overview
BBS is The Fold's CAS-native issue tracker built on block primitives. All issues are content-addressed, with full history preserved in the store.
The API has two layers:
- Data functions return values (alists, lists, booleans) — use these programmatically
- Print functions (suffixed with
!) display formatted output — use these at the REPL
Quick Reference
Data API (returns values)
| Function |
Returns |
Example |
bbs-get |
Issue alist or #f |
(bbs-get "fold-001") |
bbs-ready |
List of unblocked IDs |
(bbs-ready) |
bbs-blocked |
List of blocked IDs |
(bbs-blocked) |
bbs-blockers |
(id . status) pairs |
(bbs-blockers "fold-001") |
bbs-blocker-ids |
List of blocker IDs |
(bbs-blocker-ids "fold-001") |
bbs-blocking |
List of IDs this blocks |
(bbs-blocking "fold-001") |
bbs-is-blocked? |
Boolean |
(bbs-is-blocked? "fold-001") |
bbs-by-status |
List of IDs |
(bbs-by-status 'open) |
bbs-by-priority |
List of IDs |
(bbs-by-priority 0) |
bbs-by-label |
List of IDs |
(bbs-by-label 'sft) |
bbs-by-type |
List of IDs |
(bbs-by-type 'epic) |
bbs-all-ids |
All issue IDs |
(bbs-all-ids) |
bbs-labels |
All unique labels |
(bbs-labels) |
bbs-stats |
Statistics alist |
(bbs-stats) |
bbs-get-history |
List of version alists |
(bbs-get-history "fold-001") |
bbs-get-block |
Raw issue Block or #f |
(bbs-get-block "fold-001") |
bbs-issue-count |
Integer |
(bbs-issue-count) |
bbs-issue-exists? |
Boolean |
(bbs-issue-exists? "fold-001") |
Mutations (return hashes/IDs)
| Function |
Returns |
Example |
bbs-create |
Issue ID string |
(bbs-create "Title" 'priority 2 'type 'task) |
bbs-update |
New hash |
(bbs-update 'fold-001 'status 'in_progress) |
bbs-close |
Hash or #f |
(bbs-close 'fold-001 'reason "Done") |
bbs-reopen |
Hash or #f |
(bbs-reopen 'fold-001) |
bbs-comment |
Hash |
(bbs-comment "fold-001" "Note text") |
bbs-dep |
Void |
(bbs-dep 'blocker 'blocked) |
bbs-undep |
Void |
(bbs-undep 'blocker 'blocked) |
Display (print to stdout, return void)
| Function |
Example |
bbs-show! |
(bbs-show! 'fold-001) |
bbs-list! |
(bbs-list! 'status 'closed) |
bbs-ready! |
(bbs-ready!) |
bbs-blocked! |
(bbs-blocked!) |
bbs-history! |
(bbs-history! 'fold-001) |
bbs-blockers! |
(bbs-blockers! 'fold-001) |
bbs-find! |
(bbs-find! "query") |
bbs-search! |
(bbs-search! "query") |
bbs-list-by-label! |
(bbs-list-by-label! 'topology) |
bbs-list-by-type! |
(bbs-list-by-type! 'epic) |
bbs-label-report! |
(bbs-label-report!) |
bbs-gc! |
(bbs-gc!) |
Instructions
Getting Issue Data
# Get issue as alist (programmatic access)
./fold "(bbs-get \"fold-001\")"
# Returns: ((id . "fold-001") (title . "...") (status . open) (priority . 2) ...)
# Get unblocked issue IDs
./fold "(bbs-ready)"
# Get blockers with their status
./fold "(bbs-blockers \"fold-002\")"
# Returns: (("fold-001" . open) ("fold-003" . closed))
Displaying Issues (REPL)
# Display formatted issue
./fold "(bbs-show! 'fold-001)"
# List open issues
./fold "(bbs-list!)"
# List closed issues
./fold "(bbs-list! 'status 'closed)"
# Search titles + descriptions
./fold "(bbs-search! \"authentication\")"
# Show unblocked work
./fold "(bbs-ready!)"
Creating Issues
# Basic create (just title)
./fold "(bbs-create \"Fix authentication bug\")"
# With priority (0=critical, 2=medium, 4=backlog)
./fold "(bbs-create \"Urgent fix\" 'priority 0)"
# With type (task, bug, feature, epic)
./fold "(bbs-create \"Add dark mode\" 'type 'feature)"
# Full creation with all options
./fold "(bbs-create \"Refactor auth\" 'description \"Detailed description here\" 'priority 1 'type 'task 'labels '(core security))"
Updating and Closing Issues
# Update status
./fold "(bbs-update 'fold-001 'status 'in_progress)"
# Change priority
./fold "(bbs-update 'fold-001 'priority 0)"
# Close with reason
./fold "(bbs-close 'fold-001 'reason \"Fixed in commit abc123\")"
Managing Dependencies
# fold-001 blocks fold-002
./fold "(bbs-dep 'fold-001 'fold-002)"
# What blocks this issue?
./fold "(bbs-blockers \"fold-002\")"
# What does this issue block?
./fold "(bbs-blocking 'fold-001)"
Field Reference
Priority Levels
| Priority |
Meaning |
| 0 |
Critical - drop everything |
| 1 |
High - do soon |
| 2 |
Medium (default) |
| 3 |
Low - when time permits |
| 4 |
Backlog - someday maybe |
Issue Types
| Type |
Use For |
task |
General work items |
bug |
Defects to fix |
feature |
New functionality |
epic |
Large multi-issue efforts |
Status Values
| Status |
Meaning |
open |
Not yet started |
in_progress |
Currently being worked |
closed |
Completed or won't fix |
Notes
- Issue IDs: Can be symbols (
'fold-001) or strings ("fold-001")
- Auto-initialization: BBS initializes automatically when the REPL starts
- CAS Storage: All issues are content-addressed in
.store/
- Head files: Current issue state tracked in
.store/heads/bbs/
- Counter: Issue counter in
.bbs/counter
Pipeline Integration
BBS effects are available in agent pipelines (lattice/pipeline/effects.ss):
(bbs-create "title") ; Create issue, return ID
(bbs-create-full title desc type priority)
(bbs-update id updates-alist) ; Update issue fields
(bbs-close id) ; Close issue
(bbs-ready) ; Get unblocked issues
(bbs-show id) ; Get issue details
Note: Pipeline effect names match the data API, not the display API.
File Locations
| Path |
Purpose |
.store/heads/bbs/ |
Issue head files (current hash per issue) |
.bbs/counter |
Next issue number |
.bbs/deps |
Dependency relationships |
boundary/bbs/bbs.ss |
Entry point and display functions |
boundary/bbs/store.ss |
Data accessors (bbs-get, bbs-get-history) |
boundary/bbs/ops.ss |
Mutations (create, update, close) |
boundary/bbs/index.ss |
Query index (by-status, ready, blocked) |