Releases: chiruu12/Hive
v0.6.0 — Framework Hardening
Framework-hardening release. The agent runtime is more robust under streaming interruptions, hung tools, and corrupt state, and the package is friendlier to import and embed. No breaking changes — existing databases upgrade automatically.
Added
- Per-tool execution timeout —
Agent(tool_timeout=...)/daemon.tool_timeout(default 60s). A hung tool becomes a tool-error fed back to the model instead of stalling the cycle.0disables it. - Install extras —
hive-agent[anthropic],[openai],[mcp],[cli]. SDKs still ship in core deps; a missing one raises a clearMissingDependencyErrornaming the extra. - Context managers + lazy init on
Hive—with Hive() as h:/async with Hive() as h:, andHive(path).spawn(...)scaffolds.hive/lazily soinit()is optional.ensure_hive_dirs()exported. StructuredParseErrorandMissingDependencyErrortyped exceptions.
Changed
- Streaming falls back instead of failing — a stream ending without a terminal DONE event (or erroring mid-stream) keeps the text already shown or falls back to a retried non-streaming call; the stream is closed on cancellation.
StructuredTaskResult.parsedis nowT | None— failed structured runs returnparsed=Noneinstead of an unvalidated object.- Provider error detection is structured-first for unsupported
response_format/json_schema.
Fixed
- Previously-silent failures surfaced — memory recall, corrupt suffering/persona restore, and plugin-init failures now log with context; corrupt suffering snapshots fall back to a fresh state.
- Robust structured-output parsing — a brace-matching scanner replaces the naive first-
{/last-}slice. - One active generated goal per agent — the existence loop re-checks before saving (subgoals/delegation still create multiple by design).
- Malformed tool-call arguments are logged instead of silently dropped.
- Budget: the
run_oncewrap-up generation is now budget-checked; a hard budget can overshoot by at most one generation (documented).
Full changelog: https://github.com/chiruu12/Hive/blob/main/CHANGELOG.md
v0.5.2 — Hardened No-Tools Recovery
Hive v0.5.2 Release Notes
Headline: Hardened No-Tools Recovery
A follow-up to v0.5.1 that incorporates review feedback on the no-tools recovery
path, plus the Phase 3 simulation core that landed on main.
What's Fixed
- Streaming recovery is scoped to pre-content failures: the OpenAI-compatible
adapter now recovers atool_use_failedonly when it happens before any text has
reached the caller, so a mid-stream error can never produce duplicated output. If a
recovery stream errors after emitting text, the terminal result preserves the text
already streamed. - Recovery no longer masks real errors: a
tool_use_failedon a request that
did offer tools (e.g. a malformed tool schema) is surfaced instead of being
swallowed by the recovery retry. - No mid-thread system messages: both the agent-layer wrap-up nudge and the
adapter's text-only recovery nudge are sent asuser-role messages, which strict
providers accept mid-conversation (some reject mid-threadsystemmessages). The
agent nudge is sent only for the wrap-up call and is not written to the logged
conversation.
Also Included
- Phase 3 simulation core: registry-driven world catalogs (events & jobs) and
wired simulation feedback loops.
Upgrade
pip install --upgrade hive-agentNo code changes required. The happy path (tools provided, or no error) is unchanged.
v0.5.1 — Resilient No-Tools Wrap-Up (Groq tool_use_failed recovery)
Hive v0.5.1 Release Notes
Headline: Resilient No-Tools Wrap-Up Across Strict Providers
A focused reliability fix. When Agent.run_once finishes its tool loop it makes a
final wrap-up call with no tools offered. If the model still emits a tool call on
that call -- common on multi-action requests -- strict OpenAI-compatible providers
(notably Groq) reject it with a tool_use_failed 400, failing the whole turn
even though the tools that ran during the loop already persisted.
What's Fixed
- Provider-agnostic recovery in the OpenAI-compatible adapter: a
tool_use_failed
rejection on a no-tools request is detected by error code/message (no provider
hardcoding) and recovered with a single bounded retry carrying a strong text-only
instruction. If the retry still fails, the turn completes with clean text instead
of raising -- the tools already ran. Covers bothgenerate_with_metadataand
generate_stream. - Belt-and-suspenders nudge at the agent layer:
Agent.run_oncenow appends a
"tool budget exhausted, reply in plain text" system message before the final
wrap-up call, reducing the chance of hitting the error at all.
A multi-action turn (e.g. "make three notes") now completes on Groq without surfacing
a 400.
Upgrade
pip install --upgrade hive-agentNo code changes required. The happy path (tools provided, or no error) is unchanged.
v0.5.0 — Composable Core + Daemon Scalability
Hive v0.5.0 Release Notes
Headline: A Composable Core That Scales
This release hardens and decouples Hive's shared core. The runtime Agent is now
a clean, standalone, streaming-capable building block, and the daemon runs many
agents concurrently. Most changes are additive -- the public Agent, provider,
and toolkit APIs stay backward compatible.
What's New
Streaming
BaseProvider.generate_stream()+StreamEvent-- token streaming with a base
fallback so every provider works out of the box.- Native streaming for Anthropic and OpenAI-compatible providers (Groq, Fireworks,
Ollama, LM Studio, OpenRouter). Agent(on_text=...)streams assistant text token-by-token duringrun().
Provider capabilities & availability
Capability+supports(...)-- branch on what a provider can do, not its class.Availability+availability()-- distinguishes "no API key" from "unreachable";
hive modelsnow shows the reason for unavailable local servers.
Daemon scalability
- Agent cycles run concurrently with bounded concurrency
(daemon.max_concurrent_agents, default 8). Each cycle is isolated, so one slow,
timed-out, or failing agent never blocks or breaks the others. - Per-agent provider and profile are cached across cycles.
Framework polish
- Concurrent tool execution -- multiple tool calls in one model turn run in
parallel, with per-call error isolation and ordered results. - Typed errors --
HiveError,AgentNotFoundError,ProfileNotFoundError. - Standalone
Agentis first-class: 2-line usage, no daemon (see example 23). InstructionLikeprotocol unifiesInstructions/Persona/ custom objects.- Structured output works on every provider (prompt-based fallback default).
Persistence
- SQLite store gained indexes on hot columns and versioned migrations
(PRAGMA user_version) that upgrade older databases in place.
Tools
ClipboardToolkit.read_clipboard-- read the system clipboard, complementing the
existing copy tools.
Upgrade
pip install --upgrade hive-agentNo code changes required for existing agents. To stream, pass on_text=... to
Agent; to bound daemon throughput, set daemon.max_concurrent_agents.
Stats
- Anthropic, OpenAI, Groq, Fireworks, Ollama, LM Studio, OpenRouter providers
- Full test suite green on Python 3.11 / 3.12 / 3.13
v0.4.2 — Missing Toolkit APIs
What's New
Fills in missing CRUD operations that downstream consumers (Nudge) were forced to hack around using private attributes and raw SQL.
TaskToolkit
uncomplete_task-- reopen a completed task, setting it back to pendingupdate_task-- modify description, priority, or due date on an existing task- Priority filtering --
list_tasks(priority="high")filters by priority level
KnowledgeToolkit
delete_note-- delete a note by ID (replaces._memory.forget()hack)update_note-- edit content or tags in-place, preserving ID and creation timestamp
AlarmToolkit
set_alarm_at-- set alarms for absolute times like "3pm", "15:00", "tomorrow 9am"- Uses
python-dateutilfor parsing, interprets naive times as local timezone - Time-only inputs auto-roll to tomorrow if already past; explicit past dates are rejected
Memory Layer
TFIDFBackend.update()-- modify notes in-place without losing ID or timestampSemanticMemory.update()-- facade withhasattrguard for backend compatibility
Other
- Groq test fix --
test_groq_unavailable_without_keyno longer leaksOPENAI_API_KEYfrom.env - Docs -- TaskToolkit, KnowledgeToolkit, and AlarmToolkit added to toolkit guide
- Changelog -- v0.4.0, v0.4.1, v0.4.2 entries added
New Dependency
python-dateutil>=2.8(main),types-python-dateutil>=2.8(dev)
Stats
- 828 tests passing (32 new)
- 14 files changed, ~500 lines added
- No database schema changes -- all new methods use existing columns
Full Changelog: v0.4.1...v0.4.2
v0.4.1 — Shared Toolkit Race Fix
What's New
Bugfix release -- fixes a race condition when sharing toolkits across concurrent agent requests.
Fixed
- Clone-on-rebind -- when an Agent rebinds a toolkit already bound to a different agent, it now clones the toolkit instance instead of mutating the shared one. Prevents state corruption under concurrent usage (e.g. Nudge handling multiple voice requests simultaneously).
Stats
- 815 tests passing
- 2 files changed
Full Changelog: v0.4.0...v0.4.1
v0.4.0 — Production Hardening + ClipboardToolkit
What's New
Bug fixes found while building Mutter/Hum, new toolkit APIs for host applications, and the ClipboardToolkit.
Bug Fixes (Critical)
tc.argumentsNone crash —tool.call(**tc.arguments)crashed when LLM called tools with no required params (e.g.list_alarms()). Fixed in bothrun()andrun_once().- Integer params break Groq — Groq's API rejects
"type": "integer"in JSON schema when the LLM sends strings. All LLM-facing numeric params changed tostrwithint(float())parsing. Affected: AlarmToolkit, KnowledgeToolkit, LinkToolkit, A2AToolkit. - WhisperLocal blocking inference — ML inference now runs in
run_in_executor()to avoid blocking the event loop. - MLX whisper model map — Fixed HuggingFace repo names (base/small/large-v3 repos renamed with
-mlxsuffix).
New Features
- ClipboardToolkit —
copy_to_clipboard,copy_note,copy_task,copy_link. Uses pbcopy (macOS) / xclip (Linux). - Public query methods on toolkits for host applications:
TaskToolkit.query_tasks(status)/query_all_tasks(status)AlarmToolkit.query_pending_alarms()/query_all_pending_alarms()KnowledgeToolkit.query_recent(limit)→list[dict]
- Configurable notification title —
AlarmChecker(notification_title="Hum") - Agent auto-rebinds toolkits — Per-request Agent creation with shared toolkits just works.
- Metadata search in TFIDF — Tags, URLs, and metadata are now indexed alongside content.
Stats
- 796 tests passing
- CI: 5/5 green (lint, mypy, tests 3.11/3.12/3.13, build wheel)
- Verified with 5 end-to-end test scenarios including live API calls
Full Changelog: v0.3.2...v0.4.0
v0.3.2 — Voice/Assistant Infrastructure
What's New
Voice/assistant infrastructure layer — everything needed to build voice apps like Mutter on top of Hive.
STT Providers
- WhisperLocal — mlx-whisper (Apple Silicon) or faster-whisper (Linux/CPU), auto-detected
- GroqSTT — Groq Whisper API with connection pooling and exponential backoff retry
- DeepgramSTT — Deepgram Nova-2 API with Pydantic response validation
- Factory with auto-detection:
create_stt_provider()picks the best available
AudioRecorder
- Microphone capture via sounddevice with thread-safe callbacks
- WAV output using stdlib struct (no scipy dependency)
- Device channel validation, proper memory cleanup
IntentRouter
- LLM-based text classification using
generate_structured()with Pydantic models - Falls back to text parsing if provider doesn't support structured output
- User-defined intents, configurable fallback
Trigger Systems
- HotkeyTrigger — global hotkeys via pynput with per-trigger in-flight guards
- WebhookTrigger — lightweight HTTP server using stdlib asyncio (no extra deps)
- Content-Length validation and 10MB cap for security
LinkToolkit
- Save, search, list, and scrape web links using SemanticMemory
- Async HTTP throughout (no event loop blocking)
- Wired into daemon's
_build_toolkits()
Hardening
- All data types are Pydantic BaseModel with validation
- Connection pooling with shared httpx.AsyncClient
- Exponential backoff retry on 429/500/502/503
transcribe_bytes()properly wraps raw PCM in WAV headers
New Optional Dependencies
pip install hive-agent[audio] # sounddevice, scipy, numpy
pip install hive-agent[hotkeys] # pynput
pip install hive-agent[voice] # all of the above
Whisper backends (mlx-whisper, faster-whisper) are manual install.
Stats
- 787 tests passing (127 new)
- 31 files changed, 3200+ lines added
- Stress tested: 50 concurrent webhooks, 5 concurrent STT calls, real mic recording, real hotkey listener
Full Changelog: v0.3.1...v0.3.2