Claude Skills
CollectionsCompareWorkflowsNominate
Sign inSign up
© 2026 Curated Agent Skills·Learn more about Agent Skills
Back to repository

threads

verified

Manages Tambo threads, messages, suggestions, voice input, and image attachments. Use when working with conversations, sending messages, implementing AI suggestions, adding voice input, managing multi-thread UIs, or handling image attachments with useTamboThread, useTamboSuggestions, or useTamboVoice.

View on GitHub

Marketplace

tambo-marketplace

tambo-ai/tambo

Plugin

tambo

frameworks

Repository

tambo-ai/tambo
7.8kstars

plugins/tambo/skills/threads/SKILL.md

Last Verified

February 5, 2026

Install Skill

Select agents to install to:

Scope:
npx add-skill https://github.com/tambo-ai/tambo/blob/main/plugins/tambo/skills/threads/SKILL.md -a claude-code --skill threads

Installation paths:

Claude
.claude/skills/threads/
Powered by add-skill CLI

Instructions

# Threads and Input

Manages conversations, suggestions, voice input, and image attachments.

## Quick Start

```tsx
const { thread, sendThreadMessage, isIdle } = useTamboThread();

await sendThreadMessage("Hello", { streamResponse: true });
```

## Thread Management

Access and manage the current thread:

```tsx
import { useTamboThread } from "@tambo-ai/react";

function Chat() {
  const {
    thread, // Current thread with messages
    sendThreadMessage, // Send user message
    isIdle, // True when not generating
    generationStage, // Current stage (IDLE, STREAMING_RESPONSE, etc.)
    switchCurrentThread, // Switch to different thread
    inputValue, // Current input field value
    setInputValue, // Update input field
  } = useTamboThread();

  const handleSend = async () => {
    await sendThreadMessage(inputValue, { streamResponse: true });
    setInputValue("");
  };

  return (
    <div>
      {thread?.messages.map((msg) => (
        <div key={msg.id}>
          {msg.content.map((part, i) =>
            part.type === "text" ? <p key={i}>{part.text}</p> : null,
          )}
          {msg.renderedComponent}
        </div>
      ))}
      <input
        value={inputValue}
        onChange={(e) => setInputValue(e.target.value)}
      />
      <button onClick={handleSend} disabled={!isIdle}>
        Send
      </button>
    </div>
  );
}
```

### Generation Stages

| Stage                 | Description                      |
| --------------------- | -------------------------------- |
| `IDLE`                | Not generating                   |
| `CHOOSING_COMPONENT`  | Selecting which component to use |
| `FETCHING_CONTEXT`    | Calling registered tools         |
| `HYDRATING_COMPONENT` | Generating component props       |
| `STREAMING_RESPONSE`  | Actively streaming               |
| `COMPLETE`            | Finished successfully            |
| `ERROR`               | Error occurred                   |

## Thread List

Manage multiple conversations:

```tsx
i

Validation Details

Front Matter
Required Fields
Valid Name Format
Valid Description
Has Sections
Allowed Tools
Instruction Length:
5770 chars