# Slipbot

> Capture notes, quotes, ideas, and journal entries into the slipbox with auto-tagging, linking, and graph maintenance. Use when the user shares a thought to save, says "note:"/"remember this:"/"quote:", prefixes a line with > ! * -, or asks to "remember" or "save" something.

- Skill: `jrswab/slipbot` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add jrswab/slipbot`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jrswab/slipbot/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: jrswab (https://skillmd.com/u/jrswab)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/jrswab/slipbot

---


# Slipbot

## Configuration

- **Notes directory:** `sync/slipbox/`
- **Graph index:** `sync/slipbox/.graph/graph.json`
- **Timezone:** User's local timezone (check USER.md or system; default UTC)

## Prefix → Type

- `> {content}` → quote
- `! {content}` → idea
- `* {content}` → journal
- `- {content}` → note (default; also reached with no prefix)

Explicit triggers: `note: {content}`, `remember this: {content}`, `quote: {content}`.

## Source Types

Common source types: `book`, `article`, `podcast`, `video`, `movie`, `paper`, `talk`, `conversation`.

## Workflow

### 1. Capture

When a note is recognized:

1. **Extract content and metadata**
   - Note content
   - Type (from prefix above; default `note`)
   - Source, if provided, via the `~` shorthand: `~ {type}, {title}` or `~ {type}, {title} by {author}` (optional `url` appended as ` ({url})`). Used by the `slipbot-*-import` siblings to pass parsed source metadata inline.

2. **Generate filename**
   - Format: `YYYYMMDD-HHMMSS-slug.md`
   - Slug: lowercase, hyphenated, from title (max 4-5 words)
   - On collision, append a suffix increment (`-2`, `-3`, …) until the filename is unique on disk

3. **Check for existing source**
   - If source provided, search existing notes for matching source title (case insensitive)
   - Use existing source if found; otherwise use provided source as-is
   - Trust user-supplied source metadata as-is; do not call external APIs to enrich it

4. **Generate tags — tag with objects**
   - Tag with **objects**: specific people, tools, techniques, systems, concrete topics (nouns)
   - 2-5 tags per note
   - Check existing tags before creating new ones
   - Examples: `[pomodoro-technique, Cal-Newport, deep-work]`, `[vim, neovim-config, lua]`
   - **Done when** 2-5 object tags are selected, each verified against existing tags (reused before created).

5. **Create markdown file** using the frontmatter template in [`SCHEMAS.md`](SCHEMAS.md). Note titles: descriptive but concise (3-8 words), specific (not "Thoughts" or "Notes"), question format works ("Why does X happen?", "How to Y?").

**Done when** the markdown file exists at `sync/slipbox/{timestamp}-{slug}.md` with all required frontmatter fields populated (title, date, type, tags, source, links).

### 2. Link

After creating a note, find connections:

1. **Search existing notes** for related concepts, people, topics, and overlapping tags

2. **Determine connection type**
   - **related** — similar topic or theme
   - **extends** — builds on or expands another note
   - **contradicts** — opposing viewpoint
   - **references** — mentions same person/book/concept
   - **supports** — provides evidence for another note

3. **Add bidirectional links** with confidence ≥ 0.75
   - Update both notes' frontmatter
   - Include a reason for each connection (see `links` shape in [`SCHEMAS.md`](SCHEMAS.md))

**Done when** every existing note scoring ≥0.75 confidence has been evaluated, and each accepted link is written bidirectionally into both notes' frontmatter with a reason.

### 3. Update Graph

After capture and linking:

1. **Load** `sync/slipbox/.graph/graph.json`
2. **Add/update the note entry** using the graph schema in [`SCHEMAS.md`](SCHEMAS.md)
3. **Write** the updated graph back to `sync/slipbox/.graph/graph.json`

**Done when** `graph.json` contains an entry for the new note whose `links` count matches the links written in §2, and `last_updated` is set.

## Querying

When the user asks to retrieve notes ("show me notes about X", "find quotes from Y", "what links to Z", "what have I written about A"), see [`QUERYING.md`](QUERYING.md).

## Maintenance

When the user asks to maintain the slipbox (validate frontmatter, remove broken links, suggest merges, rebuild graph), see [`MAINTENANCE.md`](MAINTENANCE.md).

## Error Handling

- **Missing timezone:** Default to UTC, ask user to set in USER.md
- **Corrupted graph:** Rebuild from note files (see [`MAINTENANCE.md`](MAINTENANCE.md))
- **Invalid frontmatter:** Fix the offending fields in place and notify the user what was fixed

## User Feedback

Reply with one line: `Note captured: [title]` (plus `Added N links to related notes` when N>0). Narrate steps only when debugging.

