Skip to main content

Unified permission sync and enforcement for AI coding agent CLIs.

Project description

gperm

gperm is a unified permission manager for multiple AI coding agent CLIs.

It keeps permission profiles in one place, applies them to native config files when possible, and falls back to inline CLI flags when a tool does not expose persistent project-level settings.

Japanese README: README.ja.md

Features

  • Unified permission profiles for claude, geminicli, copilot, codex, opencode, and antigravity
  • Global config under XDG_CONFIG_HOME/gperm/config.toml
  • Project override under ./.gperm/config.toml with higher precedence
  • gperm config show displays the active config source chain
  • gperm check shows drift between desired and native settings
  • gperm sync updates native settings, interactive by default
  • gperm inline prints inline flags for agents that support runtime permission flags
  • gperm exec runs the target CLI with expanded inline flags
  • Locale-aware CLI messages: English by default, Japanese when LANG / LC_* starts with ja

Supported agents

Agent Alias Tested version Global Project Inline Notes
Claude Code claude 2.1.62 Native Native Native Uses ~/.claude/settings.json and ./.claude/settings.json
Gemini CLI gemini, geminicli 0.31.0 Native Native Native Generates policy TOML under gperm-managed directories
GitHub Copilot CLI copilot, copilot cli, copilot-cli 1.0.2 Native Partial Native Persistent project trust is stored in global config; tool rules are runtime-only
Codex CLI codex 0.112.0 Native Native Native Project trust is managed through global projects."<path>" entries
OpenCode opencode 1.2.24 Native Native None No documented inline permission flags in gperm 0.0.1
Antigravity antigravity 1.107.0 Experimental Experimental None Inferred from installed settings keys, not vendor docs

Native config locations

Agent Global config Project config
Claude Code ~/.claude/settings.json ./.claude/settings.json
Gemini CLI ~/.gemini/settings.json and ~/.gemini/trustedFolders.json ./.gemini/settings.json
GitHub Copilot CLI ~/.copilot/config.json No native project config file; gperm uses global trust entries and inline flags
Codex CLI ~/.codex/config.toml ./.codex/config.toml
OpenCode ~/.config/opencode/opencode.json or .jsonc ./opencode.json
Antigravity ~/.config/Antigravity/User/settings.json ./.vscode/settings.json

Install

uv sync
uv run gperm --help

Commands

gperm --help
gperm --version
gperm agents
gperm config init
gperm config show
gperm check
gperm sync
gperm inline codex
gperm exec copilot -- -p "review this repo"

Config resolution

Resolution order:

  1. Built-in defaults
  2. XDG_CONFIG_HOME/gperm/config.toml
  3. ./.gperm/config.toml

The project-local ./.gperm/config.toml wins over the XDG config.

Example config

version = 1
default_profile = "balanced"

[profiles.safe]
approval = "plan"
sandbox = "read-only"
trust = false

[profiles.balanced]
approval = "default"
sandbox = "workspace-write"
trust = true
allow_shell = ["git status", "git diff"]
deny_shell = ["git push"]

[agents.codex]
profile = "balanced"
command = "codex"

[project]
profile = "safe"

Notes

  • gperm updates only permission-related keys and leaves unrelated settings intact.
  • JSONC files are parsed correctly, but comments and whitespace may be normalized on write.
  • For agents that cannot persist some permission concepts natively, gperm reports the gap instead of silently dropping it.
  • Gemini sidecar policy files are generated under ~/.config/gperm/generated/ or ./.gperm/generated/.

Release automation

Merged PRs into main can trigger an automatic release when the PR carries exactly one of these labels:

  • release:patch
  • release:minor
  • release:major

The repository now includes:

Required GitHub secrets:

  • RELEASE_GITHUB_TOKEN
  • PYPI_API_TOKEN

For a smoke test, a docs-only PR with one release label is enough to exercise the full pipeline.

References

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

global_permission-0.0.2.tar.gz (34.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

global_permission-0.0.2-py3-none-any.whl (29.5 kB view details)

Uploaded Python 3

File details

Details for the file global_permission-0.0.2.tar.gz.

File metadata

  • Download URL: global_permission-0.0.2.tar.gz
  • Upload date:
  • Size: 34.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for global_permission-0.0.2.tar.gz
Algorithm Hash digest
SHA256 6b58a779f1ec5bdc72429617a84fa12c98109272f83f1f253784b2a266012f46
MD5 ddc20285417a9c537776b32b80f7a8ee
BLAKE2b-256 caeefc6331fafcc136669c74e42de75651cf732f67523c06331b42fd48ebf3f2

See more details on using hashes here.

File details

Details for the file global_permission-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: global_permission-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 29.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for global_permission-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7698c6faf34da2ad3af50fe7531ec207e8d3d45ace7cd66663c417e7fbe96f39
MD5 40df0d218a8e25449848edf71f5a0750
BLAKE2b-256 ab4a5bb8438245ab1e4461244d9429a98e29f302f11b2d7a5732a7d41030bcce

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page