Chat
You interact with NimbleBrain by chatting with an agent that has access to all the tools provided by your installed apps. The agent processes your message, decides which tools to call, executes them, and streams the response back to you.
Two interfaces
Section titled “Two interfaces”NimbleBrain offers two ways to chat: a web UI for browser-based interaction and a terminal TUI for command-line workflows.
The web UI is available at http://localhost:3000 when the server is running. Type your message in the input field and press Enter to send.
During a response, you see three streaming states:
- Thinking — the agent is processing your message and deciding what to do
- Streaming — text is arriving from the model
- Working — a tool call is in progress
Tool calls appear inline as they execute. Each shows the tool name, which app it belongs to, and whether it succeeded or failed.
Start the interactive TUI:
nbOr with a specific config:
nb --config ./nimblebrain.jsonThe TUI renders in your terminal using Ink (React for terminals). Streaming text and tool call status update in real time.
Headless mode
Section titled “Headless mode”When stdin is piped, NimbleBrain automatically enters headless mode. It reads one message per line from stdin and writes responses to stdout:
echo "What bundles are installed?" | nbFor structured output, use --json:
echo "List my apps" | nb --jsonThis returns a ChatResult JSON object with response, conversationId, toolCalls, token counts, and stopReason.
The conversation ID carries across lines, so multi-turn conversations work:
printf "What is 2+2?\nNow multiply that by 10\n" | nbWhat the agent can do
Section titled “What the agent can do”The agent has access to:
- App tools — every tool from every installed MCP bundle (e.g.,
granola__list_meetings,bash__execute) - System tools — built-in tools prefixed with
nb__:
| Tool | Purpose |
|---|---|
nb__discover_tools | Search available tools by keyword across all installed apps |
nb__discover_bundles | Search the mpak registry for new bundles to install |
nb__manage_bundle | Install, uninstall, or configure a bundle at runtime |
nb__bundle_status | Check version, health, and tool count for installed bundles |
nb__delegate | Spawn a child agent for a sub-task |
App context
Section titled “App context”When you open an app in the web UI sidebar and chat from within that app’s view, the chat is scoped to that app. The agent receives an appContext that tells it which app you are focused on, so it can prioritize that app’s tools and provide more relevant responses.
Tips for effective prompting
Section titled “Tips for effective prompting”- Be specific about what you want. “Search for MCP servers related to Slack” works better than “find me something.”
- Name the app when relevant. If you have multiple apps installed, say “Use Granola to list my meetings” rather than just “list my meetings.”
- Ask the agent to install what it needs. The agent can search mpak and install bundles on its own via
nb__manage_bundle. - Use delegation for parallel work. For tasks that split naturally, ask the agent to delegate sub-tasks. See Multi-Agent Delegation.
Resume a conversation
Section titled “Resume a conversation”You can resume a previous conversation in the CLI:
nb --resume conv_a1b2c3d4e5f67890In the web UI, open a past conversation from the Conversations app and click “Resume in Chat” to reopen it in the chat panel.
See Conversations for details on history, forking, and search.
What’s next
Section titled “What’s next”- Installing Apps — add new capabilities to your agent
- Skills — customize how the agent responds with prompt composition
- Conversations — history, resume, fork, and search