⚠ Deprecated: Legacy
Package Description
License
—
Deps
0
Install Size
—
Vulns
✓ 0
Published
Mar 1, 2026
$ dotnet add package UtilityAi.Compass.CliUtilityAi.Compass is a governed host for UtilityAI-based assistants.
If you are evaluating Compass for practical use, there are two main workflows:
This README is organized around those two workflows first.
Start with:
Start with:
Start with:
git clone https://github.com/mrrasmussendk/Compass.git
cd Compass
dotnet build UtilityAi.Compass.sln
dotnet test UtilityAi.Compass.sln
./scripts/install.sh
# Windows PowerShell: .\scripts\install.ps1
dotnet run --project samples/Compass.SampleHost
Expected startup (wording may vary by build/version):
... started. Type a request (or 'quit' to exit):
Compass ships as a CLI application (compass) and can also be executed directly via dotnet run.
dotnet run --framework net10.0 --project src/UtilityAi.Compass.Cli
dotnet tool install --global UtilityAi.Compass.Cli
compass --help
The CLI supports these startup arguments:
--help
--setup
--list-modules
--install-module <path|package@version>
--new-module <Name> [OutputPath]
--helpPrint available CLI arguments.
--setupRuns the bundled installer script (scripts/install.sh or scripts/install.ps1) to configure provider settings and runtime environment.
--list-modulesShows standard modules + plugin DLLs already installed in the runtime plugins/ folder.
--install-module <path|package@version>Installs a module from either:
.dll.nupkgPackage.Id@1.2.3)Examples:
compass --install-module /absolute/path/MyPlugin.dll
compass --install-module /absolute/path/MyPlugin.1.0.0.nupkg
compass --install-module Package.Id@1.2.3
--new-module <Name> [OutputPath]Scaffolds a minimal module project directory.
Examples:
compass --new-module MyPlugin
compass --new-module MyPlugin /absolute/path/to/output
When you start CLI with no startup argument, it enters interactive mode.
In interactive mode, use:
/help/setup/list-modules/install-module <path|package@version>/new-module <Name> [OutputPath]You can also type plain natural-language requests (for example: "summarize this file") and Compass routes/executes the best proposal.
compass --install-module ....compass --list-modules to verify installation.compass --new-module MyPlugin.--install-module.Compass is designed to be extended with third-party modules while keeping execution governed and predictable.
Plugins can provide one or more of:
ICapabilityModule (primary action/proposal producer)ISensor (publishes facts used for routing/governance)ICliAction (discoverable CLI action endpoint)At startup, PluginLoader discovers plugin types and registers them into DI.
dotnet new classlib -f net10.0 -n MyCompassPlugin
cd MyCompassPlugin
For metadata-driven governance, add the Compass SDK package and UtilityAI runtime dependency used for proposals.
dotnet add package UtilityAi.Compass.PluginSdk
dotnet add package UtilityAi
ICapabilityModuleusing UtilityAi.Capabilities;
using UtilityAi.Compass.Abstractions;
using UtilityAi.Compass.PluginSdk.Attributes;
using UtilityAi.Consideration.General;
[CompassCapability("my-domain", priority: 5)]
[CompassGoals(GoalTag.Answer, GoalTag.Summarize)]
[CompassLane(Lane.Communicate)]
[CompassCost(0.1)]
[CompassRisk(0.0)]
[CompassCooldown("my-domain.action", secondsTtl: 30)]
public sealed class MyModule : ICapabilityModule
{
public IEnumerable<Proposal> Propose(Runtime rt)
{
yield return new Proposal(
id: "my-domain.answer",
cons: [new ConstantValue(0.7)],
act: _ => Task.CompletedTask
);
}
}
dotnet build
| Attribute | What it controls |
|---|---|
CompassCapability | Capability domain identity and priority |
CompassGoals | Which GoalTag values this module should handle |
CompassLane | Lane affinity for routing |
CompassCost | Estimated cost penalty in scoring |
CompassRisk | Risk penalty in scoring |
CompassCooldown | Cooldown memory key + TTL |
CompassConflicts | Optional conflict IDs/tags against other proposals |
ISensor)Use sensors to publish additional facts into the runtime bus. Facts can influence filtering, safety, cooldown behavior, or custom module logic.
ICliAction)Use CLI actions when your plugin should expose explicit command-oriented behavior.
using UtilityAi.Compass.Abstractions.CliAction;
public sealed class ReadConfigAction : ICliAction
{
public CliVerb Verb => CliVerb.Read;
public string Route => "config";
public string Description => "Read configuration values";
public Task<string> ExecuteAsync(string input, CancellationToken ct = default)
=> Task.FromResult("Current config: ...");
}
You can load your plugin in two supported ways:
plugins/Place plugin DLLs next to the running executable under a plugins/ folder.
compass --install-module /absolute/path/MyCompassPlugin.dll
Then restart Compass CLI.
CompassGovernedSelectionStrategy applies governance stages in order:
ConflictIds, ConflictTags)Scoring formula:
effectiveScore = utility - (CostWeight * EstimatedCost) - (RiskWeight * RiskLevel)
Hysteresis (stickiness) helps avoid rapid winner flipping when scores are close.
Compass supports side-effect awareness:
ReadOnlyWriteDestructiveHitlGateModule can intercept destructive requests (for example: delete/override/deploy intent) and route them through a human approval channel before execution continues.
UtilityAi.Compass.sln
├── src/
│ ├── UtilityAi.Compass.Abstractions/ # Enums, facts, interfaces
│ ├── UtilityAi.Compass.Runtime/ # Sensors, modules, strategy, DI
│ ├── UtilityAi.Compass.PluginSdk/ # Attributes + metadata provider
│ ├── UtilityAi.Compass.PluginHost/ # Plugin loader and DI integration
│ ├── UtilityAi.Compass.Hitl/ # Human-in-the-loop module/facts
│ ├── UtilityAi.Compass.StandardModules/ # Built-in reusable modules
│ ├── UtilityAi.Compass.WeatherModule/ # Example weather-oriented module
│ └── UtilityAi.Compass.Cli/ # CLI host/tooling
├── samples/
│ ├── Compass.SampleHost/ # Console/Discord sample host
│ ├── Compass.SamplePlugin.Basic/ # Minimal plugin sample
│ └── Compass.SamplePlugin.OpenAi/ # Model-backed plugin sample
├── docs/
│ ├── INSTALL.md
│ ├── USING.md
│ ├── EXTENDING.md
│ └── CONTRIBUTING.md
└── tests/
└── UtilityAi.Compass.Tests/
If your primary goal is adoption, start with CLI workflows. If your primary goal is product differentiation, start with extension workflows.