Skip to main content
June 4, 2026
TypeScript SDKPython SDKRuby SDKPlugins
TypeScript SDK v0.16.1, Python SDK v0.16.1, Ruby SDK v0.16.1, Plugins v0.7.9

Replay accepts limit and trace IDs together

Passing both limit and traceIds (trace_ids in Python and Ruby) to replay() no longer throws. The SDK now logs a warning and ignores limit, since an explicit trace ID list already determines how many traces replay. This applies to the TypeScript, Python, and Ruby SDKs, so replay scripts that forward both flags keep working instead of crashing.
June 4, 2026
TypeScript SDKPython SDKRuby SDKPlugins
TypeScript SDK v0.16.0, Python SDK v0.16.0, Ruby SDK v0.16.0, Plugins v0.7.7

Replay traces whose function signature changed

When you rename, reorder, or restructure a traced function’s arguments, replay can no longer feed it the inputs recorded against the old shape. replay() in the TypeScript, Python, and Ruby SDKs now takes an adaptInputs (adapt_inputs in Python and Ruby) hook that reshapes each trace’s recorded inputs onto the current signature, so older traces keep running.
await bitfab.replay("my-function", updatedFn, {
  adaptInputs: (inputs, ctx) => [{ userId: inputs[0], limit: inputs[1] }],
})
The hook runs per trace and is isolated per item: if one trace can’t be reshaped, that item alone reports the error and the rest of the run continues.

The assistant recovers replays broken by signature changes

When you iterate on a traced function in your coding agent and a replay fails because the signature drifted since the traces were captured, the Bitfab assistant now recognizes the mismatch instead of treating it as an environment error, and helps you write a small committed input adapter so those traces rejoin the run.
June 3, 2026
DashboardPlugins
Plugins v0.7.6

Spot traces that can’t be replayed

The trace viewer now flags traces that won’t replay against your current code, either because they captured no top-level span or because their recorded inputs no longer fit the function’s current signature. A “Can’t replay” badge appears on dataset rows and in the trace detail view, so you can see at a glance which traces a replay will actually cover before you run it.When your coding agent opens a dataset, the Bitfab plugins pass along your function’s current input shape, and the check runs live against it. Nothing is stored, so the badge can’t go stale.
June 3, 2026
TypeScript SDKPython SDKRuby SDKDashboardPlugins
TypeScript SDK v0.15.0, Python SDK v0.15.0, Ruby SDK v0.15.0, Plugins v0.7.5

Replay results now persist reliably

replay() in the TypeScript, Python, and Ruby SDKs now waits for each replayed item’s trace to be fully persisted before completing the test run. item.traceId (trace_id in Python and Ruby) is a real server trace ID you can use immediately. Previously, a race could leave every trace ID null and the experiments page empty, even though the replay appeared to succeed.Failures are no longer silent. If none of the replayed items’ traces reached the server (for example, the replayed function isn’t instrumented), replay() raises an error explaining why. If only some items fail to persist, those items return a null trace ID with a logged error and the rest of the run comes back intact, so one bad trace costs you one data point instead of the whole run.
June 3, 2026
Plugins
Plugins v0.7.4

Clearer skill routing in plugin flows

The setup, assistant, and update skills now state exactly where each choice leads (“Update all → step 7”, “Skip → stop”), so coding agents follow multi-step flows more reliably instead of inferring the wiring from prose. The update skill on Claude Code also runs as chained sub-skills: each phase hands off directly to the next with the invocation mode attached, removing a class of lost-context routing mistakes in long sessions.
June 3, 2026
DashboardPlugins
Plugins v0.7.3

Live dataset review in Studio

Dataset review now always happens on the dataset’s own page in Studio, which updates in real time as your coding agent adds traces and applies labels. Previously the agent could leave you on a function-level review page that only showed new activity after a manual refresh.That older function-level page now redirects to the function’s most recent dataset, so existing links and older plugin versions keep working.
June 3, 2026
TypeScript SDKPython SDKRuby SDKDashboardPlugins
TypeScript SDK v0.14.0, Python SDK v0.14.0, Ruby SDK v0.14.0, Plugins v0.7.2

Replay by trace IDs no longer truncates

Replaying specific traces by ID previously capped the list at the default limit, silently dropping the rest of your selection: 12 IDs in could mean only 5 replayed, skewing experiment results without warning. An explicit ID list now always replays every trace in it (up to 100).limit and traceIds are now mutually exclusive: limit means “replay my last N traces”, and an ID list speaks for itself. Passing both raises a clear error instead of guessing.
// Replay your last 10 traces
await bitfab.replay("my-function", fn, { limit: 10 })

// Replay exactly these traces (up to 100)
await bitfab.replay("my-function", fn, { traceIds: ["id-1", "id-2"] })
Available in the TypeScript, Python, and Ruby SDKs v0.14.0, with matching trace_ids semantics in Python and Ruby. Older SDK versions get the core fix server-side: explicit ID lists are no longer truncated by a default limit.
June 3, 2026
PluginsDashboard
Plugins v0.7.1

No more duplicate Studio windows

Your coding agent now keeps exact track of its Studio window. Ending a session no longer makes the next Studio command open a second window while the old one lingers: the existing window is reused, and the agent only forgets a window once the browser confirms it actually closed. Refreshing the Studio page mid-session is also safe; the connection re-establishes itself instead of being mistaken for a close.Commands that reconnect to an already-open Studio window now react only to what happens after they connect, so a previously ended session or an earlier run’s activity can no longer end a new command prematurely. If a Studio window disappears without a trace (for example the browser quit entirely), the agent detects that it is unreachable and offers to reopen instead of guessing.
June 3, 2026
Plugins
Plugins v0.7.0

Watch benchmark runs live in Studio

The assistant skill’s benchmark mode is terminal-only by default, but you can now add the studio keyword (for example, benchmark <function> studio, or just ask in natural language to “open studio”) to open Studio’s experiments page and watch each trace’s pass/fail verdict stream in as the replay runs. The default stays terminal-only, so existing benchmark runs are unchanged unless you opt in.
June 2, 2026
Dashboard

Traces are flagged errored only when your code fails

A trace is now marked as errored only when your traced code throws, not when the Bitfab SDK hits a serialization or ingestion error while recording the trace. The error indicator in the trace list now reflects failures in your own functions, so SDK-side noise no longer surfaces as a failed trace.
June 2, 2026
Dashboard

Errored traces open on the failing span

When you open a trace that recorded an error, the trace viewer now jumps straight to the first span that failed instead of starting on the trace root. You land on the error and its message right away, without scanning the span tree for the red marker. Traces without errors open exactly as before, and any span you deep-link to still takes precedence.
June 2, 2026
Dashboard

Errored spans highlighted in the trace viewer

