Overview
useTamboClient provides direct access to the TamboClient instance from the Tambo context. This is useful for advanced use cases requiring lower-level control.
Import
import { useTamboClient } from '@tambo-ai/react' ;
Signature
function useTamboClient () : TamboClient
Return Value
The TamboClient instance with access to all client methods
Examples
Access Client State
import { useTamboClient } from '@tambo-ai/react' ;
function DebugPanel () {
const client = useTamboClient ();
const state = client . getState ();
return (
< div >
< h3 > Current Thread: { state . currentThreadId } </ h3 >
< h3 > Total Threads: { state . threadMap . size } </ h3 >
</ div >
);
}
Subscribe to State Changes
import { useEffect , useState } from 'react' ;
import { useTamboClient } from '@tambo-ai/react' ;
function ThreadCounter () {
const client = useTamboClient ();
const [ threadCount , setThreadCount ] = useState ( 0 );
useEffect (() => {
const unsubscribe = client . subscribe (( state ) => {
setThreadCount ( state . threadMap . size );
});
return unsubscribe ;
}, [ client ]);
return < div > Active threads: { threadCount } </ div > ;
}
Start New Thread Programmatically
import { useTamboClient } from '@tambo-ai/react' ;
function NewThreadButton () {
const client = useTamboClient ();
const handleNewThread = () => {
client . startNewThread ();
};
return (
< button onClick = { handleNewThread } >
Start New Conversation
</ button >
);
}
Cancel Running Thread
import { useTamboClient } from '@tambo-ai/react' ;
function CancelButton ({ threadId } : { threadId : string }) {
const client = useTamboClient ();
const handleCancel = async () => {
await client . cancelRun ( threadId );
};
return (
< button onClick = { handleCancel } >
Cancel
</ button >
);
}
Fetch Threads Directly
import { useEffect , useState } from 'react' ;
import { useTamboClient } from '@tambo-ai/react' ;
import type { TamboThread } from '@tambo-ai/react' ;
function RecentThreads () {
const client = useTamboClient ();
const [ threads , setThreads ] = useState < TamboThread []>([]);
useEffect (() => {
const fetchThreads = async () => {
const response = await client . threads . list ({ limit: 5 });
setThreads ( response . threads );
};
fetchThreads ();
}, [ client ]);
return (
< ul >
{ threads . map ( thread => (
< li key = { thread . id } > { thread . name } </ li >
)) }
</ ul >
);
}
Generate Thread Name
import { useTamboClient } from '@tambo-ai/react' ;
function ThreadNameGenerator ({ threadId } : { threadId : string }) {
const client = useTamboClient ();
const handleGenerateName = async () => {
await client . generateThreadName ( threadId );
};
return (
< button onClick = { handleGenerateName } >
Generate Name
</ button >
);
}
When to Use
Use useTamboClient when you need:
Direct access to the SDK client for advanced operations
To subscribe to raw state changes
To call methods not exposed through higher-level hooks
To integrate with non-React code
Low-level control over thread management
For most use cases, prefer higher-level hooks like useTambo(), useTamboThreadInput(), etc. Use useTamboClient only when you need direct SDK access.
TamboClient TamboClient API reference
Client Package @tambo-ai/client types