Skip to main content

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

One-line installer:

curl -sSL https://raw.githubusercontent.com/igtm/global-permission/main/install.sh | bash

Commands

gperm --help
gperm --version
gperm agents
gperm import claude ~/.claude/settings.json
gperm import opencode ~/.config/opencode/opencode.jsonc
gperm doctor
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"

Import native settings

Import a Claude or OpenCode native config into gperm:

gperm import claude ~/.claude/settings.json
gperm import opencode ~/.config/opencode/opencode.jsonc

Behavior:

  • Claude global config imports into ~/.config/gperm/config.toml
  • OpenCode global config imports into ~/.config/gperm/config.toml
  • Project-local source files import into ./.gperm/config.toml
  • Imported profiles default to imported-claude or imported-opencode

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/.
  • install.sh installs gperm, creates a starter config when missing, and runs gperm doctor.

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

Metadata

Release files for global-permission 0.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for global-permission 0.0.3
File Size Uploaded
global_permission-0.0.3.tar.gz 40.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for global-permission 0.0.3
File Interpreter ABI Platform
global_permission-0.0.3-py3-none-any.whl Python 3 none any Details

Total release size: 74.9 kB

Release files / global_permission-0.0.3.tar.gz

Download URL global_permission-0.0.3.tar.gz
Size 40.8 kB
Tags Source
SHA-256 checksum
How to use checksums
a2af995d10743cc9e312f64eb413683e48aae3ef1359a724359bf6e457bc674e
BLAKE2b-256 checksum
How to use checksums
33164a73584c3d20c5fc876920c5a1a1a13b058edbc79f0a8a8bb056315c03d2
Upload date
Uploaded using Trusted Publishing?
What is 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}

Release files / global_permission-0.0.3-py3-none-any.whl

Download URL global_permission-0.0.3-py3-none-any.whl
Size 34.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a7e51fe23b135f1e8a9093e0f121e2a804270e32a54b4cab5a93f23ac5be7e09
BLAKE2b-256 checksum
How to use checksums
7e3bb526492cf5f7874aff9492d47a1318b5c90cb735a93e5e7bbd2b043c5378
Upload date
Uploaded using Trusted Publishing?
What is 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}

Release history Release notifications | RSS feed

This release

0.0.3 This release

2 release files

0.0.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page