Spans that recorded an error are now flagged directly in the trace viewer. The span tree marks failed spans in red, and the span header shows an Error tag with the error message on hover, so you can spot failures in a trace without opening each span.
June 2, 2026
Python SDKRuby SDK
Python SDK v0.13.5, Ruby SDK v0.12.5

Replay keeps going when an individual trace fails

The Python and Ruby SDKs now isolate per-trace errors during replay(): if one historical trace fails to load or its function raises, that result is marked with an error and the rest of the run still completes, instead of the whole replay aborting. This matches the TypeScript SDK’s behavior, so a single bad trace no longer costs you the entire run.
June 2, 2026
Dashboard

Copy buttons in custom span templates

Custom span templates can now drop in a clipboard icon button next to any field value with {{ value | copyButton | safe }}. Pass a string for the tooltip and accessible label, e.g. {{ span.id | copyButton("Copy span id") | safe }}. The button copies the value (objects and arrays are pretty-printed as JSON), flashes “Copied”, and works inside the template’s isolated shadow DOM without any extra JavaScript or CSS in the template.
June 1, 2026
PluginsDashboard
Plugins v0.6.75

More reliable Studio sign-in

When your coding agent opens Bitfab Studio and you sign in, the Studio tab now connects reliably on the first try. Previously a timing issue could leave a freshly opened session showing “Could not connect to this session” until you re-ran the command; signing in now hands off cleanly to the live session every time.
June 1, 2026
TypeScript SDKPython SDKRuby SDKGo SDKPluginsDashboard
TypeScript SDK v0.13.8, Python SDK v0.13.4, Ruby SDK v0.12.4, Go SDK v0.10.2, Plugins v0.6.74

Error source classification on spans

Span errors now carry an explicit source tag so you can tell whether an error came from your code or from the SDK itself. When your traced function throws, the error is recorded with source: "code". SDK-internal failures (like serialization errors) are tagged source: "sdk". Both types appear in the unified errors field on the span, replacing the previous split between span_data.error and the errors column.All four SDKs support this: set error_source: "code" automatically when a traced function fails.
const result = await bitfab.span("my-function", async () => {
  throw new Error("something went wrong")
  // error_source: "code" is set automatically
})
When the same span is sent multiple times (for example, during retries), errors from all payloads are merged and deduplicated rather than replaced.
June 1, 2026
Dashboard

Connect a database for per-trace snapshots

You can now connect your Postgres database from the new Database page so Bitfab can take an isolated snapshot per trace at replay time. Paste a connection string and activate: replays run against a fresh branch of your database, so they never touch or slow down production. The page shows live status (activating, active, or failed, with a support contact if it can’t reach your database), and you can deactivate at any time from a confirmation dialog.

More reliable trace reads under heavy use

Reading several traces at once through the Bitfab plugin (the read_traces tool) no longer returns intermittent errors when many requests are in flight at the same time. Trace reads and agent-label updates are now more efficient, so larger reads stay fast and reliable.
May 31, 2026
Plugins
Plugins v0.6.73

Quickly add a trace to a dataset

The /bitfab:assistant command has a new lightweight add-trace mode that attaches one or more existing traces to a dataset and stops, without the full label-and-iterate flow. Run /bitfab:assistant add-trace <trace-id> (the function key is inferred from the trace) or just ask your coding agent to “add this trace to a dataset”. It picks or creates the right dataset for you, and if you point it at several traces it makes sure they all belong to the same function before attaching.
May 31, 2026
Plugins
Plugins v0.6.72

Diagnose your tracing setup with /bitfab:setup inspect

A new inspect mode checks whether your Bitfab tracing is healthy: whether you’re authenticated, what’s instrumented in this repo, whether the plugin and SDK are up to date, whether your replay scripts cover every trace function, and whether traces are actually arriving. It then walks the available fixes one at a time, asking before each change. Run /bitfab:setup inspect, or just ask your coding agent something like “why aren’t my traces showing up?”.

Get oriented with /bitfab:setup explain

A new read-only explain mode prints a quick overview of what Bitfab is and what each setup mode does, without authenticating or scanning your code. Run /bitfab:setup explain or ask “what is Bitfab?”.
May 31, 2026
Plugins
Plugins v0.6.71

Smarter Studio window reuse

The Bitfab plugin now reuses your existing Studio window whenever it’s still open, instead of risking a duplicate window or a stale “not responding” prompt. Close the Studio tab and the next action opens a fresh window right away; only a window that’s genuinely unreachable, like after a crash or your machine sleeping, will ask whether to retry or open a new one.
May 30, 2026
PluginsDashboard
Plugins v0.6.70

Clearer Studio connection status

Studio’s connection indicator now tells you exactly what’s happening: “Studio connected” when your agent is live, “Awaiting agent” while it’s away, and “Studio disconnected” if the browser loses its live connection to the session (it reconnects automatically). Reconnecting to a session you already have open now reuses that Studio tab instead of opening a second window.
May 30, 2026
Plugins
Plugins v0.6.69

Benchmark a dataset against your current code

Run /bitfab:assistant benchmark <key> to replay a labeled dataset against your current code without changing anything, then read a pass/fail scorecard that shows which traces still pass, still fail, regressed, or were fixed. Use it to measure where your function stands right now, as a regression baseline or a quick check after unrelated work, instead of starting an experiment loop. You can also just say “benchmark my dataset” in plain language and the assistant routes there.
May 29, 2026
PluginsDashboard
Plugins v0.6.67

More reliable Studio sessions

Studio no longer shows a stray “agent disconnected” popup on the session-complete page. When your agent disconnects mid-session, the reconnect prompt now rejoins your existing Studio session instead of starting a new one. And if you run more than one coding agent in the same project, each keeps its own Studio session instead of overwriting the other’s.
May 29, 2026
Plugins
Plugins v0.6.66

Sign-in URL shown when the browser doesn’t open

When you sign in to Bitfab from your coding agent and the browser doesn’t open automatically, the login flow now prints the sign-in URL so you can open it manually. Previously it told you to visit the URL without showing one.
May 29, 2026
Plugins
Plugins v0.6.65

Simplified plugin login

The setup login flow now uses a single authentication method that works everywhere, including SSH sessions, containers, and cloud IDEs. The separate login headless mode has been removed since the standard login already handles these environments automatically via its server-polled channel.
May 28, 2026
Plugins
Plugins v0.6.63

Seamless login in the assistant flow

Running /bitfab:assistant without being authenticated now logs you in inline through Studio instead of stopping the flow. Previously, unauthenticated users were told to run a separate login command first, breaking the workflow. The assistant now opens Studio’s sign-in page directly and continues automatically once you’ve signed in.
May 28, 2026
PluginsDashboard
Plugins v0.6.60

Plugin login no longer hangs for CLI users

The bitfab init login flow now completes reliably instead of hanging after sign-in. Previously, the published CLI used a query parameter the close page didn’t recognize, so the authentication callback never fired and the CLI waited indefinitely. The close page also now displays “Login complete” instead of the generic “Session Complete” message.
May 28, 2026
PluginsDashboard
Plugins v0.6.58

