Analyzing Binaries with Chat¶
The Chat sidebar is the primary interface for asking Sidekick questions about a binary. You type a message, Sidekick responds using its tools to query and analyze the binary, and the conversation builds incrementally as you dig deeper into the code.
The two-surface layout¶
The Chat sidebar has two surfaces that work together: the list view and the detail view.
The list view shows all your chat threads for the current binary. Each row displays the thread title, how long ago the last message was sent, summary statistics such as the number of changes applied or findings recorded, and live status when a thread is active. Depending on what Sidekick is doing, you may see statuses such as Thinking, Running tool, or Compacting. Threads that have pending tool approvals show an "Awaiting Approval" badge. Threads that encountered an error show an "Error" indicator.
The detail view shows the full conversation for the selected thread, including your messages and Sidekick's responses. The message composer at the bottom of the sidebar is shared between both surfaces.
When the sidebar is narrow, the two surfaces stack and you navigate between them. When the sidebar is wide enough, both surfaces appear side by side with a draggable splitter between them.

Starting a chat¶
To start a new chat:
- Open the Chats sidebar from the Binary Ninja sidebar panel.
- Type a message in the composer at the bottom of the sidebar.
- Press
Returnor click the send button.
If no thread is currently selected, Sidekick creates a new thread automatically when you send the first message. You can also create a new thread explicitly by clicking the + button in the sidebar header, or via Plugins > Sidekick > New Chat (Ctrl+Shift+C).
Note
New threads are initially titled "New Chat". After Sidekick sends its first response, the title is automatically updated to reflect the topic of the conversation.
The message composer¶
The composer is the text input at the bottom of the Chat sidebar. It expands vertically as you type and supports the following shortcuts:
| Key | Action |
|---|---|
Return |
Send the message |
Shift+Return |
Insert a newline |
Up / Down |
Navigate message history when the cursor is on the first or last line |
@ |
Open the @-mention autocomplete popup |
A send button appears on the right side of the composer when text is present. When Sidekick is processing a request, the send button is replaced by a stop button that you can click to cancel the current operation.
Composer Library slash commands¶
The composer can also launch Library items directly. If the submitted message begins with /, Sidekick
checks whether the first token matches a Library item slug.
- Slugs are derived from Library item names by lowercasing them and replacing spaces or punctuation
with
-. For example,Recover Stringsbecomes/recover-strings. - Type
//to send a literal leading slash instead of invoking a Library item. - If a matching item has multiple entry points, it must declare
default_entry_pointinsidekick.yamlbefore it can be launched from chat.
Slash commands use the item's default entry point:
- Python entry points use
/slugor/slug {json}. Sidekick schedules alibrary_python_runtool call in the current chat, or creates a new chat first if none is selected. - Agent entry points use
/slug messageonly for MESSAGE-style agent prompts. Other agents require/slug {json}. Agent launches create a dedicated agent chat rather than continuing in the current thread. - Skill entry points use
/slugwhen no variables are required, or/slug {json}when the skill declares variables. Skills inject their rendered content into the current chat, or create a new chat first if needed. Plain trailing text is rejected for skills.
See Managing Scripts, Agents, and Skills in the Library for the Library-side view of the same workflow.
@-mention shortcuts¶
When you type @ in the composer, a popup appears showing the available mention keywords. Selecting a keyword inserts a reference to the corresponding binary artifact at the current cursor position. Mentions render as styled inline links in the composer and are sent as structured references that Sidekick uses to focus its analysis.

