Repository navigation
TimeWarp.Nuru 3.0: CLIs your agents can call
Every Nuru app now describes itself to an agent and accepts its arguments as JSON. You don't need an
MCP server or a second schema. It's one package.
myapp --capabilities # endpoints[] + invocation{}
myapp deploy --json-args '{"env":"staging","tag":"3.0.0"}' # route literal on argv, values as JSON
myapp apply_patch --json-args @./patch.json # or - for stdin📝 Blog: https://thefreezeteam.com/posts/steven-t-cramer/2026/10/2026-10-15-nuru-3.0-release · 📖 Migrating to 3.0
Agent contract
--capabilitiesemits a flatendpointslist. Each endpoint carriespattern,groupPath,
aliases,kind(query,command,idempotentCommand, orunspecified),parameters, and
options.examplesis included only when the route declares them. A top-levelinvocation
object names the transport:jsonArgs,stdin: "-",filePrefix: "@",merge: "argvOverridesJson",
andunknownKeys: "error".--json-argsbinds parameter and option values from inline JSON,@path, or-(stdin) on
the same code path as argv. Argv values override JSON. An unknown key is an error with exit code 1.--group-filter <g>filters that JSON document.--capabilities --search <q>does not.
It runsnuru searchand prints that tool's listing.TimeWarp.Nuru.Search(dotnet tool install -g TimeWarp.Nuru.Search) addsnuru indexand
nuru search, which run full-text search over the capabilities of every CLI you index.tw-nuruskill (skills/tw-nuru/SKILL.md) gives an agent the route syntax, the builder API,
and the testing patterns in context. It replaces the MCP server.
Also new in 3.0
- REPL key-binding profiles:
Default,Emacs,Vi, andVSCode. A global JSON profile can be
set withNURU_KEYBINDINGS, and thekey-bindingscommand lists the bindings. - Shell completion for bash, zsh, fish, and PowerShell:
--generate-completionand
--install-completion. Completion can handFileandDirectorycandidates to the shell. - Route examples appear in
--helpand in--capabilities. - Endpoint classes use
TimeWarp.Mediatorcontracts. The generatedIMediator,ISender, and
IPublisherare available with or without Microsoft DI. Nuru 3.0.0 depends on stable
TimeWarp.Mediator14.0.0, so you don't need--prereleaseor a prerelease opt-in for Mediator. - Nuru 3.0.0 depends on stable
TimeWarp.Amuru2.0.0 (new since 2.x). You don't need
--prereleaseor a prerelease opt-in for Amuru. - Pre-release review: Grok and Claude agents filed 28 findings. 22 were fixed before the tag.
20 of those, plus a changelog backfill, landed in 15 PRs (#283–#297, stacked in #298). The other
two were fixed on the review task (#282). Six are scheduled after 3.0. The record is in
kanban/done/482-complete-code-review-of-timewarpnuru-before-the-official-30-release/review/.
⚠️ Breaking changes
- Contracts moved to
TimeWarp.Mediator:IMessage,IQuery<T>,ICommand<T>,
IIdempotentCommand<T>,IIdempotent, the three handler interfaces, andUnit. To migrate:- Add
using TimeWarp.Mediator;. - Handlers return
Task<T>instead ofValueTask<T>. UseUnit.TaskandTask.FromResult. - Remove
using static ...Unit;.
- Add
[NuruRoute]endpoint classes must bepublic
(timewarp-mediator#64).- Endpoint kind precedence: Query, then IdempotentCommand, then Command.
--capabilitiesoutput is a flatendpointslist withgroupPath. It used to be grouped.- Removed:
MapDefault. UseMap("").AddReplSupport(). UseAddRepl().- The
TimeWarp.Nuru.Mcppackage, which is no longer published. Use the skill.
- Obsolete, still present in 3.0:
NuruAppBuilder.Services(it throws) andAddReplOptions. - Targets
net10.0only. The minimum SDK is 10.0.3xx.
See Migrating to 3.0
for before and after code, and changelog.md
for every beta.
Full Changelog: v3.0.0-beta.80...v3.0.0