Experiment results show label annotations

The experiments page now displays the label annotation for each trace instead of the raw function output. This matches how the dataset page already renders traces and makes it easier to scan experiment results for what passed, what failed, and why. Annotations from both human reviewers and the agent’s automated labeling are shown.

Replay script upgrades no longer interrupt the assistant flow

When the assistant detects that your replay script needs an upgrade (missing code-change or experiment-group support), it now edits the script directly instead of launching a separate setup flow. Previously, this would break the assistant’s continuity and drop you to an empty prompt. The upgrade happens inline and the experiment flow continues automatically.
May 28, 2026
Dashboard

Faster disconnect detection in Studio

When an agent closes its Studio session, the browser now shows “disconnected” within milliseconds instead of up to 60 seconds. Previously, the connection status indicator could display “Agent connected” long after the agent process had exited because the server-side heartbeat lingered in cache.

Studio redirects to sign-in instead of showing a session error

Opening a Studio page without being signed in now redirects you to the sign-in page instead of showing a “Could not connect to this session” error. After signing in, you’re returned to the page you originally requested with the session intact.
May 28, 2026
PluginsDashboard
Plugins v0.6.56

Studio commands now open login instead of erroring

Plugin commands that open Studio pages (experiments, trace plans, datasets, template previews) no longer fail with “Not authenticated” when you haven’t logged in yet. Instead, they open Studio directly and redirect you to the sign-in page. After you sign in, you land on the page the command originally requested. For interactive commands like trace plan confirmation and dataset review, the plugin saves your credentials automatically so the bidirectional event channel works normally after login.
May 27, 2026
Plugins
Plugins v0.6.52

Automatic replay script capability detection

The assistant now checks whether your replay script supports the latest experiment features before running experiments. If your script is missing support for code diffs, experiment groups, or trace ID tracking, the assistant offers to upgrade your SDK and regenerate the script in place. You can also choose to continue without the missing features. This replaces the previous behavior where outdated scripts would silently skip features or produce incomplete experiment results.
May 27, 2026
Plugins
Plugins v0.6.51

Dataset mode now continues through failure diagnosis and experiments

Fixed a bug where the assistant’s dataset mode could stop after building the dataset instead of continuing to diagnose failures and run experiments. The flow’s internal instructions contradicted its routing in three places, which could cause the agent to exit early. Dataset mode now reliably progresses through the full pipeline: build dataset, diagnose failures, iterate with experiments, and wrap up.
May 27, 2026
Dashboard

Clear error messages when Studio can’t connect to a session

When Studio fails to connect to an agent session or switch to the correct organization, it now shows a clear error message instead of silently loading in the wrong context. This prevents the confusing state where traces appear missing because Studio was looking in a different organization than the one your plugin authenticated against.
May 27, 2026
DashboardPluginsTypeScript SDKPython SDKRuby SDK
Plugins v0.6.50, TypeScript SDK v0.13.6, Python SDK v0.13.3, Ruby SDK v0.12.3

Live experiment streaming

The experiments page now streams results in real time as replays complete. When the assistant runs experiments, it opens the experiments viewer before the first replay starts and new results appear automatically via server-sent events as each test run finishes. Previously, the experiments page only opened after all replays completed.All three SDKs now accept an experimentGroupId parameter on replay() that groups multiple test runs into a single experiment batch:
// TypeScript
await client.replay("my-function", traceIds, {
  experimentGroupId: "550e8400-e29b-41d4-a716-446655440000",
})
# Python
await client.replay("my-function", trace_ids,
    experiment_group_id="550e8400-e29b-41d4-a716-446655440000")
# Ruby
client.replay("my-function", trace_ids,
  experiment_group_id: "550e8400-e29b-41d4-a716-446655440000")
The experiments page accepts ?experimentGroupId= as a query parameter, and falls back to ?testRunIds= for replay scripts that haven’t been updated yet.
May 27, 2026
Plugins
Plugins v0.6.49

Inline template editing during labeling

You can now edit trace view templates in chat while labeling traces, without leaving the dataset review page. When you ask the assistant to change how a span type renders (e.g. “edit the LLM template”), it reads and updates the template inline using MCP tools, and the dataset page re-renders automatically. Previously, template editing required invoking the setup flow, which navigated Studio away from the dataset and broke the labeling session.
May 27, 2026
Dashboard

Auto-update trace plan in Studio

When you modify your span capture setup and create a new trace plan, Studio now automatically navigates to the updated plan. Previously, you had to manually refresh or re-navigate to see the latest version after making changes to the capture configuration.
May 27, 2026
Plugins
Plugins v0.6.48

Investigate mode continues through the full pipeline

When you run the assistant in investigate mode, the flow now continues through diagnosis and experiments after building a dataset, matching how dataset mode already works. Previously, investigate mode stopped after dataset building, requiring you to restart in experiment mode to iterate on fixes. All assistant modes now serve as entry points into the same pipeline, converging at wrap-up regardless of where they start.
May 27, 2026
Plugins
Plugins v0.6.47

Graceful Studio close on flow exit

When the assistant finishes a flow (wrap-up, early stop, or sub-mode completion like dataset-only), the Studio tab now closes gracefully instead of lingering in a disconnected state. The agent navigates to a close route that lets the Studio clean up before the background process is terminated.

Better error messages when agents pass wrong CLI arguments

Plugin commands now validate arguments against a declarative schema before executing, catching common agent mistakes like invented --flag syntax, missing arguments, or invalid UUIDs. When a command receives bad input, it prints a usage string showing the expected arguments and a clear error message, so the agent can self-correct on the next attempt.
May 27, 2026
Dashboard

Reconnect guidance when Studio loses agent connection

When your coding agent disconnects from Studio, a popup now appears after 30 seconds with a copiable prompt you can paste into your agent to reconnect. The popup includes your session ID so the agent can rejoin the same session. If you dismiss it, the popup reappears with increasing intervals, and it auto-dismisses if the agent reconnects on its own.
May 27, 2026
Plugins
Plugins v0.6.46

Dataset mode continues to diagnosis and experiments

When you run /bitfab:assistant dataset, the flow now continues past labeling into Phase 4 (diagnosis and experiments), matching the behavior of the full /bitfab:assistant flow. Previously, dataset mode stopped after labeling, requiring you to restart in the default mode to run experiments on the same dataset.
May 27, 2026
PluginsDashboard
Plugins v0.6.45

Live experiment verdicts in Studio

When your replay script returns trace IDs (requires SDK v0.13.5+), the assistant now opens the experiments page in Studio before running evaluations, so you can watch pass/fail verdicts populate in real time. If your SDK predates trace ID support, the assistant prompts you to update and falls back to showing evaluation results as text in the agent.
May 26, 2026
Plugins
Plugins v0.6.43

