blazorly-harness README

The project's README from github.com/deepakkumar1984/blazorly-harness. As one markdown file: README.md.

Blazorly Harness

An agentic coding harness — give it a task and it reads, writes, runs commands, searches the web, and orchestrates sub-agents to get it done. Serves a web UI you use from any browser, or runs headless for automation and CI.

Site: Blazorly Harness — features, install, and guides.

🔒 Permission presets control what the agent can touch: full-access (default) runs tools directly on your host; workspace-write confines writes to the session folder; read-only denies all mutations. Switch mid-session with /permission <preset>.


✨ Features


📦 Install

Pick your platform — a single command, no prerequisites:

Linux & macOS

curl -fsSL https://raw.githubusercontent.com/deepakkumar1984/blazorly-harness/main/installer/install.sh | bash

Windows

powershell -c "irm https://raw.githubusercontent.com/deepakkumar1984/blazorly-harness/main/installer/install.ps1 | iex"

That puts blazorly on your PATH. Run it again to upgrade to the latest release — it verifies the checksum and atomically swaps the binary.

What you get: a self-contained blazorly binary. Data lives in ~/.blazorly (Windows: %USERPROFILE%\.blazorly), or the directory specified by BLAZORLY_HOME. No Docker, no Python, no .NET SDK.


🚀 Quick start

blazorly                            # starts the web UI at http://localhost:5080

Open the browser. A fresh installation has no provider, model, workspace, or session configured. In Settings → Providers, add your provider and key, then use Discover or enter model IDs. Settings are written to <home>/settings.json when you save. The page displays the actual path.

For example, to configure an OpenAI route explicitly, create settings.json with your model ID and key:

{
  "provider": "openai",
  "model": "your-model-id",
  "apiKey": "your-api-key"
}

Works with DeepSeek, OpenAI, Anthropic, xAI, Ollama, LM Studio, and OpenAI-compatible endpoints (custom routes in Settings → Providers). Model pickers list only discovered or manually configured IDs. The built-in catalog supplies metadata for those IDs; it does not establish account access or server availability.

Removing a provider removes its route and clears the default selection if necessary. Deleting the harness home resets its saved configuration, workspace registrations, and session data; workspace folders stored elsewhere remain on disk. Browser appearance preferences are stored separately in the browser.

The startup and behavior audit records the fixes and verification limits.

For a gateway that serves the Responses API, choose OpenAI Responses as its API type in Settings → Providers. Automatic OpenAI-compatible routes also use Responses for GPT-5 and GPT-6 models, including OpenAI-prefixed ids such as openai/gpt-6-astra. Other provider-prefixed ids (az/…, azure/…, cf/…) stay on Chat Completions because that prefix selects a gateway route, not a wire protocol; choose OpenAI Responses explicitly if the route really serves it.

Personalize the UI in Settings → Appearance. Palette, accent, type, text size, corner style and motion changes save automatically; custom CSS uses Apply CSS and can be disabled without losing your code. Reset appearance restores defaults. If a custom style hides the controls, open /settings?tab=appearance&reset-appearance=1 on your running instance to reset them.

The appearance system is built on a token layer (wwwroot/appearance.css) whose variable names are the ones custom CSS already uses — --bg, --bg-raised, --bg-overlay, --text, --text-dim, --text-faint, --border, --border-strong, --accent, --accent-contrast, --danger, --success, --warn, --radius, --shadow-1… — so a stylesheet written for an earlier version keeps working. Every corner derives from --radius (Sharp / Soft / Round / Bubbly) and every type size is in rem, so one text-size choice scales the whole interface. Preferences saved by an earlier version are migrated on load: old palettes and fonts map to their nearest current choice, and a saved accent colour is kept exactly as picked.

blazorly run "summarize this repo"      # headless task (current directory becomes the workspace)
blazorly --version                       # build stamp

🖥️ Desktop app

The same engine in a native window — tray, menu bar, blazorly:// links, and a branded startup screen. It attaches to an engine that is already running, or starts and stops its own. Tagged releases publish a macOS build with the engine bundled; install it with:

