umbraco is an agent-first command-line wrapper around the Umbraco Management API.
Implementation runtime is Go (cmd/umbraco).
- Primary input path is raw JSON (
--json) and structured query JSON (--params). - Partial datatype updates can use
--merge-jsonto fetch, merge, and send a full payload automatically. - Schema is introspectable at runtime (
umbraco schema ...). - Response size should be constrained (
--fields) to protect context window budget. - Mutations must be rehearsed first (
--dry-runpreviews the planned request without executing). - Updates follow one contract everywhere:
--jsonreplaces the resource wholesale,--merge-jsonfetches and deep-merges. Hard deletes require--forceor--dry-run. - Config resolves from an explicit
--profile/--configor active profile first; otherwise env, project config,.umbraco-cli.env,.env, user config, and local.NETURL discovery in that order. - Auth/connectivity errors include the resolved base URL to make misconfiguration obvious.
- Exit codes are a contract: 0 success, 1 usage/local error, 2
schema diffdifferences found, 3 auth failure, 4 Management API error.
umbraco auth login --base-url "https://localhost:44314" --client-id "..." --client-secret "..."umbraco --profile dev auth login --base-url "https://localhost:44314" --client-id "..." --client-secret "..."umbraco auth listumbraco auth use devumbraco auth statusumbraco auth logout --dry-run
umbraco document get <id>umbraco document rootumbraco document children <id>umbraco document search --params '{"query":"home"}'umbraco document search --query "home" --under <parent-id>umbraco document update <id> --property skills --value 'C#;Go' --dry-runumbraco document update <id> --property skills --value 'C#;Go' --save-and-publish --culture en-US --dry-runumbraco document update <id> --merge-json '{"values":[{"alias":"title","value":"New title"}]}' --dry-runumbraco document bulk-update --id <id> --merge-json '{"values":[{"alias":"title","value":"New title"}]}' --dry-runumbraco document csv-update --file partners.csv --property skills --dry-run
umbraco media get <id>umbraco media rootumbraco media children <id>umbraco media search --query "hero"
umbraco tree walk "Home/Partners/Partner List"
umbraco doctype get <id>umbraco doctype list --recursive --types-only --fields id,name,aliasumbraco mediatype list --recursive --types-only/umbraco membertype listumbraco schema diff dev live/umbraco schema diff dev live --entity template,language,dictionaryumbraco datatype list --skip 0 --take 50umbraco datatype search --query "rich text"umbraco datatype extensions <id>umbraco datatype add-extension <id> My.Extension --dry-runumbraco datatype remove-extension <id> My.Extension --dry-runumbraco schema document.update
umbraco document version list <documentId>/umbraco document version rollback <versionId>umbraco document audit-log <id>umbraco webhook list/umbraco webhook create --json '{...}'/umbraco webhook logs [id]umbraco language list/umbraco language cultures/umbraco language create --iso-code da-DK --name Danishumbraco user list/umbraco user current/umbraco user permissions --ids <id> --type documentumbraco user client-credentials create <userId> --client-id ... --client-secret ...umbraco user-group list
umbraco published-cache status/umbraco published-cache rebuild --force(stale published content)umbraco indexer list/umbraco indexer rebuild ExternalIndex --force --wait(missing search results)umbraco redirect list --filter <url-substring>/umbraco redirect statusumbraco document bin list/umbraco document bin empty --dry-run(media has the samebinsubgroup)umbraco document grep <substring>(exhaustive content scan)
umbraco api GET "/item/document/ancestors?id=<id>&id=<id>"umbraco server statusumbraco logs list --level Error --take 50umbraco logs search --around 2026-06-23T11:38:51Z --minutes 5 --source-context My.Source --flat --redact-defaultumbraco health groups
- Build:
go build ./... - Test:
go test ./... - Run:
go run ./cmd/umbraco --help