Code-change diffs in the experiment viewer

When the assistant runs experiments, it now captures before-and-after file snapshots for every edit and attaches them to the replay. The experiment viewer can then display the literal code change alongside pass/fail results, so you can see exactly what was tried in each iteration. Existing replay scripts that predate this feature continue to work; the assistant detects whether the script supports the new --code-change flag and gracefully skips the metadata if it doesn’t.
May 26, 2026
TypeScript SDKPython SDKRuby SDKDashboard
TypeScript SDK v0.13.5, Python SDK v0.13.2, Ruby SDK v0.12.2, Plugins v0.6.42

Replay results include trace IDs

Each replay result item now includes a traceId (or trace_id in Python/Ruby) that links directly to the server-side trace created during replay. Previously, matching a replay result back to its trace in the dashboard required heuristics based on input similarity. Now you can navigate straight to the trace.
const result = await bitfab.replay("my-function-key", myFunction, {
  limit: 5,
});
for (const item of result.items) {
  console.log(`Trace: ${item.traceId}`);
}
Available in TypeScript SDK v0.13.5, Python SDK v0.13.2, and Ruby SDK v0.12.2.
May 26, 2026
DashboardPlugins
Plugins v0.6.39

Experiments distinguish errored traces from pending

When a replay trace fails during execution (before it can be graded), the experiments page now shows it as “errored” instead of lumping it in with pending traces. Errored traces appear with a red “Error” badge, a red row tint, and a dedicated segment in the progress bar. The pass-rate pill also now shows context-appropriate states: “N errored” when all traces errored, “N pending” with a spinner when grading is in progress, and “X/Y so far” for partially graded runs.
May 26, 2026
Plugins
Plugins v0.6.38

Assistant reviews existing dataset traces before searching for new ones

When you pick a dataset that already has traces, the assistant now goes straight to the review page instead of asking how to source new candidates. Previously, datasets with unlabeled (but present) traces were treated like empty datasets, which skipped past the traces you already had. Empty datasets still get the “what kind of traces should I find?” prompt as before.
May 26, 2026
Dashboard

Experiments page updates after replay completion

The experiments page now refreshes automatically when a replay finishes and as labels are applied. Previously, completing a replay didn’t trigger an update, so the page could appear empty until manually refreshed. Summary counts and individual trace labels now appear as soon as they’re available.
May 26, 2026
Plugins
Plugins v0.6.37

Studio session recovery after agent interruptions

The plugin assistant now automatically reconnects to an existing Studio browser session when the background polling process is interrupted (for example, by a long conversation triggering context compaction). Previously, losing the background process meant the assistant would open a duplicate Studio window. Now it resumes the existing session seamlessly, keeping the same browser tab and session state.
May 26, 2026
PluginsDashboard
Plugins v0.6.35

Experiment and dataset tools for the assistant flow

The plugin assistant can now work with experiments and datasets directly. Two new MCP tools, list_experiments and get_experiment_traces, let the assistant list recent experiments for a function and drill into individual trace verdicts (fixed, regressed, still-passing, still-failing). The search_traces tool also now accepts testRunId and datasetId parameters, so you can scope trace searches to a specific experiment run or dataset without manual filtering.
May 26, 2026
Plugins
Plugins v0.6.34

Fixed investigate mode opening a broken Studio page

Running /bitfab:assistant investigate <key> no longer opens Studio to a non-existent page. The investigate mode now lands on the Studio root, which loads correctly. The investigation itself (trace reading, code exploration, findings summary) was unaffected since it runs via tool calls, not Studio navigation.
May 26, 2026
PluginsDashboard
Plugins v0.6.33
Clicking a trace plan link from the plugin assistant now opens the trace plan inside the Studio session. Previously, the link pointed to a standalone route outside of Studio, which bypassed the authenticated Studio context.
May 26, 2026
Dashboard

Experiment results stream in real time

Running experiments on a dataset no longer blocks until every test finishes. The experiments page opens immediately and results stream in trace by trace: the progress bar fills, pass/fail counts update, and trace rows appear as each test completes. If background execution fails, the run is marked as failed and the page updates accordingly instead of getting stuck on “pending.”
May 26, 2026
Dashboard

Trace list loads reliably for high-volume functions

The traces page now loads correctly on the first visit for functions with very high trace creation rates. Previously, real-time update events could interfere with the initial page load, causing the trace list to appear empty until you navigated away and back.
May 26, 2026
PluginsDashboard
Plugins v0.6.32

Reliable Studio navigation during assistant sessions

Studio navigations that include query parameters (such as opening the experiments page with specific test run IDs) no longer time out with “not responding.” The same fix also ensures that navigating to the same page with different parameters is recognized correctly, so the assistant flow proceeds without interruption.
May 26, 2026
Dashboard

Dataset traces now stream in real-time in Studio

Traces added to a dataset while viewing it in Studio now appear immediately without a page refresh. A recent migration to Studio’s route tree accidentally dropped the real-time event connection, so newly added traces were invisible until you reloaded.
May 26, 2026
Plugins
Plugins v0.6.29

Fixed experiment mode navigation

The plugin assistant’s experiment mode now correctly opens the experiments page. Previously, it attempted to navigate to a non-existent per-function experiments route.
May 26, 2026
Dashboard

Studio reconnects automatically after sleep

Studio connections now recover automatically when your laptop wakes from sleep. Previously, closing your lid and reopening could leave the session unresponsive until you manually refreshed the page.
May 25, 2026
Dashboard

Dataset page shows errors instead of misleading empty state

The dataset review page now displays a clear error message when traces fail to load, instead of incorrectly showing “No traces yet.” This helps you quickly identify loading failures, such as viewing a dataset while signed into the wrong organization.
May 25, 2026
TypeScript SDKDashboardPlugins
TypeScript SDK v0.13.4, Plugins v0.6.27

Per-trace DB branching for replay (alpha)

Replay can now run against the database state at the moment a trace was recorded, not your current production database. This raises fidelity for agents whose behavior depends on stored state, like a refund decision that read a since-cancelled order or a retrieval agent that saw last week’s index. Available in the TypeScript SDK; backed by Neon preview branches on the Bitfab service.Wire it up:
import { Bitfab } from "bitfab"

const bitfab = new Bitfab({
  apiKey: process.env.BITFAB_API_KEY,
  dbSnapshot: { provider: "neon" },
})

const env = new Bitfab.ReplayEnvironment()

await bitfab.replay("refund-agent", async (orderId) => {
  const url = env.active ? env.databaseUrl : process.env.DATABASE_URL
  const pool = new Pool({ connectionString: url })
  return decideRefund(orderId, pool)
}, { environment: env })
Alpha caveats. Single-tenant in this release; per-org Neon project configuration and the Ardent customer-LSN to replica-LSN mapping land in a follow-up. Reach out if you want it turned on for your account.
May 25, 2026
Dashboard

