Configuration
Priority order
Section titled “Priority order”Configuration is resolved from highest to lowest priority:
- CLI flags —
--url,--token,--backend, etc. - Environment variables — backend-specific (see below)
- Project config —
.track.tomlin the current directory - Global config —
~/.tracker-cli/.track.toml
Config file format
Section titled “Config file format”Create .track.toml in your project directory or
~/.tracker-cli/.track.toml for global defaults.
YouTrack
Section titled “YouTrack”backend = "youtrack"url = "https://youtrack.example.com"token = "perm:base64user.base64name.token"default_project = "PROJ"backend = "jira"
[jira]url = "https://your-domain.atlassian.net"email = "you@example.com"token = "your-api-token"Linear
Section titled “Linear”backend = "linear"default_project = "PROJ" # Linear team key/name/id
[linear]token = "lin_api_xxxxxxxxxxxx"url = "https://linear.app/your-workspace" # for `track open`# api_url = "https://api.linear.app/graphql" # default# default_team = "PROJ" # optional alias for default_project# default_linear_project = "Track CLI" # optional issue Project associationMulti-backend
Section titled “Multi-backend”You can configure multiple backends in one file and switch between them:
# Default backendbackend = "youtrack"
# YouTrackurl = "https://youtrack.example.com"token = "perm:base64user.base64name.token"default_project = "PROJ"
# Jira[jira]url = "https://your-domain.atlassian.net"email = "you@example.com"token = "your-api-token"
# Link type mappings are covered below.track PROJ-123 # Uses YouTrack (default)track -b jira PROJ-123 # Uses Jiratrack -b lin ORE-123 # Uses Linear
track config backend jira # Or change the default backendtrack config backend linearLink type mappings
Section titled “Link type mappings”track issue link accepts a small set of canonical link names so commands can
stay portable across backends:
relates, depends, required, duplicates, duplicated-by, subtask, and
parent.
Backends then translate those names into the native link type expected by the
remote API. This matters when admins on your project tool rename issue link types, add
custom relationship names, or use different words for the same workflow. For
example, one Jira instance might call a dependency link Blocks, while another
calls it Requires.
subtask and parent use backend-native hierarchy APIs where available. Link
type mappings apply to the general issue-link path used by relates, depends,
required, duplicates, duplicated-by, and any custom type name you pass with
-t.
Defaults
Section titled “Defaults”| CLI link type | YouTrack | Jira | GitLab | Linear |
|---|---|---|---|---|
relates |
Relates |
Relates |
relates_to |
related |
depends |
Depend |
Blocks |
blocks |
blocks |
required |
Depend |
Blocks |
is_blocked_by |
blocks |
duplicates |
Duplicate |
Duplicate |
relates_to |
duplicate |
duplicated-by |
Duplicate |
Duplicate |
relates_to |
duplicate |
Override mappings
Section titled “Override mappings”Add a backend-specific link_mappings table to .track.toml. Keys are the CLI
link type names you want to use; values are the native backend names.
[jira.link_mappings]depends = "Requires"required = "Requires"duplicates = "Cloners"
[youtrack.link_mappings]depends = "Is required for"
[gitlab.link_mappings]duplicates = "blocks"
[linear.link_mappings]relates = "similar"With that config, scripts and interactive use keep the same command shape:
track -b j i link PROJ-10 PROJ-11 -t dependstrack -b yt i link PROJ-10 PROJ-11 -t dependstrack -b gl i link 42 43 -t duplicatestrack -b lin i link ORE-10 ORE-11 -t relatesYou can also create local aliases for custom relationship names. Unrecognized types are passed through by default, but a mapping lets your team expose a stable CLI vocabulary even if the backend’s native name is awkward:
[jira.link_mappings]qa-blocker = "Blocks"
[linear.link_mappings]design-related = "similar"track -b j i link PROJ-20 PROJ-21 -t qa-blockertrack -b lin i link ORE-20 ORE-21 -t design-relatedWorkflow packs
Section titled “Workflow packs”One [workflow_pack] table defines local query templates that overlay cached
built-ins. Selection is whole-pack (not field-merged): --config /
TRACKER_CONFIG inspects only that file; otherwise ./.track.toml if it has
[workflow_pack]; otherwise ~/.tracker-cli/.track.toml. There is no parent
directory walk.
[workflow_pack]name = "Orek backlog"description = "Project-local views for backlog work."default_project = "PROJ"
[[workflow_pack.queries]]name = "ready"description = "Issues ready for implementation."query = "project: {PROJECT} #Unresolved State: {Ready}"Rules:
nameis required and non-empty.descriptionanddefault_projectare optional; if present they must be non-empty. At least one query is required.- Each query needs non-empty
name,description, andquery. - Query names are
^[a-z][a-z0-9_]*$and unique case-insensitively. - Unknown fields on the pack or a query record are rejected.
- Only exact
{PROJECT}is substituted:--project, then packdefault_project, then top-leveldefault_project. - Pack queries win on name collision with built-ins. Duplicate names inside one
pack are an error. An invalid pack fails
-Tsearch andworkflowcommands. - The section is preserved by
config set/Config::save, but it is not editable viatrack config set. Packs are not written into.tracker-cache/. - Cached built-ins are backend-scoped: the cache records the backend that wrote
it, and
workflow list/-Tresolution only use templates matching the selected backend. A cache refreshed for another backend is ignored, not leaked — runtrack cache refreshafter switching backends. A project pack shadows the global one and its queries always win on name collision.
Environment variables
Section titled “Environment variables”Environment variables override config-file settings:
# Generic (any backend). TRACKER_* variables configure the active backend connection.export TRACKER_BACKEND=youtrackexport TRACKER_URL=https://youtrack.example.comexport TRACKER_TOKEN=YOUR_TOKEN
# YouTrackexport YOUTRACK_URL=https://youtrack.example.comexport YOUTRACK_TOKEN=YOUR_TOKEN
# Jiraexport JIRA_URL=https://your-domain.atlassian.netexport JIRA_EMAIL=you@example.comexport JIRA_TOKEN=your-api-token
# GitHubexport GITHUB_TOKEN=ghp_xxxexport GITHUB_OWNER=your-orgexport GITHUB_REPO=your-repo
# GitLabexport GITLAB_TOKEN=glpat_xxxexport GITLAB_URL=https://gitlab.com/api/v4export GITLAB_PROJECT_ID=12345
# Linearexport LINEAR_TOKEN=lin_api_xxxexport LINEAR_URL=https://linear.app/your-workspaceexport LINEAR_DEFAULT_TEAM=PROJ# export LINEAR_API_URL=https://api.linear.app/graphql# export LINEAR_DEFAULT_PROJECT="Track CLI"Backend selection
Section titled “Backend selection”The default backend is YouTrack. Choose a backend three ways:
Config file (recommended)
Section titled “Config file (recommended)”backend = "youtrack" # or "jira", "github", "gitlab", "linear"track config backend jiraEnvironment variable
Section titled “Environment variable”export TRACKER_BACKEND=jiratrack PROJ-123 # Uses JiraPer-command flag
Section titled “Per-command flag”track -b jira PROJ-123 # Jira for this command onlytrack -b yt PROJ-123 # YouTracktrack -b lin PROJ-123 # Lineartrack -b j PROJ-123 # Jira (short alias)Priority: CLI flag > environment variable > config file > default (YouTrack).
Validate capabilities
Section titled “Validate capabilities”Use config test for a quick URL/token probe, then doctor when you need to
know what the selected backend can actually do.
track config test # Single connectivity checktrack doctor # Capability audit for the effective backendtrack doctor --all-backends # Audit every configured backendtrack -b github doctor # Audit one backend with the global selectortrack doctor --project PROJ # Use a project for scoped checkstrack doctor --write-check # Local schema validation only; no remote writestrack doctor --all-backends --strict -o jsondoctor reports ok, degraded, failed, or skipped per check. A
scope-limited token may be degraded while search/read workflows still work;
bad credentials or a broken read path roll the backend up as failed.
