Skip to content

Releases: weirdstuff-dev/openheim

v0.3.0

01 Jun 04:46
4bbda9a

Choose a tag to compare

What's new in v0.3.0

Security controls

Two new controls let you lock down what the agent can touch:

  • Work-directory sandbox (work_dir) — read_file and write_file are restricted to a directory tree. Symlinks are canonicalized so they can't escape the boundary. Defaults to the directory openheim was invoked from.
  • Shell access control (allow_shell) — set to false to remove execute_command from the tool list entirely. The LLM never sees it and cannot request it.

Both are configurable in config.toml and as builder methods (.work_dir(path) / .allow_shell(bool)) for programmatic embeddings.

System identity

~/.openheim/system.md defines the agent's base identity and is injected into every session's system prompt. openheim init creates a default file. The prompt is now structured: identity block first, then skills, separated by clear section headers.

Default skills

A new default_skills array in config.toml auto-loads skills into every session — no need to pass --skills each time. Per-session skills are merged on top with duplicates removed.

Cross-compilation

Cross.toml added for building Linux targets from macOS.

Fixes

  • MCP subprocess stderr no longer leaks into the terminal
  • openheim run now exits cleanly after a headless prompt completes
  • merge_skills deduplicates within the default_skills list itself
  • Leading/trailing whitespace in system.md is preserved
  • openheim init correctly reports system.md creation status when config already exists

Breaking changes (library users)

  • AppConfig gained two new public fields: work_dir: Option<PathBuf> and allow_shell: bool. Struct-literal construction must supply these fields. TOML loading is unaffected (both have serde defaults).
  • SystemToolExecutor::build takes an additional allow_shell: bool argument.

v0.2.1

28 May 06:47
f5710d1

Choose a tag to compare

What's Changed

  • feat: add release workflow
  • feat: add Cross.toml

v0.2.0

27 May 11:47
22cb76f

Choose a tag to compare

openheim 0.2.0

Highlights

New TUI built on ratatui

The terminal interface has been rewritten from scratch on ratatui. The result is a much faster, more responsive UI with proper event handling. Key additions:

  • Interactive pickers for sessions, models, and commands — navigate with arrow keys, select with Enter, no more typing IDs.
  • :models command — switch provider and model mid-session from an inline popup.
  • Themes — choose a colour theme with :theme; the default is now gray.
  • Info panels relocated to the prompt area so they no longer overlap the message list.
  • TerminalGuard ensures the terminal is restored cleanly on panic or forced quit.

Token streaming and thinking blocks

All four LLM backends (Anthropic, OpenAI, Gemini, OpenAI-compatible) now stream tokens in real time and surface extended thinking blocks as they arrive. Previously, responses were buffered and displayed in one shot.

ACP: session/set_model

ACP clients can now call session/set_model to switch the model during an active session. The thinking convention is advertised in session metadata so clients can negotiate capabilities up front.

Bug fixes

Area Fix
MCP Child server processes are killed when the client is dropped, preventing zombie processes
LLM / SSE Fixed SSE buffer reallocation that silently dropped streamed tokens
LLM JSON serialization errors now propagate instead of producing empty output
Sessions Restoring a session from history now sets it as active and clears stale state
ACP Session load now resolves the full provider config, not a partial view
ACP acp_prompt resolves the per-session LLM client correctly
Model switch UI now shows the full (provider, model) pair after switching
Provider resolution Model-whitelist is enforced in resolve_with_provider
Session restore Warning emitted when restored session references an unconfigured provider
TUI Long messages now wrap correctly in the viewport
Tools Execution errors are captured and reported rather than silently dropped
TUI ToolResult errors rendered in red; default theme corrected from dark_gray to gray

Upgrade

cargo install openheim --version 0.2.0

Or pin in Cargo.toml:

[dependencies]
openheim = "0.2.0"

v0.1.1

21 May 13:56

Choose a tag to compare

Fixed

  • Tool call history gaps — ACP sessions were silently dropping tool calls from stored history; all tool calls are now captured correctly.
  • Accurate status on replay — Replayed tool calls now emit InProgress before resolving, matching the behaviour of live sessions.
  • Failed tool calls now surface as Failed — Previously, tool failures were stored as plain text and replayed as Completed. The is_error flag is now persisted in Message and propagated through StreamEvent::ToolResult so both live and replayed paths emit ToolCallStatus::Failed.
  • Tool error logging — Improved logging for tool call errors.

Improved

  • LLM accuracy on failuresis_error is forwarded to Anthropic's tool_result block, giving the model accurate signal when a tool has failed.
  • Added CHANGELOG.md.
  • Updated documentation for is_error and tool call history replay semantics.

openheim — a fast, multi-provider LLM agent

15 May 07:41

Choose a tag to compare

What's included

  • Multi-provider support — OpenAI, Anthropic, Gemini, and any OpenAI-compatible endpoint
  • MCP integration — connect external tools via Model Context Protocol (stdio and HTTP transports)
  • ACP server — expose the agent over the Agent Client Protocol with WebSocket streaming
  • Tool execution — built-in filesystem, shell, and extensible tool framework
  • Conversation history — persistent sessions with RAG context and skill injection
  • Interactive REPL — terminal UI for local development
  • Headless / programmatic mode — embed openheim as a library in your own Rust application

Install

cargo install openheim

Or add as a library:

[dependencies]
openheim = "0.1.0"

See the README for configuration and usage.