Skip to content

Presets

Presets encode a security posture: which action manifests to extract and how the initial ACL is shaped. They are the primary mechanism for tailoring LatchGate to a specific use case without manual manifest curation or policy editing.

LatchGate ships eleven built-in presets:

PresetManifestsWildcard grantUse case
quickstartListed (4 actions)risk_below:medium — only low-risk auto-grantedFirst evaluation — two auto-allowed reads and two gated writes. No external credentials required.
agentTagged agentrisk_below:high — low and medium auto-grantedGeneral-purpose AI agent: code, issues, docs, tasks, search, and filesystem. High-risk actions gated.
codingTagged codingrisk_below:high — low and medium auto-grantedCoding agent: filesystem, GitHub, web search. Writes and PRs gated.
read-onlyTagged research (read-only)risk_below:medium — only low-risk auto-grantedRead and search only — web, APIs, docs, feeds, and public registries. All write actions blocked.
opsTagged agent,devopsrisk_below:high — low and medium auto-grantedFull operations: agent + devops actions. Infrastructure changes and deploys require approval.
devopsTagged devopsrisk_below:high — low and medium auto-grantedInfrastructure and deployment: CI/CD, DNS, monitoring, cloud storage, incident management.
dataTagged data-pipelinerisk_below:high — low and medium auto-grantedStorage, monitoring, and financial integrations — S3, Datadog, Grafana, Stripe. Write actions gated.
teamTagged teamrisk_below:high — low and medium auto-grantedAgent plus email, messaging, calendar, and notes. Sending messages and creating events gated.
lockdownFull catalognone — nothing auto-grantedFull action catalog, nothing auto-granted. Every action requires a named principal or approval.
blankNonenone — nothing auto-grantedEmpty registry. Add actions individually via the TUI or the manifests directory.
permissiveFull catalogall — everything auto-grantedDev and demo only. Never deploy. Requires unsafe dev mode.

The wildcard_grant field in a preset controls which actions are automatically available to any authenticated principal (the * ACL entry):

  • all — every extracted action is granted to *. Dev/demo only.
  • risk_below:high — actions with risk level low or medium are granted. High and critical actions require a named principal or human approval.
  • risk_below:medium — only low risk actions are granted. Everything else requires explicit authorization.
  • none — no actions are granted to *. Every action requires a named principal entry in the ACL.

Named principals (added via latchgate policy grant) can always access actions regardless of wildcard grant level.

Presets that specify manifests = "tagged:<name>" extract only the subset of the built-in action catalog tagged with that preset name. This keeps the attack surface minimal — a read-only deployment never sees http_delete or github_pr_create manifests.

Presets with manifests = "all" extract the full catalog.

Terminal window
latchgate init # interactive — preset picker
latchgate init --preset coding # non-interactive
latchgate init --preset lockdown --location user # user-global install

The interactive wizard presents all eleven presets with descriptions. The selected preset determines which manifests are extracted and how data.json is populated.

Terminal window
latchgate init --list-presets # show all presets with descriptions
latchgate init --export-preset coding # dump raw TOML for customization

--export-preset outputs the preset TOML to stdout. Redirect to a file, modify it, and pass the file path to --preset for a custom preset:

Terminal window
latchgate init --export-preset coding > my-preset.toml
# Edit my-preset.toml...
latchgate init --preset ./my-preset.toml

A custom preset is a TOML file with this structure:

[preset]
name = "my-custom"
description = "Internal APIs only. No public web access."
manifests = "tagged:internal-api" # or "all"
[preset.policy]
wildcard_grant = "risk_below:high" # or "all", "risk_below:medium", "none"

Custom presets can reference custom manifest tags. To tag a manifest for a custom preset, add the tag to the manifest’s tags field:

# In your action manifest YAML:
tags: ["internal-api", "coding"]

Pass the file path to latchgate init --preset ./my-preset.toml.

FieldRequiredValuesDescription
preset.nameyesstringPreset identifier. Used in policy_version tracking.
preset.descriptionyesstringHuman-readable summary shown in --list-presets and preset show.
preset.manifestsyes"all", "tagged:<tag>", "listed:<id>,<id>", "none"Which manifests to extract from the catalog.
preset.policy.wildcard_grantyes"all", "risk_below:high", "risk_below:medium", "none"What the * ACL entry receives.

Every data.json generated or modified by LatchGate includes a policy_version string that encodes the preset origin:

  • coding-init — initial generation from latchgate init
  • coding-init-1 — after a latchgate policy grant/revoke increment