Repository navigation
Releases: Blackshield-Company/openshield
Release list
OpenShield v1.2.1
OpenShield v1.2.1: reduced motion for the knight. The terminal knight can now hold a still frame (the first frame of its current state) instead of animating. Turn it on with reduced_motion = true in config.toml, by setting NO_MOTION or REDUCE_MOTION, or at runtime with /motion off (/motion on brings the animation back, /motion toggle flips it, /motion shows the setting; the choice is saved). With this, every OpenShield app respects reduced motion: the desktop app and the browser extension already show a still knight under prefers-reduced-motion.
OpenShield v1.2.0
OpenShield 1.2.0 brings the Black Steel look to the terminal: a new brand system, a cleaner launch screen, and a redrawn knight with animation states.
Highlights
Black Steel look
The TUI theme and launch screen use the new Black Steel palette: dark steel surfaces, warm off-white text and a crimson accent. The brand system (shield, wordmark and design tokens) lives in docs/brand and is shared with OpenShield Desktop and the browser extension.
Shield launch screen
OpenShield now opens on the Black Steel shield beside the wordmark. There is no "Press any key to start" step anymore: the first character you type goes straight into the prompt.
The knight, on demand
The knight is still there when you want it:
- Run
/spriteto list available sprites, and/sprite blackshield-mercenaryto switch to the knight. - Or set
sprite = "blackshield-mercenary"inconfig.toml.
Configs that already set sprite keep their choice.
Knight animations
The blackshield-mercenary knight is redrawn in truecolor half-blocks (great helm, crimson cloak, longsword and a heater shield) and now has animation states: idle, thinking, working, success and error. The launch screen picks the state from what the agent is doing. Custom sprite files can define the same states with ---state:<name>--- markers; files without markers still load as a single idle animation.
In OpenShield Desktop and the browser extension, the knight animations respect your system's reduced-motion setting and show a still image instead.
Web terminal demo
openshield demo serves the full TUI in a browser terminal against a built-in mock model, with an isolated config and no API keys. openshield mock-provider runs only the mock OpenAI-compatible API. The demo terminal has no authentication; keep it on loopback unless the host is sandboxed.
Security
- Updated vulnerable crates in
Cargo.lock, including rustls 0.23.46.
Install
curl -fsSL https://raw.githubusercontent.com/Blackshield-Company/openshield/main/install.sh | bashOr download the archive for your platform below and verify it against SHA256SUMS. Prebuilt binaries are provided for Linux (x86_64, aarch64), macOS (x86_64, arm64) and Windows (x86_64).
Full changelog: v1.1.1...v1.2.0
OpenShield v1.1.1
Security
- Serve auth — Bearer token is now required on every
openshield serverequest, including loopback binds. CORS is an allowlist (Tauri and localhost origins, plus[desktop] allowed_origins).Hostis validated against loopback names, the bind address, the LAN address on wildcard binds, and[desktop] allowed_hosts(DNS rebinding). Token comparison is constant-time.POST /api/v1/pairrequires the master token, is limited to 5 requests per 60s, and stores at most 32 pairing tokens.
Changed
- Clients must send the token — Desktop reads
~/.config/openshield/desktop.token. HTTP requests useAuthorization: Bearer. WebSocket upgrades may pass?token=because browsers cannot set headers on the handshake.
OpenShield v1.1.0
Release engineering
- Prebuilt binaries — Release workflow builds Linux x86_64/aarch64, macOS x86_64/arm64 and Windows x86_64 archives on every
v*tag, with per-asset.sha256files and an aggregateSHA256SUMS. - Installer —
install.shnow installs fromBlackshield-Company/openshield: downloads the release binary for your OS/arch, verifies the checksum, and falls back tocargo install --git. SupportsOPENSHIELD_VERSION,BIN_DIR,OPENSHIELD_FROM_SOURCEandDRY_RUN. - CI — rustfmt, clippy (
-D warnings), shellcheck and tests on Ubuntu, macOS and Windows. - Tests — Integration tests for the agent plan/execute/verify loop against a mocked OpenAI-compatible provider, the tool approval gate, and the SQLite memory store and search.
- SECURITY.md — Vulnerability reporting policy.
Fixed
- License metadata — README badge and
Cargo.tomlnow say Apache-2.0, matchingLICENSE(previously mislabelled MIT). - Repository links — README,
Cargo.tomland the installer point atBlackshield-Company/openshield.
Added
- Command Palette — Fuzzy-searchable command overlay triggered by
Ctrl+Por typing/in input. 16 commands with keyboard navigation (↑/↓, Enter to execute, Esc to close, Backspace to filter). - Session Bookmarks / Checkpoints — Save and restore named session checkpoints.
Ctrl+Shift+Btoggles the bookmark manager. Ctrl+N to create, Enter to load, Esc to close. Persistent per-session JSON storage. - Inline Image Display — Rich metadata indicators for pasted/attached images: format (PNG/JPEG/GIF/WebP/BMP), dimensions, file size. ASCII art placeholder boxes rendered in chat area.
- Streaming Markdown Renderer — Inline markdown parsing for assistant messages: bold, italic,
code, links,strikethrough. Applied to all non-code-block content in real-time. - Connection Pooling —
reqwestclient withpool_max_idle_per_host(10), TCP keepalive, 15s connect timeout, HTTP/2 support. Reduces connection overhead for repeated API calls. - Async Cache Persistence — Cache
set()now spawns disk write viatokio::spawn, eliminating synchronous fs blocking on the hot path. - Cache Key Optimization — Eliminated double JSON serialization in
chat_streamby reusingbuild_chat_body()output for cache keys.
Changed
- Compiler warnings — 40 → 0. Systematic cleanup across all modules.
- Test count — 337 → 363 tests (added image_display dimension detection, format indicator, ASCII placeholder, human_size tests).
Fixed
- Test compilation — Added missing
keybindingsfield to all testConfigstruct initializers (config, router, self_improve modules).