permiso-accessibility-permissions

Permission dialog UI for macOS accessibility and privacy settings, replicating the Codex Computer Use guided permissions flow

22 stars

Best use case

permiso-accessibility-permissions is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Permission dialog UI for macOS accessibility and privacy settings, replicating the Codex Computer Use guided permissions flow

Teams using permiso-accessibility-permissions should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/permiso-accessibility-permissions/SKILL.md --create-dirs "https://raw.githubusercontent.com/Aradotso/trending-skills/main/skills/permiso-accessibility-permissions/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/permiso-accessibility-permissions/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How permiso-accessibility-permissions Compares

Feature / Agentpermiso-accessibility-permissionsStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Permission dialog UI for macOS accessibility and privacy settings, replicating the Codex Computer Use guided permissions flow

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Permiso — macOS Permission Dialog Helper

> Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection.

Permiso provides a polished permission dialog UI for macOS apps that guides users through enabling accessibility and privacy settings — replicating the guided flow seen in OpenAI's Codex Computer Use product.

## What It Does

- Presents an animated, guided overlay panel directing users to open System Settings and enable specific permissions (e.g. Accessibility)
- Mirrors the UX pattern from Codex Computer Use: an on-screen assistant that walks users through enabling access
- Handles the common friction point of macOS permission flows with a clear, app-integrated UI

## Installation

### Swift Package Manager

Add to your `Package.swift`:

```swift
dependencies: [
    .package(url: "https://github.com/zats/permiso", branch: "main")
]
```

Or in Xcode: **File → Add Package Dependencies** → enter `https://github.com/zats/permiso`

Then add `Permiso` to your target's dependencies:

```swift
.target(
    name: "YourApp",
    dependencies: ["Permiso"]
)
```

## Core API

### Basic Usage

```swift
import Permiso

@MainActor
func showAccessibilityHelper() {
    PermisoAssistant.shared.present(panel: .accessibility)
}
```

### Triggering on App Launch

```swift
import SwiftUI
import Permiso

@main
struct MyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
                .onAppear {
                    checkAndRequestAccessibility()
                }
        }
    }

    @MainActor
    func checkAndRequestAccessibility() {
        let trusted = AXIsProcessTrusted()
        if !trusted {
            PermisoAssistant.shared.present(panel: .accessibility)
        }
    }
}
```

### AppDelegate Pattern

```swift
import AppKit
import Permiso

class AppDelegate: NSObject, NSApplicationDelegate {
    func applicationDidFinishLaunching(_ notification: Notification) {
        requestAccessibilityIfNeeded()
    }

    @MainActor
    func requestAccessibilityIfNeeded() {
        guard !AXIsProcessTrusted() else { return }
        PermisoAssistant.shared.present(panel: .accessibility)
    }
}
```

## Common Patterns

### Check Permission Before Sensitive Actions

```swift
import Permiso
import ApplicationServices

@MainActor
func performAccessibilityAction() {
    guard AXIsProcessTrusted() else {
        PermisoAssistant.shared.present(panel: .accessibility)
        return
    }
    // Proceed with accessibility-dependent work
    doAccessibilityWork()
}
```

### Polling for Permission Grant

```swift
import Permiso
import ApplicationServices
import Combine

class PermissionMonitor: ObservableObject {
    @Published var isAccessibilityGranted = false
    private var timer: AnyCancellable?

    @MainActor
    func startMonitoring() {
        if AXIsProcessTrusted() {
            isAccessibilityGranted = true
            return
        }

        PermisoAssistant.shared.present(panel: .accessibility)

        timer = Timer.publish(every: 1.0, on: .main, in: .common)
            .autoconnect()
            .sink { [weak self] _ in
                if AXIsProcessTrusted() {
                    self?.isAccessibilityGranted = true
                    self?.timer?.cancel()
                }
            }
    }
}
```

### SwiftUI View Integration

```swift
import SwiftUI
import Permiso

struct SettingsView: View {
    @State private var accessibilityGranted = AXIsProcessTrusted()

    var body: some View {
        VStack(spacing: 16) {
            HStack {
                Image(systemName: accessibilityGranted ? "checkmark.circle.fill" : "xmark.circle.fill")
                    .foregroundColor(accessibilityGranted ? .green : .red)
                Text("Accessibility Access")
            }

            if !accessibilityGranted {
                Button("Enable Accessibility Access") {
                    requestAccess()
                }
                .buttonStyle(.borderedProminent)
            }
        }
        .padding()
        .onReceive(Timer.publish(every: 2, on: .main, in: .common).autoconnect()) { _ in
            accessibilityGranted = AXIsProcessTrusted()
        }
    }

    @MainActor
    func requestAccess() {
        PermisoAssistant.shared.present(panel: .accessibility)
    }
}
```

