thoughtbox:onboard

SkillAI & models

Gateway orientation for agents using Thoughtbox MCP for the first time. Use this skill when you connect to a Thoughtbox MCP server and need to understand what's available, how to structure reasoning sessions, or how to use the tb SDK. Also use when you're unsure which Thoughtbox operation to use for a task, or when you want to check what modules and patterns are available. Triggers on first Thoughtbox interaction, "how do I use Thoughtbox", "what can Thoughtbox do", or any confusion about Thoughtbox operations.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the thoughtbox:onboard skill

What this skill tells your AI

The instructions your AI receives, as published by kastalien-research/thoughtbox in .agents/skills/thoughtbox-onboard/SKILL.md and read by ahel’s review.

Thoughtbox is an MCP server that gives you a structured reasoning workspace. It persists your thinking across sessions, lets you branch and revise ideas, and builds a knowledge graph from your insights. This guide gets you productive in 5 minutes.

What You Have

Seven modules, two tools:

ModuleWhat it doesAccess via
thoughtRecord structured reasoning steps with types, branching, revisiontb.thought()
sessionList, search, resume, export, analyze reasoning sessionstb.session.*
knowledgeEntity graph with observations, relations, traversaltb.knowledge.*
notebookLiterate programming — create cells, execute code, exporttb.notebook.*
theseusFriction-gated refactoring protocol (scope locking, visa system)tb.theseus()
ulyssesSurprise-gated debugging protocol (S-register, forced reflection)tb.ulysses()
observabilityHealth checks, session monitoring, cost trackingtb.observability()

