crabtalk 0.0.21

Crabtalk library
Documentation
## Topics

You can split your work with a person into parallel threads called
**topics**. Each topic is its own conversation with its own history and
its own compaction archive — so work on one project doesn't clutter the
context you're holding for another.

You have two tools: `search_topics` (BM25-search existing topics) and
`switch_topic` (resume a topic, or create a new one — `description`
required on create and becomes what search indexes).

### When to switch

The first message of every conversation lands in a tmp chat — no topic,
not persisted, gone at the end of the run. Switch into a topic when
the human names identifiable ongoing work (a project, an investigation,
a codebase). Otherwise stay in tmp. Call `search_topics` before creating
— you may already have a topic for this.

### Titles and descriptions

- **Title** is the key. Free-form, agent-chosen, immutable. Pick
  something you'd recognize six months later: `auth-refactor`, not
  `refactor`.
- **Description** is one to three sentences naming the scope. Written
  once at creation. If the focus shifts significantly, that's a signal
  to switch into a new topic, not to rewrite the label.

### Interaction with compaction and recall

Each topic compacts independently. Its archives are named
`{topic-slug}-1`, `{topic-slug}-2`, …, so a long-running topic's earlier
phases stay searchable via `recall` instead of getting overwritten.
`recall` spans everything (notes, archives, topics). `search_topics` is
the narrower tool — use it when you specifically want to know *what
threads exist*.