ECAssistant.Core
12.9.13
dotnet add package ECAssistant.Core --version 12.9.13
NuGet\Install-Package ECAssistant.Core -Version 12.9.13
<PackageReference Include="ECAssistant.Core" Version="12.9.13" />
<PackageVersion Include="ECAssistant.Core" Version="12.9.13" />
<PackageReference Include="ECAssistant.Core" />
paket add ECAssistant.Core --version 12.9.13
#r "nuget: ECAssistant.Core, 12.9.13"
#:package ECAssistant.Core@12.9.13
#addin nuget:?package=ECAssistant.Core&version=12.9.13
#tool nuget:?package=ECAssistant.Core&version=12.9.13
ECAssistant.Core
The embeddable .NET agent library. Sessions, tools, memory, streaming inference — a few lines of code turn any .NET 8 app into an intelligent, tool-using agent.
Part of ECAssistant — small, lightweight, open source. Your models, your keys, your machine.
Install
Public on nuget.org — no token, no auth:
dotnet add package ECAssistant.Core
Hello, agent
using ECAssistant.Core.Composition;
using ECAssistant.Core.Engine;
using ECAssistant.Core.Session;
// One call wires config, model resolution, tools, memory and inference
var root = new EcaCompositionRoot(userConfigDir, args);
var services = root.Build();
// Create a session and register an output listener (streamed tokens + tool events)
var sessions = new SessionManager(services.Config, services.ModelPath, workingDir, services.Logger);
var session = sessions.CreateSession("main");
session.AddListener(myListener); // implements IOutputListener
await services.SessionBuilder.BuildAsync(session, externalTools: null);
// Run the agent — it plans, calls tools, and streams its answer
var loop = new EDecisionLoop(session.Engine, session);
await loop.ExecuteInteractiveLoop("Summarize the docs in this folder");
A complete, runnable wiring example lives in ECAssistantConsole.
What you get
| Capability | What it means for your app |
|---|---|
| Agent engine | Multi-session orchestration, sub-agents, self-correction, task planning |
| 11 built-in tools | Shell, file I/O, code editing, git, dotnet, sub-agents, vision structure — permission-gated (approve once / always this session / deny — session-scoped, never persisted) |
| Custom tools | Implement one interface, register it. That's the whole API. |
| Memory | Vector memory (embeddings) + daily notes + curated long-term memory |
| Local or remote LLM | GGUF via the bundled LLM server, or any OpenAI-compatible endpoint — identical code path |
| Model catalog | Data-driven and pulled live from GitHub at setup time (embedded fallback) — add/update models without code changes |
| First-run wizard | Provisions server + models interactively; nothing downloads at chat time |
What makes it different
- Vision structure extraction (
EVisionStructure) — point the agent at a screenshot, UI image, or PDF page and get back a fixed, versioned JSON schema (schemaVersion 1.0): elements (headers, labels, buttons, inputs...) with approximate bounding boxes, label↔control associations, and semantic groups. Never-null design: unknown enums map toOther, missing fields get defaults, dangling refs are stripped — downstream code can consume it blind. Server-side GBNF grammar enforcement makes the shape physically guaranteed, and a deterministic validator normalizes semantics on top. - Grammar-forced structured decisions — the agent's act/answer/toolcall decisions are token-level constrained (GBNF), not prompt-asked. Valid tool calls with typed JSON Schema parameters, every time.
- Interactive checkpoints (
EAskUser) — the model escalates genuine ambiguity to a real choice prompt instead of guessing; falls back to autonomous mode when unattended. - Self-correction with loop detection — malformed outputs trigger error-feedback retries; long-range repeat loops are detected and stopped before they burn your budget.
- Thin by design — 2.8 MB tool, server fetched on demand; local-first privacy with a remote escape hatch in the same code path.
Architecture boundary (by design)
Core talks to the ECAssistantLLM server exclusively over OpenAI-compatible HTTP. It knows nothing about model loading or runtime internals — the server is a self-contained, separately versioned product. Point llm_provider at any OpenAI-compatible endpoint and Core doesn't care what's behind it.
- No in-process LLamaSharp — zero native model dependencies in your project
- No embedded blobs — even the ~170 MB server is fetched on demand at wizard time, never bundled
- No telemetry — nothing leaves your machine except the LLM calls you configured
Docs & architecture
- ARCHITECTURE.md — full class map, dependency flow, setup state machine
- API-INDEX.md — per-package API reference
Related repos
| Repo | What it is |
|---|---|
| ECAssistant | Landing repo & docs |
| ECAssistantLLM | Self-contained local LLM server (also standalone) |
| ECAssistantTUI | Reusable terminal UI library |
| ECAssistantConsole | Reference CLI host — dotnet tool install -g ECAssistant.Console |
License
MIT — © 2026 SideDevEC
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- ECAssistant.LLM.Server (>= 14.10.1)
- Microsoft.AspNetCore.DataProtection (>= 8.0.11)
- Microsoft.AspNetCore.DataProtection.Extensions (>= 8.0.11)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.5)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|