Releases: Atennebris/Umbra-Agent
Releases · Atennebris/Umbra-Agent
v0.1.5
v0.1.4
[0.1.4] - 2026-06-10
Fixed
ecosystem.config.cjsandconfig.jsonadded to package files — fixes PM2 daemon startup after global install
v0.1.3
[0.1.3] - 2026-06-10
Fixed
- Removed
src/from package files — fixesspawn tsx ENOENTerror on global install
v0.1.2
[0.1.2] - 2026-06-10
Fixed
scripts/directory added to package files — fixes postinstall error on global install
v0.1.1
[0.1.1] - 2026-06-10
Fixed
- README images now use absolute URLs for correct display on npmjs.com
v0.1.0
[0.1.0] - 2026-06-07
Core Architecture
- Daemon-first architecture via PM2 — hidden local HTTP server on
127.0.0.1:8080, CLI as thin HTTP client - Lazy-loading runtime modules — heavy branches load only on demand per command
CLI & TUI
- Core commands:
umbra start,umbra stop,umbra status,umbra task add umbra init— scaffoldsAGENTS.mdtemplate andcheck.sh/check.ps1in project directory- Terminal UI built with Ink — original Umbra dark/shadow theme
- Markdown rendering with syntax highlighting and streaming model responses
/clear— resets transcript and starts a new thread/session on the backend- Drag-and-drop file path parsing and local image to Base64 conversion (Vision support)
umbra doctor— health check for filesystem, ports, SQLite, daemon, and web providersumbra debug— live monitor for daemon/CLI/TUI/provider events; writes~/.umbra/debug/events.jsonlumbra permission— view rules, reset "always allow", switch permission modesumbra trust list/umbra trust remove <path>— manage trusted workspace pathsumbra usage— token and cost report from usage log
Memory & Sessions
- Service filesystem auto-init:
~/.umbra/,~/.umbra/sessions/,~/.umbra/projects/ - Global SQLite database with vector search via
sqlite-vec - Local text embeddings via Transformers.js (
all-MiniLM-L6-v2, ~90 MB, auto-downloaded) - Typed JSONL session events with stable schema:
id,sessionId,projectPath,timestamp,type,payload AGENTS.mdrules parsing andMEMORY.mdread/write per project- Full thread lifecycle:
thread_start,thread_list,thread_resume,thread_fork,thread_archive,thread_unarchive - TUI session picker with
/sessions,/resume,/sessions fork /clearbound to new thread — previous thread preserved in history- Explicit memory controls:
use_memories/generate_memoriesflags per runtime/project/thread - Memory provenance and citations — source metadata visible in responses and debug trace
- Safe memory reset without deleting session logs
- Session compaction pipeline with iterative accumulative summary (
Previous Summary + New Messages = Updated Summary) - Session import/export support
Context Engine
- Tree-sitter AST integration — full AST for 15+ languages via WASM grammars
- GML/GameMaker 2.3+ full AST via
@bscotch/gml-parser(function, constructor, macro, enum, globalvar) - Repo Map generator — compact symbol-level outline of the entire project
- Code compression — sends only function/class signatures, not full file bodies
- Auto token counting for outgoing prompts
/compact— forces summarization of accumulated context/compact settings— configure dedicated provider/model for compaction- Universal text fallback for unknown file types — bounded context packet with top symbols and token estimate
- Split-turn compression — mid-turn context overflow handled by compressing the prefix, keeping the last 3 raw tool pairs
- Retrieval-first context packets — search results compressed to ranked file groups with
file:linereferences preserved; token caps per mode
Language coverage — full AST
JavaScript, TypeScript, TSX, Python, Go, Shell/Bash, Rust, Java, C/C++, C# (class/interface/record/property/constructor/event), PHP, Ruby, CSS, PowerShell, INI/Config, GML/GameMaker 2.3+
Language coverage — structured parsers
JSON, YAML, GitHub Actions YAML, Markdown, SQL, HTML, TOML, GraphQL, Protocol Buffers, Terraform/HCL, Prisma, Solidity, Zig, Dart, Kotlin, Swift, Lua, Scala, Elixir, Erlang, Haskell, Perl, R, Clojure, Vue, Svelte, Astro, XML, Gradle, GDScript, MATLAB/Octave, Nix, WebAssembly Text, Assembly x86/ARM, Dockerfile, Makefile, CMake, .env (values redacted), log files, Jupyter Notebook, PDF, DOCX, yarn.lock, Cargo.lock, Gemfile.lock, composer.lock
Provider Layer
- Dynamic model registry with live capabilities fetch via
models.dev+ HuggingFace (tool/vision/context/reasoning flags — no hardcoding) - OpenAI client with structured output (Zod), Anthropic client, local network client (Ollama, LM Studio)
ProviderTypeSpecregistry withvalue,label,default_url,needs_key,cloud,aliases- Provider profiles with full CRUD: list, create, update, delete, test, capabilities
- Per-profile model selection and global fallback
- Enable/disable profiles without deletion — explicit
connected/available/unavailablestatus - Graceful degradation for broken profiles — auto-fallback to valid connection on startup
- Optional/module-gated providers — module absent means provider unavailable, no crash
- CLI/TUI provider management and active model switching
Tools
- Zod schemas for strict JSON validation of all AI tool calls
- Tool Runner — central call router with risk classification (
read_only/write/execute) - Tool presets:
chat-readonly,agent-default,exec-full - Machine-readable result schema on every tool
fs.list,fs.read,fs.write,fs.edit(Unified Diff patch application)shell.exec— terminal command execution with stdout/stderr capturesearch.rg— ripgrep wrapper with grouped output (file buckets, snippets, match counts, truncation metadata)search.files— ignore-aware file listing with Node.js fallbacksearch.fuzzy— fuzzy file path scoring- External binary health layer — availability check, version, path source, custom path override
git.status,git.diff,git.apply,git.commit,git.push,git.pullfs.cd— switches activeprojectPathwith auto-reload of AGENTS.md, Repo Map, and MEMORY.md- Central permission hook before every tool call
- Destructive vs non-destructive tool separation at contract level
Orchestration & Autonomous Loop
- Planning Mode — AI reads AST and produces a JSON plan without executing any tools
- Agent Mode — interactive working mode with tools resolved by policy and task intent
--execautonomous mode — patch loop viafs.editwith auto-run ofcheck.sh/check.ps1- Per-mode execution contracts: allowed tools, confirmation rules, edit/shell/git permissions, stop-guards; no mode bleed
- On
Exit Code 1→ capturestderr, build new prompt with error, auto-retry (up to 6 attempts) - On
Exit Code 0→ task complete: auto-commit and write to projectMEMORY.md --exechas a separate policy profile — edits/run/check/fix allowed automatically within sandbox- Time-boxing — interrupt a hung task by timer (
--timeflag) - Task lifecycle: create, status, output, stop, restart for background tasks
Security, MCP & Plugins
- Interactive CLI permission prompts — Allow / Deny / Always Allow before dangerous actions
- Permission subsystem with rules, decision logging, and mode-aware behavior (
PermissionManager) - MCP client for external tools (stdio transport, JSON-RPC) with tool/resource discovery and auth flow
- Dynamic plugin loading from
plugins/directory with lifecycle management
Gateway, Routing & Token Economy
- Single outgoing LLM call point in daemon — shared adapter with retries, limits, and logging
- Format translation layer: internal Umbra contract ↔ provider payload
- Named routing chains with tiered fallback — auto-switch on 429s, network drops, empty responses
- Parallel request deduplication
- Pre-LLM compression layer with configurable intensity:
off/lite/standard/aggressive - Terminal/tool output compression:
shell.exec,search.rg,git diff, harnessstderr - Stacked pipeline: machine-block compression first, then prose condensation
- Mode-linked compression:
planminimal,agentbalanced,execaggressive on tool output - Structured usage log in
~/.umbra/usage.jsonl - Per-request normalized token counter:
input,output,reasoning,cacheRead,cacheWrite,costUsd,source: actual|estimated - OpenAI-compatible and Anthropic response normalization (including reasoning and cache fields)
- Cost estimate and savings displayed in TUI; usage comparison by session/model/provider
umbra permission— strict / on-demand / yolo modes, visible in TUI anddoctor- Tool presets aligned with displayed policy names
- Deduplicated and normalized model list — unified capability card from registry API
- Plan mode structured JSON output
- Metrics panel in TUI: token counts, response time, context fill %, cost, compression indicator
- Visual separation of reasoning blocks vs regular text; toggle for reasoning visualization
- Double Esc to interrupt an active stream without exiting CLI
@-file references with fuzzy scoring and match highlights in input- Human-readable tool call rows with action label and detail line for every tool type
- Full provider connection flow via step-by-step screen
- Full Markdown element set with streaming (no flicker), GFM tables, syntax highlighting
- Shared syntax highlight engine with language aliases and guardrails (512 KB / 10,000 lines)
- Built-in platform constraints — no silent "improvement" steps outside explicit requests
- Bootstrap profile — one-time context collection about user and project stack
- Notification channel for daemon tasks:
~/.umbra/notifications.jsonl /fullflag — increases context limits and disables compression
Web Search
web.searchandweb.fetchtools — external search isolated from localsearch.rg/webcommand — interactive menu for on/off, mode (cached/live), provider, status- Providers: DuckDuckGo (default, zero-config), SearXNG (self-hosted), Jina Search, Brave Search, Tavily
- Auto-migration: paid providers without API key → auto-switch to DuckDuckGo
web.fetch404s return structured failed-result instead of crashing the tool loopweb.searchgated byagent/execpermission policy- Web provider status in
umbra doctor