## Requirements

- **macOS**: The library targets macOS (version as specified by the package; check for macOS 13+ for best compatibility)
- **Swift**: Swift 5.9+
- **Main Actor**: `PermisoAssistant.shared.present(panel:)` must be called from the main thread / `@MainActor` context

## Entitlements / Info.plist

For accessibility usage, ensure your app's `Info.plist` includes a usage description (though macOS doesn't require this like iOS, it's good practice), and that your app is **not sandboxed** or has the correct entitlements if it needs to use accessibility APIs:

```xml
<!-- In your .entitlements file if needed -->
<key>com.apple.security.temporary-exception.apple-events</key>
<true/>
```

For apps that actually use accessibility features after permission is granted:

```swift
// Request trust prompt (system dialog) alongside Permiso's guided UI
let options = [kAXTrustedCheckOptionPrompt.takeRetainedValue(): true] as CFDictionary
AXIsProcessTrustedWithOptions(options)
```

## Troubleshooting

**Panel doesn't appear**
- Ensure you're calling from `@MainActor` / main thread
- Check that your app has a visible window; the panel attaches to the app's UI context

**`AXIsProcessTrusted()` returns false even after granting**
- macOS caches trust state; the app may need to be relaunched or the check polled with a timer (see polling pattern above)
- Some sandboxed apps require a full app restart after granting accessibility

**Build errors: `cannot find 'PermisoAssistant' in scope`**
- Confirm `import Permiso` is at the top of the file
- Confirm the package is added to the correct target in Xcode, not just the project

**Panel appears but dismisses immediately**
- Make sure you're not overriding the window or calling dismiss logic right after present
- Avoid calling present inside a `Task { }` that gets cancelled immediately

## Key Types Reference

| Type | Description |
|------|-------------|
| `PermisoAssistant` | Singleton entry point — use `.shared` |
| `PermisoAssistant.shared.present(panel:)` | Shows the guided permission dialog |
| `.accessibility` | Panel type for Accessibility settings |

Related Skills

```markdown

22
from Aradotso/trending-skills

---

zeroboot-vm-sandbox

22
from Aradotso/trending-skills

Sub-millisecond VM sandboxes for AI agents using copy-on-write KVM forking via Zeroboot

yourvpndead-vpn-detection

22
from Aradotso/trending-skills

Android app that detects VPN/proxy servers (VLESS/xray/sing-box) via local SOCKS5 vulnerability, exposing exit IPs and server configs without root

xata-postgres-platform

22
from Aradotso/trending-skills

Expert skill for Xata open-source cloud-native Postgres platform with copy-on-write branching, scale-to-zero, and Kubernetes deployment

x-mentor-skill-nuwa

22
from Aradotso/trending-skills

AI-powered X (Twitter) content strategy skill that distills methodologies from 6 top creators + open-source algorithm data into actionable writing, growth, and monetization guidance.

wx-favorites-report

22
from Aradotso/trending-skills

End-to-end pipeline to extract, decrypt, and visualize WeChat Mac favorites from encrypted SQLite DB into an interactive HTML report.

wterm-web-terminal

22
from Aradotso/trending-skills

Web terminal emulator with Zig/WASM core, DOM rendering, and React/vanilla JS bindings

worldmonitor-intelligence-dashboard

22
from Aradotso/trending-skills

Real-time global intelligence dashboard with AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking

witr-process-inspector

22
from Aradotso/trending-skills

CLI and TUI tool that explains why processes, services, and ports are running by tracing causality chains across supervisors, containers, and shells.

wildworld-dataset

22
from Aradotso/trending-skills

WildWorld large-scale action-conditioned world modeling dataset with 108M+ frames from a photorealistic ARPG game, featuring per-frame annotations, 450+ actions, and explicit state information for generative world modeling research.

whatcable-macos-usb-inspector

22
from Aradotso/trending-skills

macOS menu bar app that identifies USB-C cable capabilities and charging diagnostics using IOKit

wewrite-wechat-ai-publishing

22
from Aradotso/trending-skills

Full-pipeline AI skill for WeChat Official Account articles — hotspot fetching, topic selection, writing, SEO, image generation, formatting, and draft box publishing.