Two MCP tools give you access to everything:

  • thoughtbox_search — query the operation catalog (what's available, schemas, examples)
  • thoughtbox_execute — run JavaScript using the tb SDK to chain operations

Quick Start: Your First Session

1. Record a thought

// thoughtbox_execute
async () => {
  return await tb.thought({
    thought: "Analyzing the authentication flow for security gaps",
    thoughtType: "reasoning",
    nextThoughtNeeded: true,
    thoughtNumber: 1,
    totalThoughts: 10,
    sessionTitle: "Auth Security Review",
    sessionTags: ["security", "auth"]
  });
}

The first thought creates a session automatically. Subsequent thoughts append to it.

2. Branch to explore alternatives

async () => {
  // Branch from thought 3 to explore two options
  await tb.thought({
    thought: "Option A: Token rotation with short-lived JWTs",
    thoughtType: "reasoning",
    nextThoughtNeeded: true,
    thoughtNumber: 4,
    totalThoughts: 10,
    branchFromThought: 3,
    branchId: "jwt-rotation"
  });
}

3. Revise when you learn something new

async () => {
  await tb.thought({
    thought: "REVISED: JWT rotation won't work — the session store doesn't support atomic swap",
    thoughtType: "reasoning",
    nextThoughtNeeded: true,
    thoughtNumber: 8,
    totalThoughts: 10,
    isRevision: true,
    revisesThought: 4
  });
}

4. Complete the session

Always complete your sessions — don't leave them dangling:

async () => {
  await tb.thought({
    thought: "Conclusion: Use opaque reference tokens with server-side validation. JWTs are a poor fit for this session model.",
    thoughtType: "reasoning",
    nextThoughtNeeded: false,  // This ends the session
    thoughtNumber: 10,
    totalThoughts: 10
  });
}

Thought Types

Each thought has a semantic type. The type determines what metadata fields are required:

TypeWhen to useRequired extra fields
reasoningDefault — analysis, exploration, brainstormingNone
decision_frameChoosing between optionsconfidence, options (exactly 1 selected)
action_reportRecording what you didactionResult (success, reversible, tool, target)
belief_snapshotCapturing current understandingbeliefs (entities array, optional constraints/risks)
assumption_updateTracking assumption changesassumptionChange (text, oldStatus, newStatus)
context_snapshotRecording environment statecontextData (toolsAvailable, constraints, etc.)
progressTracking task statusprogressData (task, status, note)

Example — decision frame:

async () => {
  await tb.thought({
    thought: "Choosing between Redis and Memcached for session cache",
    thoughtType: "decision_frame",
    confidence: "high",
    options: [
      { label: "Redis", selected: true, reason: "Persistence, data structures, pub/sub" },
      { label: "Memcached", selected: false, reason: "Simpler but no persistence" }
    ],
    nextThoughtNeeded: true,
    thoughtNumber: 5,
    totalThoughts: 10
  });
}

Note: decision_frame requires exactly one option with selected: true.

Core Patterns

Forward Thinking (1 to N)

Best for exploration. Start at thought 1, build incrementally.

Backward Thinking (N to 1)

Best for planning. Start at the goal (thought N), work back to the starting point.

Branching

Best for comparing alternatives. Branch from a common thought, explore independently, then synthesize.

Revision

Best for honest course correction. Mark thoughts as revisions when you learn new information.

Interleaved Thinking

Best for tool-heavy tasks. Alternate between Thoughtbox reasoning and external tool calls. Think, act, reflect, act.

Read thoughtbox://patterns-cookbook for detailed examples of each pattern.

Session Management

// List recent sessions
async () => tb.session.list({ limit: 5 })

// Search by keyword
async () => tb.session.search("authentication")

// Resume a previous session (continue adding thoughts to it)
async () => tb.session.resume("session-uuid-here")

// Export as markdown
async () => tb.session.export("session-uuid-here", "markdown")

// Analyze structure (linearity, revision rate, convergence)
async () => tb.session.analyze("session-uuid-here")

Session Hygiene

  • Title meaningfully — "Auth Security Review" not "Session 1"
  • Tag for searchability["security", "auth", "review"]
  • Always complete sessions — set nextThoughtNeeded: false on your last thought
  • Resume, don't duplicate — if returning to a topic, tb.session.resume(id) instead of starting fresh
  • Export valuable sessions before they scroll out of view

Knowledge Graph

The knowledge graph persists insights across sessions. Use it to build institutional memory.

// Create an entity
async () => tb.knowledge.createEntity({
  name: "sliding-window-rate-limiter",
  type: "Concept",
  label: "Sliding Window Rate Limiter",
  properties: { domain: "api-design", summary: "Handles burst traffic better than fixed buckets" }
})

// Add an observation (timestamped note)
async () => tb.knowledge.addObservation({
  entity_id: "entity-uuid",
  content: "Validated in production: handles 10k req/s with <5ms overhead"
})

// Create a relation
async () => tb.knowledge.createRelation({
  from_id: "rate-limiter-uuid",
  to_id: "redis-uuid",
  relation_type: "DEPENDS_ON"
})

// Traverse the graph
async () => tb.knowledge.queryGraph({
  start_entity_id: "some-uuid",
  max_depth: 2,
  relation_types: ["BUILDS_ON", "DEPENDS_ON"]
})

// Get stats
async () => tb.knowledge.stats()

Entity types: Concept, Insight, Workflow Relation types: BUILDS_ON, DEPENDS_ON, RELATES_TO

Cipher Notation (Long Sessions)

For sessions over ~20 thoughts, switch to cipher notation to save context tokens (2-4x compression):

S5|H|—|API latency ↑ bc db query regression
S6|E|S5|query metrics: p99 ↑3x on user lookup ⊕ [H1]
S7|C|S5-S6|[H1] conf (!), investigate query Δ in deploy

Format: [ID]|[TYPE]|[REFS]|[CONTENT]

Types: H=hypothesis, E=evidence, C=conclusion, Q=question, R=revision, P=plan, O=observation, A=assumption, X=rejected

Read thoughtbox://cipher for the full notation reference.

Discovering Operations

Use thoughtbox_search to explore what's available:

// List all modules
async () => Object.keys(catalog.operations)

// See operations in a module
async () => catalog.operations.session

// Search by keyword
async () => {
  const q = "export";
  return Object.entries(catalog.operations).flatMap(([mod, ops]) =>
    Object.entries(ops)
      .filter(([_, op]) => op.description.toLowerCase().includes(q))
      .map(([name, op]) => ({ module: mod, name, title: op.title }))
  );
}

// List available prompts
async () => catalog.prompts

// List available resources
async () => catalog.resources.map(r => ({ name: r.name, uri: r.uri }))

Gotchas

  • decision_frame requires confidence AND options with exactly 1 selected
  • context_snapshot requires contextData object
  • Notebook code cells require a filename field
  • tb.theseus() and tb.ulysses() take {operation, ...args} (flat), not nested under args
  • tb.session, tb.knowledge, tb.notebook are objects with methods; tb.thought, tb.theseus, tb.ulysses, tb.observability are functions
  • Thought numbers must be unique per session+branch — can't reuse a number

What's Next

Once oriented, reach for these skills as needed:

TaskSkill
Research a topic with structured reasoningthoughtbox:research
Make a decision between optionsthoughtbox:decision
Debug something unexpectedthoughtbox:debug
Refactor with scope disciplinethoughtbox:refactor
Review what a session producedthoughtbox:session-review
Query past knowledgethoughtbox:knowledge-query

Signals

GitHub stars
64
Forks
20
Last commit
Jul 2026
Advanced
Catalog kind
skill
Gateway key
thoughtbox-onboard
Source
github.com/kastalien-research/thoughtbox