From 82516ec952aa7cc4bf683c623220fe6cc200c054 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oscar=20S=C3=B6derlund?= Date: Fri, 23 Oct 2026 07:05:42 +0200 Subject: [PATCH 1/2] fix(antigravity): stop approval prompts for agy workers Herdr starts agents without arguments, and agy defaults to request-review, so an orchestrated worker stalls on a plain read such as rg while nobody watches the pane. Set toolPermission and artifactReviewPolicy to always-proceed in the managed settings file. Compare and merge only repo-managed keys, so live machine state such as trustedWorkspaces stays local and no longer fails the drift gate. Document the per-kind launch args the agent-team skill must pass. --- AGENTS.md | 10 +++++++--- antigravity/settings.json | 2 ++ mise/conf.d/antigravity.toml | 22 +++++++++++++++------- tasks/apply.sh | 7 ++++--- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 3297a264..8800eba3 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -46,9 +46,13 @@ - **Runtime config drift**: `antigravity:check` and `codex:check` gate `mise run apply`. Live `~/.gemini/antigravity-cli/settings.json` and `~/.codex/config.toml` are plain files because the apps write private runtime - state into them. On failure, copy intentional setting changes into the repo - (never workspace paths or auth state), then run `mise run antigravity:resolve` - or `mise run codex:resolve` (or `mise run apply --force`). + state into them. `antigravity:check` compares only keys present in + `antigravity/settings.json`, and `antigravity:resolve` merges those keys into + the live file, so machine state such as `trustedWorkspaces` never needs to be + committed. `codex:check` compares the whole file. On failure, copy + intentional setting changes into the repo (never workspace paths or auth + state), then run `mise run antigravity:resolve` or `mise run codex:resolve` + (or `mise run apply --force`). - **Overwritten dotfile symlinks**: If an app replaces a `[dotfiles]` symlink with a plain file, copy wanted changes into the repo before running `mise bootstrap --force-dotfiles`. diff --git a/antigravity/settings.json b/antigravity/settings.json index 39b589cf..0a828a83 100644 --- a/antigravity/settings.json +++ b/antigravity/settings.json @@ -1,6 +1,7 @@ { "allowNonWorkspaceAccess": true, "altScreenMode": "always", + "artifactReviewPolicy": "always-proceed", "gcp": { "project": "way-platform-ai", "location": "eu" @@ -8,5 +9,6 @@ "model": "Gemini 4 Argon (Medium)", "notifications": true, "showFeedbackSurvey": false, + "toolPermission": "always-proceed", "verbosity": "high" } diff --git a/mise/conf.d/antigravity.toml b/mise/conf.d/antigravity.toml index e20c4e67..703346a2 100644 --- a/mise/conf.d/antigravity.toml +++ b/mise/conf.d/antigravity.toml @@ -2,19 +2,27 @@ "~/.gemini/config/hooks.json" = "../../antigravity/hooks.json" [tasks."antigravity:check"] -description = "Check antigravity config drift (fails until resolved)" +description = "Check antigravity config drift on repo-managed keys (fails until resolved)" run = """ -if ! diff -u "$HOME/.gemini/antigravity-cli/settings.json" "$REPO_DIR/antigravity/settings.json"; then +repo_view=$(mktemp) +live_view=$(mktemp) +trap 'rm -f "$repo_view" "$live_view"' EXIT +jq -S . "$REPO_DIR/antigravity/settings.json" >"$repo_view" +jq -S --slurpfile ref "$REPO_DIR/antigravity/settings.json" \ + 'with_entries(select(.key as $k | $ref[0] | has($k)))' \ + "$HOME/.gemini/antigravity-cli/settings.json" >"$live_view" +if ! diff -u "$repo_view" "$live_view"; then echo "[antigravity] Resolve with: mise run antigravity:resolve" exit 1 fi """ [tasks."antigravity:resolve"] -description = "Resolve antigravity config drift by overwriting the live config" +description = "Resolve antigravity config drift by merging repo keys into the live config" run = """ -if ! diff -u "$HOME/.gemini/antigravity-cli/settings.json" "$REPO_DIR/antigravity/settings.json"; then - echo "[antigravity] Applying repo config over live config" -fi -install -m 600 "$REPO_DIR/antigravity/settings.json" "$HOME/.gemini/antigravity-cli/settings.json" +merged=$(mktemp) +trap 'rm -f "$merged"' EXIT +jq -S -s '.[0] * .[1]' "$HOME/.gemini/antigravity-cli/settings.json" "$REPO_DIR/antigravity/settings.json" >"$merged" +echo "[antigravity] Applying repo keys over live config" +install -m 600 "$merged" "$HOME/.gemini/antigravity-cli/settings.json" """ diff --git a/tasks/apply.sh b/tasks/apply.sh index 20f098ec..3d7cfee4 100755 --- a/tasks/apply.sh +++ b/tasks/apply.sh @@ -17,9 +17,10 @@ while [ $# -gt 0 ]; do echo "Apply every current version and config in the repo: full convergence." echo echo "Options:" - echo " -f, --force Overwrite the live codex and antigravity configs with" - echo " the repo copies before convergence. This drops private" - echo " runtime state; the apps re-prompt for it." + echo " -f, --force Merge the antigravity repo keys into the live config and" + echo " overwrite the live codex config before convergence. The" + echo " codex overwrite drops private runtime state; the app" + echo " re-prompts for it." echo " -h, --help Show this help message" exit 0 ;; From 27ecaefd16fc0861263f442942e1188d70518118 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oscar=20S=C3=B6derlund?= Date: Fri, 23 Oct 2026 07:24:04 +0200 Subject: [PATCH 2/2] fix(claude): run tools without permission prompts Claude Code prompts before every write or mutating shell command, so an agent-team worker spawned in a pane stops on a trivial edit with nobody to answer. Set permissions.defaultMode to bypassPermissions in the managed settings file, matching codex (approval_policy never) and cursor (approvalMode unrestricted). --- claude/settings.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/claude/settings.json b/claude/settings.json index 89a8c321..fc8942b6 100644 --- a/claude/settings.json +++ b/claude/settings.json @@ -48,6 +48,9 @@ "effortLevel": "high", "outputStyle": "Concise", "autoMemoryEnabled": false, + "permissions": { + "defaultMode": "bypassPermissions" + }, "skipDangerousModePermissionPrompt": true, "theme": "dark" }