The Problem
Traditional sequential IDs (#1, #2, #3) break when:
- Multiple agents create issues simultaneously
- Different branches have independent numbering
- Forks diverge and later merge
The Solution
Beads uses hash-based IDs:- Globally unique (content-based hash)
- No coordination needed between creators
- Merge-friendly across branches
- Predictable length (configurable)
How Hashes Work
IDs are generated from:- Issue title
- Creation timestamp
- Random salt
Hierarchical IDs
For epics and subtasks:- Clear parent-child relationship
- No namespace collision (parent hash is unique)
- Up to 3 levels of nesting
ID Configuration
Configure ID prefix and length:Collision Handling
While rare, collisions are handled automatically:- On import, if hash collision detected
- Beads appends disambiguator
- Both issues preserved
Working with IDs
Migration from Sequential IDs
If migrating from a system with sequential IDs:Best Practices
- Use short references -
bd-a1b2is usually unique enough - Use
--jsonfor scripts - Parse full ID programmatically - Reference by hash in commits -
Fixed bd-a1b2in commit messages - Let hierarchies form naturally - Create epics, add children as needed