Studio sessions survive page refreshes

Refreshing the Studio tab no longer kills your coding agent’s session. Previously, a browser refresh was indistinguishable from closing the tab, so the plugin would immediately tear down the connection. Now the plugin waits up to 10 seconds for the page to reload before ending the session, so you can refresh freely without interrupting your workflow.
May 25, 2026
Plugins
Plugins v0.6.26

Plugin login respects project-local credential isolation

When your project has a .bitfab/credentials.local.json file (used to isolate credentials per project), logging in now writes the new API key to that file instead of the global credentials store. Previously, login always wrote to ~/.config/bitfab/credentials.json, which meant the project-local file stayed empty and the plugin fell back to the global key, defeating the isolation.
May 25, 2026
PluginsDashboard
Plugins v0.6.25

Studio auto-switches org to match the plugin session

When your browser’s active org differs from the org bound to the plugin’s API key, Studio now detects the mismatch and automatically switches to the correct org on load. This fixes the “Awaiting agent” stuck state that could occur when you belong to multiple organizations and your browser happened to be on a different one than your plugin.If you’re not a member of the session’s org, the plugin now cleanly aborts and tells you why, instead of hanging indefinitely.
May 25, 2026
Dashboard

Studio agent connection recovers after laptop sleep

Studio now correctly restores the agent connection indicator after your laptop sleeps and wakes. Previously, the “agent disconnected” banner could get stuck even though the agent had successfully reconnected. The fix ensures heartbeat tracking refreshes on every poll and that the browser verifies the actual connection state when resuming after a gap.
May 25, 2026
PluginsTypeScript SDK
Plugins v0.6.23, TypeScript SDK v0.13.3

TypeScript SDK is now @bitfab/sdk

The TypeScript SDK package has moved from bitfab to @bitfab/sdk. New installs should use the scoped name:
npm install @bitfab/sdk
import { Bitfab } from "@bitfab/sdk";
The old bitfab package continues to work but now prints a deprecation warning on import. Running the plugin’s update command (/bitfab:update) detects the legacy package and warns you to switch, even if the version number is current.
May 23, 2026
PluginsDashboard
Plugins v0.6.21

Studio is now the single browser surface for all plugin flows

Every plugin CLI flow (login, trace plan confirmation, dataset review, template preview) now opens inside Studio instead of launching a separate browser window. If Studio is already open, the plugin navigates it in place rather than opening a new window. This means fewer browser tabs, a consistent UI, and the ability to stay in one window while working with the assistant.Headless login is now available for environments where a browser can’t reach your terminal (SSH, cloud IDEs, CI). Visit /studio/auth/claude in any browser, sign in, copy the token, and paste it back into your coding agent.Closing Studio during a trace plan confirmation now cleanly cancels the operation instead of leaving the CLI in an error state.
May 23, 2026
PluginsPlugin Lib
Plugins v0.6.20

Automatic package rename in update flow

Running /bitfab:update now detects the legacy bitfab npm package and offers to switch it to @bitfab/sdk. The update flow removes the old package, installs the new one, and rewrites imports in your source files. If you’re already on @bitfab/sdk, nothing changes; the flow works as before.
May 22, 2026
Plugins
Plugins v0.6.19

Studio URL guard and auth verification

Studio now always opens at the correct /studio path. Previously, certain launch conditions could cause the Studio window to open at the site root instead of the Studio interface. A path guard now normalizes the URL before the browser window opens.The plugin’s auth status check now verifies your API key against the current server. If you switch between servers (e.g., local development to production), the status command correctly reports that re-authentication is needed instead of showing a stale “authenticated” state.
May 21, 2026
DashboardPlugins
Plugins v0.6.18

Live-streaming dataset pages in Studio

When the Studio assistant creates or picks a dataset, the dataset review page now opens immediately instead of waiting for all traces to be labeled and attached first. Traces appear on the page in real time as the agent finds, labels, and attaches them. Label changes on traces already in a dataset also update live, so you can watch rows move between the “Agent labeled,” “Labeled,” and “Unlabeled” sections without refreshing.If the page is empty while the agent is still working, a “Building your dataset” indicator shows that traces are on the way.
May 20, 2026
Dashboard

Trace plan review page scrolls

The trace plan review page now scrolls when a plan has more captured nodes than fit on screen. Before, long plans clipped the Advanced selection toggle and any inline error messages below the fold; opening a plan with around 40 captured nodes now scrolls cleanly through the full call tree.
May 20, 2026
TypeScript SDKPlugins
TypeScript SDK v0.13.2, Plugins v0.6.16

TypeScript SDK available as @bitfab/sdk

The TypeScript SDK is now published under the scoped package name @bitfab/sdk in addition to the existing bitfab package. Both names resolve to the same code and will stay in sync on every release. If you prefer scoped package names for clarity in your package.json, you can switch your import at any time:
npm install @bitfab/sdk
No code changes are required beyond updating the package name in your imports. Both import { Bitfab } from "bitfab" and import { Bitfab } from "@bitfab/sdk" work identically.
May 20, 2026
TypeScript SDKPython SDKRuby SDKPlugins
TypeScript SDK v0.13.1, Python SDK v0.13.1, Ruby SDK v0.12.1, Plugins v0.6.14

SDK serialization hardening

Trace spans now ship reliably even when function inputs or outputs are difficult to serialize. Objects with circular references, oversized payloads (over 512 KB), or classes that throw during serialization no longer cause lost spans. Instead, the SDK replaces the problematic value with a descriptive <unserializable: ClassName (reason)> stub so the span still appears in your traces with full timing and metadata.This fix applies to the TypeScript, Python, and Ruby SDKs. No code changes are needed on your side; update to the latest SDK version to get the improvement automatically.
May 18, 2026
PluginsDashboardPlugin Lib
Plugins v0.6.13

Plugin can query Studio browser state

Plugins can now check whether the Studio browser tab is connected and which page is currently active via the new getStudioState function. This lets the plugin make smarter decisions before navigating, for example skipping a navigation command when Studio is already on the target page, or surfacing a connection warning when the browser tab has been closed.
May 18, 2026
PluginsDashboard
Plugins v0.6.12

Studio crash recovery and agent navigation guardrails

Studio now shows a recoverable error screen when a runtime error or unexpected crash occurs during a session. Instead of a blank page or a full 404, you see a “Try again” button that retries without losing your session context.Agent-initiated navigation is now validated against a known route whitelist. When an agent tries to navigate to an invalid or out-of-scope path, it receives an immediate navigation-blocked event with a reason string instead of waiting for a 12-second timeout. This helps agents self-correct faster when a requested page doesn’t exist.
May 18, 2026
PluginsPlugin Lib
Plugins v0.6.11

Studio stays connected through long conversations