curl -fsSL https://raw.githubusercontent.com/deepakkumar1984/blazorly-harness/main/installer/install-desktop.sh | bash

Or run it from source:

cd desktop && npm install && npm start

See desktop/README.md for flags, packaging, and desktop/docs/architecture.md for the design.


⚙️ Essential configuration

Setting Default What it does
provider / model Unconfigured Your explicitly selected LLM route
apiKey — API key, or that provider's own environment variable
sandboxMode full-access Tool sandbox: full-access, workspace-write, or read-only
answerStyle layered How answers are written: layered (plain result first, technical details below), simple (plain only), or technical (engineer report). Set it in Settings → Answers
tokenSaverToolOutput false RTK-style built-in filtering of tool output (git status/log/diff, grouped search, listings, repetitive logs) before the model reads it. Settings → Token saver
tokenSaverTerseOutput false Caveman-style terse answers; pauses answerStyle while on
tokenSaverMinimalCode false Ponytail-style minimal-code bias (YAGNI, reuse, stdlib first)
tokenSaverHeadroom / tokenSaverHeadroomUrl false / http://localhost:8787 Route model requests through a Headroom proxy you install and run; the real provider URL travels in the x-headroom-base-url header
contextWindowTokens 262144 Fallback compaction/context window when API/catalog metadata is absent

Saved keys take precedence over the provider's own environment variable (for example OPENAI_API_KEY for OpenAI and DEEPSEEK_API_KEY for DeepSeek). Custom gateways use their saved key or explicitly named apiKeyEnv. An environment key authenticates an explicitly configured route; it does not add a provider automatically.

Everything else (feature toggles, retry policy, MCP servers, custom providers) is on the Settings page and in settings.json. Enable features by name and disable plugins you don't need:

{
  "enableTeams": true,
  "disabledPlugins": ["terminals", "lsp"]
}

🎯 Skills

Skills are reusable instruction packs the model loads when your task matches. Drop a SKILL.md folder into any of these — the harness scans all three:

Location Scope
~/.blazorly/skills/ global, harness-native (wins name collisions)
~/.agents/skills/ the shared convention other agent tools read — one collection serves them all
<workspace>/.blazorly/skills/ this project only

Each skill is a folder with a SKILL.md: name + description frontmatter, markdown body with the instructions. The system prompt carries only the installed count — never the catalog — so prompt size stays flat as skills grow. When your brief matches one, the model calls search_skills with task keywords, then skill with the name to load the body, and follows the loaded instructions — you never invoke anything manually.

🤖 Multi-agent & delegation

Blazorly runs sub-agents — each with its own session, provider, and workspace — behind these surfaces:

Delegation runs inside one chat. Sub-agent sessions don't clutter your sidebar. The Agents panel (beside the task list) shows live status per worker — pulsing while running, a checkmark when done, each row links to the child session for full inspection. A delegated child can never hang waiting for you: its ask_user_question answers itself.

The system prompt reserves delegation for genuinely large or parallelizable work — a file edit or quick lookup stays inline with the lead.


🔧 Build from source

Requires .NET SDK 10.0. Linux needs cc/gcc for the Landlock sandbox helper (auto-compiled on first use); macOS and Windows build and run fine without it — the confining presets just can't jail bash/run_code there.

git clone https://github.com/deepakkumar1984/blazorly-harness.git
cd blazorly-harness
dotnet build Blazorly.Harness.slnx
dotnet test

dotnet run --project src/Blazorly.Harness.Web          # UI at http://localhost:5080
dotnet run --project src/Blazorly.Harness.Cli -- run "hello"

Browser appearance logic also has dependency-free JavaScript tests: node --test tests/web/appearance.test.mjs (Node.js 18+).


📄 License

MIT — see LICENSE.

blazorly-harness (deepakkumar1984/blazorly-harness)

Searching Database…

A token efficient, local LLM friendly agentic coding harness: a complete agent runtime (agent loop, tool pipeline, sandboxing, session persistence) with four front-ends — a Blazor web UI, a headless CLI, and JSON-RPC / ACP stdio servers for editors and automation.

Size
7.3 MB
Stars
121
Age
1mo
Commits · 90 Days