Skip to content

Releases: chiruu12/Hive

v0.6.0 — Framework Hardening

02 Jun 17:10
92bd268

Choose a tag to compare

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 timeoutAgent(tool_timeout=...) / daemon.tool_timeout (default 60s). A hung tool becomes a tool-error fed back to the model instead of stalling the cycle. 0 disables it.
  • Install extrashive-agent[anthropic], [openai], [mcp], [cli]. SDKs still ship in core deps; a missing one raises a clear MissingDependencyError naming the extra.
  • Context managers + lazy init on Hivewith Hive() as h: / async with Hive() as h:, and Hive(path).spawn(...) scaffolds .hive/ lazily so init() is optional. ensure_hive_dirs() exported.
  • StructuredParseError and MissingDependencyError typed 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.parsed is now T | None — failed structured runs return parsed=None instead 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_once wrap-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

31 May 19:17

Choose a tag to compare

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 a tool_use_failed only 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_failed on 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 as user-role messages, which strict
    providers accept mid-conversation (some reject mid-thread system messages). 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-agent

No 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)

31 May 19:04

Choose a tag to compare

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 both generate_with_metadata and
    generate_stream.
  • Belt-and-suspenders nudge at the agent layer: Agent.run_once now 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-agent

No code changes required. The happy path (tools provided, or no error) is unchanged.

v0.5.0 — Composable Core + Daemon Scalability

31 May 11:59
de402d0

Choose a tag to compare

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 during run().

Provider capabilities & availability

  • Capability + supports(...) -- branch on what a provider can do, not its class.
  • Availability + availability() -- distinguishes "no API key" from "unreachable";
    hive models now 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 Agent is first-class: 2-line usage, no daemon (see example 23).
  • InstructionLike protocol unifies Instructions / 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-agent

No 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

27 May 23:33

Choose a tag to compare

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 pending
  • update_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-dateutil for 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 timestamp
  • SemanticMemory.update() -- facade with hasattr guard for backend compatibility

Other

  • Groq test fix -- test_groq_unavailable_without_key no longer leaks OPENAI_API_KEY from .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

27 May 23:33

Choose a tag to compare

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

27 May 23:33

Choose a tag to compare

What's New

Bug fixes found while building Mutter/Hum, new toolkit APIs for host applications, and the ClipboardToolkit.

Bug Fixes (Critical)

  • tc.arguments None crashtool.call(**tc.arguments) crashed when LLM called tools with no required params (e.g. list_alarms()). Fixed in both run() and run_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 to str with int(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 -mlx suffix).

New Features

  • ClipboardToolkitcopy_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 titleAlarmChecker(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

23 May 18:00
b263935

Choose a tag to compare

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