The available mention keywords are:
| Keyword | What it references |
|---|---|
@here |
The address currently under the cursor |
@function |
The function containing the cursor |
@basic_block |
The basic block at the cursor |
@symbol |
The symbol at the cursor address |
@variable |
The variable at the cursor position |
@data_var |
The data variable at the cursor address |
@hlil |
The current function in High Level IL |
@mlil |
The current function in Medium Level IL |
@llil |
The current function in Low Level IL |
@segment |
The segment containing the cursor |
@section |
The section containing the cursor |
@callers |
Functions that call the current function |
@callees |
Functions called by the current function |
@il_instruction |
The IL instruction under the cursor |
Keywords that are unavailable in the current context (for example, @function when the cursor is not inside a function) appear grayed out in the popup.
After typing @, you can continue typing to filter the list. Press Return or click an item to insert it. Press Escape to close the popup without inserting.
Inserted mentions appear as blue underlined tokens in the composer. They behave as atomic units: pressing Backspace with the cursor directly after a mention deletes the entire mention token rather than individual characters.
Tip
Use @function to ask Sidekick questions scoped to the function you are currently viewing. For example: "What does @function do?" or "Are there any bounds checks missing in @function?"
Thread trees¶
Threads within a single binary are organized into a tree. The first thread you create in a binary is the root. When Sidekick needs to explore a sub-problem in parallel (for example, when analyzing a large binary through background tasks), it can create child threads rooted under the active thread.
In the list view, child threads appear indented under their parent. The parent thread's row shows a summary count (for example, "3 threads") that reflects the number of descendant threads in its subtree, along with the aggregate count of changes and findings recorded across the whole tree.
You can click any thread in the tree to view its conversation in the detail view.

Pinning chats¶
Pinning marks a thread as important so it stays at the top of the list and is easy to find. Pinned threads display a pin icon in place of the timestamp in the list view.
To pin or unpin a thread, right-click it in the list and select Pin or Unpin.
You can also filter the list to show only pinned threads: click the hamburger menu (three-line icon) in the sidebar header and select Show Pinned Chats Only. Select Show All Chats to return to the full list.
Searching chats¶
A search box appears at the top of the list view. As you type, the list filters to show only threads whose messages contain the search text. Search matches across all threads in the current binary.
Clear the search field to return to the full thread list.
Renaming threads¶
New threads receive an automatically generated title after the first response. To rename a thread manually, double-click its title in the list view or right-click and select Rename Chat. Type the new title and press Return to confirm.
Deleting threads¶
To delete a thread, right-click it in the list and select Delete Chat. A confirmation dialog appears before the thread is removed. Deleting a thread removes that thread and its entire child thread tree. Deleting the main thread removes the entire process.
Warning
Deletion is permanent. All messages in the deleted thread (and any child threads) are removed and cannot be recovered.
Message actions¶
Hover over any message in the detail view to reveal per-message action buttons:
On assistant messages:
- Copy — Copies the message text to the clipboard.
- Retry — Removes the assistant message and re-submits the preceding user message, generating a new response.
On your messages:
- Edit — Opens the Edit Message dialog where you can modify the message text. Clicking Accept truncates all subsequent messages and re-submits from the edited message, generating a new response.
Note
Editing a message causes Sidekick to re-run the conversation from that point. All messages after the edited one are discarded.
Tool groups¶
When Sidekick runs one or more tools to answer a question, the tool calls appear in the detail view as a collapsible tool group. The group shows a summary line (for example, "3 tool calls" or "2 tool calls pending approval") and can be expanded to see each individual tool call, its arguments, and its result.
Each tool call in the expanded view shows:
- The tool name and a brief description of what it does
- The arguments passed to the tool
- The result returned by the tool, if available
Tool calls that modify the binary are visually accented in orange. Tool calls that read data are accented in blue.

Tool approval and permissions¶
By default, Sidekick asks for approval unless the relevant tool or tag is explicitly allowed by policy. For user-owned chats, that policy can come from the chat, the workspace, or the application-wide settings. When Sidekick wants to run a tool that is not already allowed, the message composer changes to a stop button and an approval card appears in the detail view for each pending tool call.
Each approval card shows:
- The tool name and what it intends to do
- The arguments it will pass
The card provides the following actions:
| Action | Effect |
|---|---|
| Approve | Runs this tool call once |
| Approve (allow tag) | Runs this tool call and stops asking for this category of tool in the current user-owned chat |
| Approve (allow tool) | Runs this tool call and stops asking for this specific tool in the current user-owned chat |
| Reject | Cancels this tool call; Sidekick receives a rejection notice and can continue |
| Reject with reason | Cancels this tool call and sends a reason to Sidekick |