The Bitfab plugin now persists the link between your coding agent conversation and your Studio session. Previously, when a long conversation triggered context compaction, the agent lost track of which Studio window it had opened, requiring you to reopen Studio manually. Now the mapping is written to disk and recovered automatically after compaction, so Studio commands continue working seamlessly in extended sessions.
May 18, 2026
Dashboard

Code change diffs in experiments

When an experiment replays traces against a code change, you can now view the exact diff that was tested. Click the file stats on any experiment card or the code-change pill in the trace detail header to open a side-by-side diff modal. The modal also shows how the dataset reacted overall (fixed, regressed, still passing, still failing) or, when opened from a single trace, whether that specific trace flipped.
May 18, 2026
Dashboard

Fixed plugin login falling through to manual paste flow

Signing in to a Bitfab plugin (Claude Code, Cursor, or Codex) via the browser now reliably completes the automatic handoff back to your terminal. Previously, the login page could lose the callback parameters during a redirect, causing every login to fall through to the manual “copy and paste this token” flow even when the browser and terminal were on the same machine.
May 18, 2026
Plugins
Plugins v0.6.9

Investigate a trace function with /bitfab:assistant

Run /bitfab:assistant investigate [<key>] to characterize an issue in a trace function without going through the full assistant flow. The agent reads recent traces and your code based on what you describe, then offers three follow-ups: stop with an in-chat summary, save a written report under .bitfab/analysis/, or hand off to dataset building when the findings include reproducible failures worth labeling. The function key is optional; when omitted, the agent picks it from your description or asks.
May 17, 2026
PluginsDashboard
Plugins v0.6.8

Agent-initiated Studio session close

Agents can now programmatically end a Studio session when their work is complete. The closeStudio() helper sends a completion event with an optional message, and the browser automatically closes or shows a “Session Complete” screen with the agent’s message. This replaces the need for users to manually click “End session” when the agent is done.
May 17, 2026
PluginsDashboard
Plugins v0.6.7

Trace plan confirmation lands inside Studio

The Bitfab plugin’s trace-plan confirmation page (where you review which spans your function will capture) now renders inside your existing Studio tab during /bitfab:setup instead of spawning a second browser window. Studio’s header and agent indicator stay visible while you decide; Confirm or Cancel keeps the tab open for the rest of the flow, no more orphan windows.If no Studio is running (you invoked /bitfab:setup outside an /bitfab:assistant session), the confirmation falls back to the standalone chromeless window as before.
May 17, 2026
TypeScript SDKPython SDK
TypeScript SDK v0.13.0, Python SDK v0.13.0

Annotate a closed trace from any process

The TypeScript and Python SDKs now expose a detached client.getTrace(id) handle that lets you add context, merge metadata, or set the session id on a trace after its root span has closed. The handle works from any process, thread, or agent that knows the trace id, with no shared in-memory state. Useful when a downstream worker or a forked AI agent needs to attach information to the original conversation’s trace.
// From any process, by trace id:
const trace = client.getTrace(traceId);
await trace.addContext({ refund_status: "approved" });
await trace.setMetadata({ region: "us-west" });
await trace.setSessionId("session_xyz");
Available in bitfab v0.13.0 for TypeScript and Python.
May 17, 2026
Plugins
Plugins v0.6.6

Smarter Studio session management

The assistant flow now reuses an existing Studio session instead of opening a new browser window each time. If the Studio becomes unresponsive (tab closed, page crashed), the agent detects this within 12 seconds and offers options to refresh the tab or open a fresh session.
May 17, 2026
PluginsDashboard
Plugins v0.6.5

Live activity progress in Studio

Studio now shows which phase the assistant is working on in real time. As the skill progresses through steps like identifying the trace function, building a dataset, or running experiments, the header displays the active phase name with a live elapsed timer. When one phase completes and the next begins, you see the previous phase’s duration before it transitions.If the agent disconnects or crashes mid-phase, the activity indicator automatically resets within 30 seconds instead of showing stale state indefinitely.
May 17, 2026
PluginsDashboard
Plugins v0.6.4

Open a trace plan from inside /bitfab:assistant

Ask the assistant to “open the trace plan for X” (or “show me what’s captured”) and it now routes your open Studio tab to that function’s most recent trace plan in place. The Studio shell stays mounted around the plan, so your agent session, header, and connection indicator persist across the navigation, and no new browser tab pops up. The canonical /trace-plan/[id] URL still works as a standalone shareable link outside Studio.
May 16, 2026
Dashboard

Click any trace while reviewing a dataset

Fixed a bug that blocked clicks while a trace detail was open. You can now switch traces or press Done without closing the open one first.
May 16, 2026
DashboardPlugins
Plugins v0.6.2

Redesigned trace planner

The trace planner now leads with what you actually need to know: a validation summary at the top that calls out anything blocking replay (live writes inside captured spans, missing samples, disconnected roots), then a flow diagram of the captured spans and a sample-trace preview of how the recorded trace will look in the viewer. The legacy two-pane tree picker is still there, tucked behind an Advanced selection toggle for power-users. Confirm and Cancel still flow through the same Cmd+Enter / Esc handoff, so muscle memory carries over.
May 16, 2026
PluginsDashboard
Plugins v0.6.1

Live agent connection indicator in Studio

Studio now shows a real-time connection status in the header. A green dot with “Agent connected” appears when the coding agent is actively polling, and transitions to a gray dot with “Awaiting agent” if the agent disconnects. The indicator updates instantly when the agent reconnects, with no page refresh needed.

Mutual presence detection for plugins

The agent plugin now receives browserConnected in its poll response, indicating whether a user has Studio open in the browser. This enables plugins to adapt their behavior based on whether someone is actively watching the session.
May 16, 2026
Plugins
Plugins v0.6.0

Studio is now the default assistant mode

The /assistant skill now opens Studio automatically on every invocation. You no longer need to pass a studio argument to get the companion browser surface. Studio is always there, from start to finish.

Studio opens directly at the relevant page

When you start in dataset or experiment mode (/assistant dataset <key> or /assistant experiment <key>), Studio now opens directly at that function’s datasets or experiments page instead of opening at the root and navigating after. This shaves a few seconds off each focused session and puts you in context immediately.
May 16, 2026
Dashboard

Logout redirects to sign-in page

Signing out no longer lands on a blank page. You’re now redirected to the sign-in page, where you can immediately log back in or close the tab.
May 16, 2026
Plugins
Plugins v0.5.17

Session log capture fix and standalone opt-in

Session log capture now works correctly after opting in during setup. A configuration mismatch previously caused the plugin to silently skip session capture even when you’d consented, so no session data was being collected. You can also now toggle session log capture on or off by running /bitfab:setup session-logs, a standalone mode that doesn’t require authentication.
May 16, 2026
Dashboard

Trace viewer skips empty spans on open

