React Installation
Install @aeontel/react and wrap your app in AeontelProvider.
Install
Shell
pnpm add @aeontel/react @aeontel/sdk @tanstack/react-query reactReact 18+ is supported; React 19 is tested.
Wrap your app
AeontelProvider supplies both the SDK client context and a TanStack Query client.
TSX
import { AeontelProvider } from "@aeontel/react";
import Aeontel from "@aeontel/sdk";
const client = new Aeontel(null, {
baseURL: "https://api.aeontel.com",
credentials: "include", // send the session cookie
});
export function App({ children }: { children: React.ReactNode }) {
return <AeontelProvider client={client}>{children}</AeontelProvider>;
}Bring your own query client
If you already have a QueryClient (for other integrations), pass it in.
TSX
import { QueryClient } from "@tanstack/react-query";
const qc = new QueryClient({
defaultOptions: { queries: { staleTime: 60_000, retry: 1 } },
});
<AeontelProvider client={client} options={{ queryClient: qc }}>
...
</AeontelProvider>;Otherwise, supply queryDefaults and the provider builds one for you. The default is 30s staleTime, 1 retry.
Using a hook
TSX
import { useListAgents, useCreateAgent, agentKeys } from "@aeontel/react";
import { useQueryClient } from "@tanstack/react-query";
function AgentsPanel({ workspaceId }: { workspaceId: string }) {
const { data, isLoading } = useListAgents({ workspace_id: workspaceId });
const qc = useQueryClient();
const create = useCreateAgent({
onSuccess: () => qc.invalidateQueries({ queryKey: agentKeys.all() }),
});
return (
<div>
<button
onClick={() =>
create.mutate({
workspaceId,
name: "New agent",
model: "anthropic/claude-sonnet-4-5",
})
}
>
New agent
</button>
{isLoading ? (
<p>Loading…</p>
) : (
<ul>
{data?.data.map((a) => (
<li key={a.id}>{a.name}</li>
))}
</ul>
)}
</div>
);
}