2026.7Platform · Bug fix
July 2026Closed a gap in event delivery
Closed an edge case where a batch of events could be silently dropped during a brief network hiccup in the ingestion pipeline. Events are now retried until they're confirmed durable, instead of being lost if the hiccup landed at the wrong moment.
2026.6Feature · Dashboard
June 2026Track outcome metrics, broken down any way you like
goal_completed · score
0.82
Group by: agent
db-analyst0.91
sql-planner0.74
summariser0.58
A new Metrics tab on Analytics discovers every set_metrics() key automatically and infers its type — score, rating, sentiment, boolean, or numeric. See distribution and trend per key, then group results by agent or any tag (model, connection, environment) to compare performance across your fleet.
session_ctx.set_metrics({...})
Faster agent startup
with niitaka.start_session() as s:
returns instantlyreply = run_agent(message)
# policies + pricing → fetched in background
start_session() no longer waits on network round-trips to fetch policies and pricing — both happen in the background now, and session end is fire-and-forget too. Startup latency is no longer coupled to Niitaka's response time, even on a slow connection.
start_session() — returns instantly
Thread-safe session tracking
main thread
_tls.session_id
a1b2c3…
llm-judge thread
_tls.session_id
e5f6a7…
Session state is now fully isolated per thread. Fixed a race condition where a background thread — an async LLM-judge call, a parallel tool run — could cross-contaminate session state with the main request thread under concurrent load.
2026.6Security · SDK
June 2026Credentials redacted, local models priced correctly
LLM event · input
{ model: "ollama/llama3",
api_key: "***",
... }
cost$0.00 · local
LLM call inputs are now scrubbed of api_key, api_base, and other credential fields before they reach Niitaka. Local models (Ollama and friends) get accurate $0 cost tracking instead of being billed at fallback rates — and any unrecognised model now shows $0 rather than a guessed price.
Connection reliability
Hardened backend connection handling against transient network drops, and fixed a rare error when viewing decision traces for background-thread sessions.
2026.5Feature · UI + SDK
May 2026Filter sessions by custom tags
Active filtersconnection: prod-db ×
a1b2c3…db-analystconnection: prod-dbteam: sales
e5f6a7…db-analystconnection: prod-dbdb_type: postgres
c9d0e1…db-analystconnection: prod-dbregion: us-west
Tag any session with key-value pairs — connection name, team, region, user ID, or any dimension that matters to you. Tags appear as clickable chips in the Sessions table: click a chip to filter instantly. Stack multiple tag filters; the stat tiles update in real time to reflect only the tagged subset.
start_session(tags={...})
SDK works gracefully without configuration
with niitaka.start_session(
goal="analyze", agent_id="bot") as s:
reply = run_agent(message)
# works with or without api_key
No more defensive boilerplate. When api_key is not set, start_session() silently returns a no-op context manager and all logging calls are silent. Your agent code is identical whether Niitaka is configured or not — adopt it at your own pace or disable it in test environments.
start_session() returns no-op when unconfigured · niitaka.create_session()
2026.4Feature · SDK + Dashboard
May 2026Name your LLM call sites, configure prompts from the dashboard
with niitaka.
prompt_slot("planner"):
call_llm(...)
→
Prompt Slots
planneractive
You are a planning assistant. Break down…
executor
Execute each step precisely. Report all…
Tag each LLM call site in your agent with a named slot — "planner", "sql_generator", "interpreter". When a runtime config or experiment variant defines a prompt_slots override for that name, the correct system prompt is injected automatically — no code changes, no redeploy.
niitaka.prompt_slot("name")
Async LiteLLM fully instrumented
async def handle(msg):
resp = await litellm.acompletion(…)
● capturedreturn reply(resp)
# niitaka.instrument_litellm() ← once at startup
litellm.acompletion() is now captured alongside synchronous litellm.completion(). Async agents — FastAPI backends, asyncio pipelines, async LangChain chains — are fully observed with zero extra setup after calling instrument_litellm().
niitaka.instrument_litellm()
2026.4Feature · SDK + Dashboard
May 2026Organise agents into folder hierarchies
Group related agents under slash-separated folder paths. Folders are created automatically on first use — no dashboard setup required. Navigate the hierarchy in the Agents view, or scope policies and runtime configs to an entire folder at once.
start_session(folder_path="team/subfolder")
2026.3Feature · UI
April 2026Search across all sessions and events
session goal: analyze Q3 sales data
API call failed — rate limit error on gpt-4o at step 3
session goal: summarise customer feedback
Retrying after rate limit error (attempt 2/3)…
Full-text search across session goals, event content, tool inputs/outputs, decisions, and error messages — all from one search bar. PostgreSQL trigram indexes power fast partial-match results with highlighted snippets so you can spot the relevant line without opening each event.
2026.3Feature · Platform
April 2026One-click Slack integration for alerts
Post to channel
#ops-alerts✓
#general
#engineering
Connect your Slack workspace directly from the Alerts settings page — no webhook URL hunting or manual channel configuration. OAuth scopes are minimal: Niitaka only requests permission to post to the channels you select. Existing webhook-based channels continue to work unchanged.