Opening any trace now lands on the first span that has data instead of a blank trace root or an empty span. This applies across the dashboard: trace detail pages, the labeling panel, the experiments comparison view, the dataset detail panel, and the template preview studio. The hard template filter still hides non-matching spans; you just no longer have to scroll past empty ones to see meaningful content.
May 16, 2026
Dashboard

Studio navigation events for coding agents

When you navigate between pages in Studio, the coding agent now receives real-time navigation events with the current path. This gives the agent immediate awareness of where you are in Studio, so it can tailor its responses and actions to the page you’re viewing without needing to ask.
May 16, 2026
PluginsDashboard
Plugins v0.5.16

Studio sign-in stays within the Studio shell

When your coding agent opens Studio and you’re not signed in, you now see a branded sign-in page inside the Studio window instead of being redirected to the main Bitfab login. The session context persists across the sign-in flow, so the agent picks up exactly where it left off once you authenticate. The CLI receives real-time auth-required and authenticated events, letting it wait for sign-in without polling.
May 16, 2026
Plugins
Plugins v0.5.15

Accurate offline SDK update checks

The plugin’s session-start update check now always reports the correct latest SDK versions. Previously the baked version snapshot could lag behind by one release, causing the plugin to miss update notifications or report you were up to date when a newer SDK was available.
May 15, 2026
Plugins
Plugins v0.5.14

Hill-climb from existing labels in /bitfab:assistant

When you start a new dataset for a function that already has validated labels, the assistant now offers a Reuse option that seeds the dataset with those labels instead of starting from scratch. Pick Reuse when you’re spinning up a different cut for experimentation but want to keep the labeling work you already trust. Define and Open are still there for the from-scratch and broad-sample cases.

Replay verdicts persist with a coverage gate

After a replay in Phase 5, the assistant writes its pass/fail verdicts on the replay traces through a bundled script that verifies every replay trace got a verdict before moving on. Previously a verdict could die mid-session if the agent forgot to persist it; now the script enforces full coverage before continuing. If a trace is genuinely ambiguous, you can record it as an explicit skip rather than leaving it silently unverdicted.
May 15, 2026
PluginsDashboard
Plugins v0.5.13

Plugins surface which Bitfab org they’re writing to

The plugin MCP now flags which Bitfab org it reads and writes from, so you’ll catch mismatches between your project’s BITFAB_API_KEY and the org open in your Studio tab before traces land somewhere unexpected. Coding agents now call get_api_key_context at the start of a plugin MCP session, and again whenever you mention data you just wrote isn’t visible in Studio. The same tightening applies to the remote MCP server in the Dashboard for direct (non-plugin) callers.
May 15, 2026
Ruby SDK
Ruby SDK v0.12.0

Ruby SDK: skip child spans during replay

When you replay historical traces through client.replay(...), you can now have child spans return their recorded outputs instead of running real code. Three strategies control which children get short-circuited:
  • mock: "none" (default) reruns every child span as before.
  • mock: "all" returns historical output for every child.
  • mock: "marked" returns historical output only for spans declared with mock_on_replay: true, and runs everything else real.
class Pipeline
  include Bitfab::Traceable
  bitfab_function "pipeline"

  bitfab_span :classify, type: "llm", mock_on_replay: true
  def classify(text)
    # paid LLM call
  end

  bitfab_span :process, type: "agent"
  def process(text)
    classify(text)
  end
end

client.replay(Pipeline.new, :process,
  trace_function_key: "pipeline",
  mock: "marked")
Use mock: "marked" to iterate on agent logic without paying for the marked child calls on each replay. Use mock: "all" for the cheapest possible replay (only the root function runs real code). Brings the Ruby SDK to parity with the existing mock option in the Python and TypeScript SDKs.

Ruby SDK: fluent wrapper for shared trace function keys

client.get_function(key) returns a wrapper bound to that trace function key, so you can wrap multiple methods or classes without repeating the key on every call.
fn = Bitfab.client.get_function("openai")
fn.wrap(OpenAI::Client, :chat, name: "Chat", type: "llm")
fn.wrap(OpenAI::Client, :embeddings, name: "Embed", type: "llm")
Matches client.get_function in the Python SDK and client.getFunction in TypeScript.
May 14, 2026
DashboardPlugins

Accurate experiment counts with multi-label traces

Experiment pass/fail counts now correctly deduplicate traces that have labels from multiple sources (human review, approved agent, unapproved agent). Previously, a trace with both a human and an agent label could be double-counted in experiment totals. The viewer now picks the highest-priority label per trace: human labels take precedence over approved agent labels, which take precedence over unapproved ones.

Experiments auto-label replayed traces

When you run an experiment through the assistant, replayed traces now receive agent labels automatically. The experiment viewer shows pass/fail results immediately after a replay completes, without requiring a manual labeling step first.
May 14, 2026
PluginsTypeScript SDKPython SDK
Plugins v0.5.11, TypeScript SDK v0.12.2, Python SDK v0.12.1

Replay with mocks: shared-key spans return the correct output

Fixed an off-by-one in the replay mockTree when the function under test and one of its children share one traceFunctionKey (the canonical getFunction(key).withSpan(...) pattern). The marked child was returning the root’s historical output instead of its own. The mockTree is now keyed by (traceFunctionKey, spanName, callIndex), which also unblocks recursive same-key replays.
const summarize = bitfab.getFunction("summarize-thread")
const buildTranscript = summarize.withSpan(
  { name: "buildTranscript", mockOnReplay: true },
  async (id) => db.getTranscript(id),
)
const processSummarize = summarize.withSpan(
  { name: "processSummarize" },
  async (id) => generate(await buildTranscript(id)),
)
// `mock: "marked"` now returns buildTranscript's own historical
// transcript string, not processSummarize's full result object.

Mocked non-async Promise-returning functions stay Promises

If you wrap a function fetchX() { return fetch(...) } (no async, but returns a Promise) and mock it during replay, the mocked return is now a Promise, not a raw value. Downstream .then(...) callers no longer crash. Detected at wrap time.

/bitfab:assistant experiments auto-pick parallel or serial

Phase 5 of the assistant skill now checks whether subagent worktrees inherit bypass permissions before forking parallel experiments. If permissions.defaultMode: "bypassPermissions" is set in committed .claude/settings.json or ~/.claude/settings.json, experiments fork to worktree-isolated subagents; otherwise they run serially in the main agent. Cursor and Codex always run serial since they don’t support worktree-isolated subagent calls.
May 14, 2026
Dashboard

Organization switcher fix

Fixed the organization switcher dropdown not appearing in the header. After upgrading to Clerk v7, the switcher silently returned no memberships, making it impossible to switch between teams. The switcher now reliably shows all your organizations, with your personal workspace listed first and the rest sorted alphabetically.
May 14, 2026
PluginsDashboardPlugin Lib
Plugins v0.5.10

Live agent activity in Studio

