| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Resource name (lowercase kebab-case, starts with a letter, 2-64 chars). Names are IMMUTABLE — renaming = delete + recreate (loses URL, DNS, policy links). | |
| tags | No | Optional tags for the policy (behave like Kubernetes labels for selectors and compliance). | |
| addUsers | No | User links to add (e.g., ["//user/alice"]) | |
| addGroups | No | Group links to add | |
| targetAll | No | Set to true to target all resources of the kind. Pick the target scope that matches intent (combining scopes is legal; target=all wins). | |
| targetKind | Yes | Target resource kind (e.g., "secret", "workload", "identity"). Only the kinds listed by get_permissions have meaningful permission schemas — confirm permission names there before binding. | |
| description | No | Policy description | |
| targetLinks | No | Target resource links (e.g., ["//secret/my-secret"]). GVC-scoped kinds (workload/identity/volumeset/dbcluster) need the gvc segment: //gvc/GVC/workload/NAME. Pick the target scope that matches intent (combining scopes is legal; target=all wins). | |
| targetQuery | No | Dynamically target resources matching a query (e.g. all secrets tagged env=prod). Pick the target scope that matches intent (combining scopes is legal; target=all wins). | |
| addIdentities | No | Identity links to add (e.g., ["//gvc/my-gvc/identity/my-identity"]). Identities are GVC-scoped — the gvc segment is required. | |
| addPermissions | No | Permissions to grant (e.g., ["reveal", "use"]). For the full list run get_permissions. Secret values need `reveal`, not `read`. | |
| addServiceAccounts | No | Service account links to add (e.g., ["//serviceaccount/sa-1"]) | |