Git & YAML
Every workspace is a real Git repository: detections as YAML, history you can diff, and an optional mirror to GitHub, GitLab, Gitea or Azure DevOps.
Git is canonical
A workspace is not a database row with a Git export bolted on: it is a Git repository, one per workspace under /data/repos. Committed files are the source of truth for content; when a commit lands (a merge, a pull from a mirror), Talon hydrates the database from it. That inversion is what makes detection-as-code real: content is versioned, diffable and reproducible.
The exact path is <GIT_STORAGE_PATH>/<orgId>/projects/<workspaceId>, namespaced by organisation. The image sets GIT_STORAGE_PATH=/data/repos; outside the container it defaults to ./storage/repos. Writes to one workspace repository are serialised through a repository lock, so two concurrent saves cannot race the same Git index.
Repository layout
Each workspace repository follows a predictable structure, so the same layout works whether Talon reads it or you clone a mirror:
New workspaces use this nested layout; workspaces created before it keep their detections in detections/ at the repository root. A detection YAML carries its metadata (severity, MITRE mapping, data sources, false-positive notes, tests) and a queries block with sigma, splunk, sentinel, elastic and yara_l entries: the same file the release pipeline converts on deploy.
Branches & history
Mirroring to a Git host
Talon Connect → Source Control mirrors a workspace to a repository on GitHub, GitLab, Gitea or Azure DevOps over HTTPS. Setting it up needs the workspace owner role; pushing and pulling need engineer. The full walkthrough is in Source Control.