When you are viewing a parent thread that has active child threads with pending tool calls, the detail view shows a synthetic assistant notice summarizing that descendant approvals are waiting. That notice includes:
- Approve All Pending Calls, which approves every currently pending tool call in the descendant thread tree once
- Reject All Pending Calls, which rejects every currently pending descendant tool call at once
- Allow Pending Tool Types for This Chat, which approves the current descendant calls and adds the currently pending tool tags to the current user-owned chat's allow list; if a pending tool has no tags, Sidekick falls back to allowing that tool by name so the whole pending set is covered
Tip
Use Approve (allow tag) when you trust an entire category of operations for the current investigation. For example, approving the database.update tag lets all matching binary-modification tools run without further prompts in that user-owned chat.
Note
Library-backed chat execution has its own approval surface. For example, running a Library script
in chat appears as the library_python_run tool and can be controlled with the library.run
permission category.
Note
These quick actions are available for user-owned chats. Actor-owned or other system-owned background processes use their own process policy and do not inherit workspace or application permissions.
Tool Permissions...¶
To configure approval requirements globally or per-workspace, open Tool Permissions... from the hamburger menu in the Chat sidebar header, or from Plugins > Sidekick > Configure Tool Permissions....
The dialog is a two-pane splitter. The Tags pane on the left shows a hierarchical tree of tool categories. The Tools pane on the right shows the individual tools that match the tag selected in the left pane. Both panes have Explicit and Effective columns.
- Explicit — the setting you have directly applied to the selected scope (Allow, Ask, or Inherit).
- Effective — the final runtime permission that results after all scopes are resolved. Use this to confirm what will actually happen when a tool runs.
Set a tag or tool to Allow to let it run without approval, Ask to require approval, or Inherit to defer to a broader scope.
The scope selector at the top of the dialog controls which level you are editing:
- This Chat — applies only to the current user-owned chat process
- This Workspace — applies to all chats in the current binary
- All Workspaces — applies as the live application-wide policy for all open and future workspaces
For actor-owned or other system-owned processes, the dialog shows the effective process policy and is read-only.
Clearing errors¶
When a thread encounters an error, the list view displays an error indicator on the thread row. To reset the thread back to idle so you can continue sending messages:
- Right-click the thread in the list and select Clear Error, or
- Open the hamburger menu and select Clear Error.
Background actors¶
As you explore the binary and update your Notebook, you may notice new chats automatically appearing in the thread list, such as:
- Notebook Validation
- Analysis Briefing
These threads are created by Sidekick's background actors. They respond to your actions (like completing a notebook entry or adding an outcome) and run automatically to synthesize information, update the briefing, or validate your analysis.
While these threads are not intended for direct conversation, they show up in the Chat sidebar to provide transparency into Sidekick's background processing. You can open them to see exactly what Sidekick is doing behind the scenes.
The 📋 Analysis Briefings process synthesizes the session briefing as notebook activity accumulates. The 🛡️ Notebook Validation process checks new finding outcomes against existing notebook context.
The current session briefing itself is available separately from the Notebook: open Edit Session Briefing... from the Notebook sidebar hamburger menu, or from Plugins > Sidekick > Edit Session Briefing....
Advanced: viewing and importing raw chat data¶
For debugging and scripting purposes, you can inspect or import the raw JSON representation of any thread.
To view the raw JSON, right-click a thread in the list (or use the hamburger menu) and select View Chat JSON.... The dialog shows the complete thread state including message history, tool call records, and status information.
To import a raw JSON thread, open the hamburger menu and select Import Chat JSON.... Paste a valid thread JSON structure into the dialog and click Import. The imported thread appears as a new entry in the list.
What Sidekick can do in chat¶
When responding to your messages, Sidekick can:
- Query the binary using the Binary Ninja Query Language (BNQL) to find functions, data variables, strings, and cross-references
- Read and write to Indexes to store and retrieve intermediate analysis data
- Record significant findings in the Notebook
- Modify the binary database (rename functions, apply types, add comments) — subject to tool approvals
- Execute Python code inside Binary Ninja to perform custom analysis
- Search its tool library and create new scripted tools to handle novel tasks
Note
Chat performs best when each thread is focused on a specific question or area of the binary. If you want to switch topics, create a new chat for the new topic. Use @-mentions to bring relevant context into each conversation.