Autonomous coding agents on Windows (.NET 8). Phase 1 foundation plus Phase 2 multi-agent Master approval and Windows Service autostart.
- .NET 8 SDK (or a newer SDK that can target
net8.0) - Docker Desktop (for local PostgreSQL)
- An OpenAI API key (for plan generation / decision classification)
- Administrator shell (only if installing the Windows Service)
cd C:\devage
docker compose up -dDefault connection (override with DEVAGE_CONNECTION_STRING):
Host=localhost;Port=5432;Database=devage;Username=devage;Password=devage
$env:DEVAGE_OPENAI_API_KEY = "sk-..."Optional: set OpenAI:ApiKey / OpenAI:Model in src/Devage.Host/appsettings.json.
dotnet build C:\devage\Devage.slnEF Core migrations apply automatically when the Host starts.
dotnet run --project C:\devage\src\Devage.Cli -- host start
dotnet run --project C:\devage\src\Devage.Cli -- -born
dotnet run --project C:\devage\src\Devage.Cli -- -start <name>
dotnet run --project C:\devage\src\Devage.Cli -- -list
dotnet run --project C:\devage\src\Devage.Cli -- -status <name>
dotnet run --project C:\devage\src\Devage.Cli -- -logs <name>
dotnet run --project C:\devage\src\Devage.Cli -- -stop <name>
dotnet run --project C:\devage\src\Devage.Cli -- -kill <name>
dotnet run --project C:\devage\src\Devage.Cli -- host stopOr run the Host directly:
dotnet run --project C:\devage\src\Devage.HostControl API default: http://127.0.0.1:5088 (override with Host:Url or DEVAGE_HOST_URL for the CLI).
Creates an agent in Born status and interactively asks:
- Role (
Agent|Master) - Optional Master (id/name) for subordinate Agents
- Which tools to enable (from Host registry, including bundled
web) - Per-tool configuration fields
Agents without a Master stay autonomous: they only ask the user for Important/Critical steps.
Agents with MasterId create a plan, notify the Master, and wait until the Master Approves, Rejects, or Modifies the plan.
# 1) Create a Master
dotnet run --project C:\devage\src\Devage.Cli -- -born --name boss --role Master
# 2) Create a subordinate Agent (or assign later)
dotnet run --project C:\devage\src\Devage.Cli -- -born --name worker --role Agent --master boss
# or:
dotnet run --project C:\devage\src\Devage.Cli -- -assign-master worker boss
dotnet run --project C:\devage\src\Devage.Cli -- -assign-master worker none # detach → autonomous again
# 3) Start subordinate — it waits for Master plan review
dotnet run --project C:\devage\src\Devage.Cli -- -start worker
# 4) Master reviews pending plans from all subordinates
dotnet run --project C:\devage\src\Devage.Cli -- -pending-plans boss
dotnet run --project C:\devage\src\Devage.Cli -- -subordinates boss
dotnet run --project C:\devage\src\Devage.Cli -- -approve-plan <planId> --comment "LGTM"
dotnet run --project C:\devage\src\Devage.Cli -- -reject-plan <planId> --comment "Too risky"
dotnet run --project C:\devage\src\Devage.Cli -- -modify-plan <planId> --steps-json .\modified-steps.json --title "Revised" --comment "Drop step 2"--steps-json is a JSON array:
[
{
"title": "Research",
"description": "Fetch docs",
"toolName": "web",
"toolInputJson": "{\"url\":\"https://learn.microsoft.com\"}",
"decisionClass": "Routine",
"justification": "Read-only"
}
]API surface (additive):
| Method | Path | Purpose |
|---|---|---|
| POST | /api/agents/{id}/master |
Assign / clear Master |
| GET | /api/masters/{id}/agents |
List subordinates |
| GET | /api/masters/{id}/pending-plans |
Pending plans for one Master |
| GET | /api/plans/pending?master= |
Pending plans (optional filter) |
| POST | /api/plans/{planId}/master-decision |
Approve / Reject / Modify |
So Running agents resume after reboot, install Devage.Host as a Windows Service (elevated shell):
# Requires Administrator
dotnet run --project C:\devage\src\Devage.Cli -- host install-service
dotnet run --project C:\devage\src\Devage.Cli -- host service-status
dotnet run --project C:\devage\src\Devage.Cli -- host uninstall-serviceinstall-service publishes the Host to %LOCALAPPDATA%\devage\service\, creates service DevageHost (start= auto), and starts it. Set DEVAGE_CONNECTION_STRING and DEVAGE_OPENAI_API_KEY as machine (or service-account) environment variables so the service can reach Postgres and OpenAI after reboot.
For day-to-day development you can still use devage host start (foreground/background process via CLI) without the service.
- Plan-first: on
-start, Host builds a plan (LLM with fallback), then executes steps - Master gate: if
MasterIdis set, plan staysPendinguntil Master Approve/Reject/Modify - Decision class:
Routine|Important|Critical— Important/Critical require user confirmation (even under a Master, after plan approval) - Sandbox: file writes stay under each agent's
WorkspaceRoot - Checkpoint / resume: Host boot reloads agents with status
Running - Triple logging: console +
data/agent-*.log+ PostgreSQLaction_logs - Plugins: drop tool DLLs into
plugins/;AssemblyLoadContext+FileSystemWatcherhot-load them
src/Devage.Cli
src/Devage.Host
src/Devage.Core
src/Devage.Llm
src/Devage.Persistence
src/Devage.Tools.Abstractions
src/Devage.Tools.Web
plugins/
data/
docker-compose.yml
| Variable | Used by | Purpose |
|---|---|---|
DEVAGE_CONNECTION_STRING |
Host | PostgreSQL connection |
DEVAGE_OPENAI_API_KEY |
Host | OpenAI API key |
DEVAGE_HOST_URL |
CLI | Control API base URL |
- Phase 2 — Master role approve/reject, multi-agent coordination, Windows Service autostart ✅
- Phase 3 — Email / Teams tools (Microsoft Graph)
- Phase 4 — Live dashboard + hardening
See LICENSE.