Skip to content

Configuration

Mohsen Beiranvand edited this page Aug 7, 2026 · 1 revision

Configuration

Two separate, independently-scoped layers. Knowing which one a change belongs to matters before you reach for a flag.

Per-repo (shared, travels with every clone)

Address key, required-field overrides, and this repo's automation rules. Stored under refs/tasks/config, the same event-sourced commit-chain mechanism as a task (see Core Concepts). There is no working-tree file. Every change goes through git task config ....

git task config show                     # key, resolved required fields, rules
git task config show --format json

User-level (personal, this machine only)

Plain TOML, never shared or synced:

  • ~/.config/git-task/config.toml: registered repos, their project grouping, default field requirements.
  • ~/.config/git-task/automation.toml: automation rules that apply across every repo you touch on this machine (see Automation).

Address key

git task config key SRV         # pin the display key (also: git task key SRV, a short alias)
git task config key             # omit the new key to print the current one

Only the numeric part of a task's id is load-bearing; the key is a cosmetic display prefix (SRV-9057e58a). If never pinned, it's derived from the repo's directory name the first time a task is created, and locked in automatically at that point.

Required fields

git task config field priority required    # or: optional
git task config field assignee required
git task config field due required
git task fields --format json               # just the effective schema, read-only

Only priority, assignee, and due are configurable this way. title and description are always required on new and cannot be turned off. A per-repo setting overrides the global default for that field; git task config show reports which layer (repo, global, or default) is currently in effect for each one.

Effective config as JSON

git task config show --format json
{
  "ok": true, "command": "config", "version": "1.0.0",
  "data": {
    "key": "SRV",
    "key_source": "config",              // or "derived"
    "fields": {
      "priority": { "required": true, "source": "repo" },
      "assignee": { "required": false, "source": "default" },
      "due":      { "required": false, "source": "default" }
    },
    "builtins": [
      { "name": "auto-unassign-done", "enabled": true, "source": "default" },
      { "name": "auto-sync", "enabled": false, "source": "default" }
    ],
    "rules": [
      { "scope": "repo", "name": "auto-triage-bugs", "on": "task.created",
        "when": "kind == \"bug\"", "actions": ["set_priority high", "add_label triage"] }
    ]
  },
  "warnings": []
}

source on a field or a built-in tells you which config layer decided its current value: repo (this repo's config ref), global (your machine-local config.toml), or default (neither set anything; this is git-task's own default).

Next: Automation for the rules engine that config rule manages.

Clone this wiki locally