TL;DR: We open-sourced dtctl, a CLI for Dynatrace that brings terminal-native workflows and AI agent integration to the platform. Manage workflows, dashboards, SLOs, and 20+ resource types from your terminal or let your AI coding assistant do it. Install it with brew install dynatrace-oss/tap/dtctl.
When you're scripting a deployment pipeline, managing configurations across environments, or letting an AI agent operate your observability stack -- you want a CLI.
dtctl is a CLI that gives you a consistent interface to the Dynatrace platform. Single binary, zero dependencies, runs on Linux, macOS, and Windows. One grammar, one tool, all resources:
dtctl get workflows # list all workflows
dtctl describe dashboard my-dashboard # inspect a dashboard by name
dtctl apply -f slo.yaml # create or update -- idempotently
dtctl query "fetch logs | limit 10" # run DQL right from your terminal
dtctl exec copilot "What caused the spike?" # ask Davis CoPilot
If you've used tools like kubectl or gh, the pattern will feel familiar: verb first, resource second, done.
The project is open source under Apache 2.0 and available on GitHub: dynatrace-oss/dtctl.
You automate everything else -- why not your observability platform?
Here's what dtctl gives you over raw API calls:
dtctl auth login opens your browser for SSO authentication -- no more copying API tokens around. Tokens are stored in your OS keyring and refreshed automatically.dtctl config use-context prod.dtctl apply -f workflow.yaml creates if new, updates if it exists. No more manual GET-then-POST-or-PUT dances.-o json, -o yaml, etc. Pipe it into jq, feed it to another script, or just read a table.--mine filter. Scope any listing to resources you own with dtctl get workflows --mine. Handy in shared environments.--set env=prod --set host=h-123 and reuse them across environments.readonly and sleep well at night. Context-based safety levels prevent accidental mutations before they hit the wire (client side enforcement).dtctl get workflows --watch gives you a live-updating terminal view with color-coded change indicators.CLI tools are a natural fit for AI coding agents -- they're already running in a terminal, and a well-structured command with predictable output is exactly the kind of interface an LLM can use reliably. dtctl was designed from the ground up with this in mind, serving as an interface between AI coding agents and the Dynatrace platform. Run it with --plain -o json and any agent gets clean structured output it can reason about -- no spinners, no color codes, no interactive prompts.
It ships with a built-in skill file that teaches AI assistants how to operate your Dynatrace environment. Drop it into your project, and your agent can query logs, check SLO status, trigger workflows, and manage configurations without you writing a single line of glue code.
Over 20 resource types today, including workflows, dashboards, notebooks, SLOs, buckets, settings, apps, functions, notifications, users, groups, and cloud connections (Azure, GCP). Most support full CRUD, plus extras like history, restore, diff, share, and watch where the underlying API allows it.
Check the implementation status matrix for the full picture.
# Install via Homebrew
brew install dynatrace-oss/tap/dtctl
# Configure your first context
dtctl config set-context my-env \
--url https://abc12345.apps.dynatrace.com \
--token <your-api-token>
# Start exploring
dtctl get workflows
dtctl get dashboards --mine
dtctl query "fetch logs | filter loglevel == \"ERROR\" | limit 5"
For detailed setup options (binary download, building from source, shell completions), see the Installation Guide. For hands-on examples covering all resource types, check the Quick Start Guide.
Want to see dtctl in action before installing? Check out the demo video on YouTube.
This is an early release -- v0.13.0 as of this writing -- and we're actively shaping the tool based on real-world usage. If you have ideas, find bugs, or want to contribute, head over to the GitHub repo and open an issue. And if you find dtctl useful, drop us a star on GitHub -- it helps others discover the project and keeps us motivated.