The Studio home page now shows what your coding agent is doing in real time. While the assistant is working, the agent card highlights green and displays the current tool action (e.g., “Reading traces…”, “Creating grader…”). When the agent finishes or goes idle, the card fades back to its neutral state. Activity persists across page navigation within Studio, so you won’t lose track of the agent’s progress.
May 14, 2026
PluginsDashboardPlugin Lib
Plugins v0.5.9

Studio detects which coding agent opened it

When Studio is launched from Cursor or Codex, the UI now shows that agent’s logo and name instead of defaulting to Claude Code. The welcome page, header, and “Return to” button all reflect the agent that started the session.
May 13, 2026
PluginsTypeScript SDKDashboard
Plugins v0.5.8, TypeScript SDK v0.12.1

Replay failure handling in the assistant skill

/bitfab:assistant now separates infrastructure failures (missing DB rows, rejected writes) from real regressions during replay, and keeps unreplayable traces out of the pass-rate. When a child span fails environmentally, it suggests either flipping the span to mockOnReplay or pointing replay at the trace’s source environment.

Replay mocks return the correct child span’s output

Fixed ordering bugs in mock: "marked" that caused a marked child span to return a sibling’s historical output instead of its own. Upgrade to TypeScript SDK 0.12.1 if you’re using mock: "marked" on 0.12.0.
May 13, 2026
PluginsTypeScript SDKPython SDKDashboard
Plugins v0.5.7, TypeScript SDK v0.12.0, Python SDK v0.12.0

Mock child spans during replay

When you replay a recorded trace against new code, child spans sometimes fail locally for reasons unrelated to what you’re iterating on, like a paid API key you don’t have set, a flaky external service, or a production database row that isn’t seeded in your local environment. Replay now supports skipping those children and returning their recorded outputs instead, so the root function can still run.Pass a mock strategy to replay() to control it. "none" (default) runs every child for real. "all" returns the historical output for every descendant. "marked" only short-circuits descendants you’ve tagged at definition time, leaving everything else to run real, which is the iteration-friendly mode.Tag a span with mockOnReplay: true in TypeScript or mock_on_replay=True in Python:
bitfab.withSpan("fetch-article-from-db", { mockOnReplay: true }, async (id) => db.find(id))
@bitfab.span("fetch-article-from-db", mock_on_replay=True)
def fetch_article_from_db(article_id): ...
Then replay with mock: "marked" (TS) or mock="marked" (Python). The flagged child returns its recorded output and downstream spans run real code, so you can iterate on the analysis or formatting steps without standing up the upstream dependency.When the assistant skill is replaying a function and a child span fails environmentally, it’ll now suggest this fix directly. Full docs: TypeScript SDK and Python SDK reference under “Mocking child spans during replay”.
May 13, 2026
Plugins
Plugins v0.5.6

Reliable focus restoration for macOS terminals

When clicking “Return to coding agent” in Studio, focus now reliably returns to the correct terminal app. The previous approach could target the wrong window if the terminal’s environment was modified (common inside Claude Code). The plugin now identifies your terminal by walking the process tree to find the parent application. For iTerm2 users with multiple windows, focus targets the exact session pane.
May 13, 2026
PluginsDashboard
Plugins v0.5.5

Persistent Studio session for the assistant flow

Add studio to any /bitfab:assistant invocation (e.g., /bitfab:assistant studio) to keep a single Studio window open for the entire flow. Dataset review and experiment results open inside the same window instead of launching separate ones, so you stay in one place while iterating. Without the studio argument, the flow works exactly as before.
May 13, 2026
PluginsDashboard
Plugins v0.5.4

See which template renders each span at a glance

Iterating on the right template is faster when you can tell which one runs for the span you’re looking at. In the template preview, click or arrow-key through any span in the trace viewer and the matching card in the left rail lights up in that span’s color — that’s the template to edit.

Know when your coding agent is mid-edit

Stay out of the agent’s way and watch its work land in context. When your agent saves a template, the studio names who is editing (Claude Code, Cursor, or Codex), pulses the affected card in the rail, and outlines the exact region inside the rendered span — even on instant saves, so you don’t miss it.
May 12, 2026
PluginsDashboard
Plugins v0.5.2

Chat session capture

Bitfab plugins can now capture your coding-agent chat sessions and send them to the dashboard. Session capture is opt-in: enable it by setting BITFAB_CAPTURE_SESSIONS=true or adding "captureSessions": true to ~/.config/bitfab/config.json. Nothing is captured until you explicitly turn it on.Once enabled, sessions are only recorded after you invoke a Bitfab tool or slash command in the same conversation, so ordinary non-Bitfab conversations are never captured. Works across Claude Code, Cursor, and Codex.

Cross-platform focus restoration

When a plugin opens a browser window (OAuth login, Studio preview), focus now returns to your terminal or editor automatically on Linux and Windows. Previously this only worked on macOS. If platform tools aren’t available (e.g., Wayland on Linux), the handoff completes normally without focus restoration.
May 12, 2026
PluginsDashboard
Plugins v0.5.1

Studio connection errors surface immediately

When your coding agent opens the Studio preview, connection problems (expired API key, network timeout) are now caught before the browser window opens. Previously, errors could surface mid-session after you’d already started editing.
May 12, 2026
PluginsDashboard
Plugins v0.5.0

Click-to-target template editing

In the template preview studio, you can now click directly on a rendered span to tell your coding agent exactly which region you want changed. No more “make the user message smaller” guesswork: point at the element and describe the change.

Live preview auto-refresh

Templates saved in the studio now re-render in the preview automatically. Previously, you had to reload the page to see your changes.

Template reference for coding agents

The new get_template_reference MCP tool returns a catalog of every editable region in the standard template, so coding agents can discover what’s available without you having to describe it.
May 12, 2026
Dashboard

Template preview is faster on large functions

The template preview page loads significantly faster for functions with many spans. Pages that previously made dozens of parallel requests now resolve in a single batched call.
May 11, 2026
Dashboard

Template rendering page: template-first layout

The template rendering page now starts from the templates instead of starting from a trace. You pick a template and see exactly which spans it affects.The new three-column layout shows all templates for a function on the left, the current trace in the center (with non-matching spans dimmed), and affected spans across recent traces on the right. If the current trace has no spans for the selected template, the viewer auto-navigates to one that does.
May 11, 2026
PluginsDashboard
Plugins v0.4.15

API key context

Coding agents can now call get_api_key_context to find out which organization and environment their API key belongs to before sending traces. No more guesswork.
Organization: Acme, Inc. (5 members)
Your role: admin
Environment: production
API key: "Claude Plugin" (bf_c659...bfae)
User: Ankur Toshniwal <ankur@example.com>
Available in all three plugins (Claude Code, Cursor, Codex) as of v0.4.15.

API key descriptions

You can now add a description when creating API keys in the dashboard. Descriptions show up in the key list and are returned by get_api_key_context, so your coding agent can tell you which key it’s using without you having to check.