Source profileQuality 91/100Review permissions

shepherdjerred/monorepo/packages/dotfiles/dot_agents/skills/op-helper/SKILL.md

op-helper

Helps with 1Password CLI (op) for secure secret retrieval and management When user mentions 1Password, secrets, op command, or asks about credential management

Source repository stars
125
Declared platforms
0
Static risk flags
1
Last source update
2026-08-25
Source checked
2026-08-25

Decision brief

What it does: where it fits

Helps with 1Password CLI (op) for secure secret retrieval and management When user mentions 1Password, secrets, op command, or asks about credential management

Best for

    Not for

    • Don't commit op:// references to public repositories without proper access controls
    • Don't use op item get --reveal in scripts that might log output

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/shepherdjerred/monorepo --skill "packages/dotfiles/dot_agents/skills/op-helper"
    Safe inspection promptEditorial

    Inspect the Agent Skill "op-helper" from https://github.com/shepherdjerred/monorepo/blob/d1ae0a6d2f19838bb4df49402cb8ac4dc7113df8/packages/dotfiles/dot_agents/skills/op-helper/SKILL.md at commit d1ae0a6d2f19838bb4df49402cb8ac4dc7113df8. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Service Account Setup

      For CI/CD environments, use service accounts with minimal permissions:

      For CI/CD environments, use service accounts with minimal permissions:
    2. 02

      What's New in 2025 (v4+)

      Concealed Output by Default: Sensitive fields now require --reveal flag to display

      Concealed Output by Default: Sensitive fields now require --reveal flag to displayPerformance: Item ID references are faster than name-based lookupsCaching: Enabled by default on macOS/Linux for faster responses
    3. 03

      IMPORTANT: Minimize op Invocations

      Every op CLI invocation requires the human operator to authenticate (biometric/password). This is expensive in terms of user friction. Use as few op calls as possible:

      Retrieve multiple fields in one call using --format json instead of separate calls per fieldCombine lookups when possible (e.g. get the full item once, then extract fields from the JSON)Never loop over items with individual op calls when a single op item list --format json can get everything
    4. 04

      IMPORTANT: Do NOT gate work on op whoami or op signin

      On a local machine, op typically uses the 1Password desktop-app integration with biometric unlock. Auth then happens per command (a Touch ID / system prompt on each call) — there is no long-lived CLI session token in the shell. Two behaviors routinely mislead agents into wrongly…

      op whoami reports a false negative. It frequently printsop signin is effectively a no-op here. Non-interactively it printsOn a local machine, op typically uses the 1Password desktop-app integration with biometric unlock. Auth then happens per command (a Touch ID / system prompt on each call) — there is no long-lived CLI session token in th…
    5. 05

      Readiness == a real read succeeds (triggers the biometric prompt if needed).

      op vault list auto-approved; returns vaults when op is usable

      op vault list auto-approved; returns vaults when op is usable

    Permission review

    Static risk signals and limitations

    Runs scripts

    medium · line 48

    The documentation asks the agent to run terminal commands or scripts.

    # ...or just run the command you actually need and check its exit code:

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score91/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars125SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    shepherdjerred/monorepo
    Skill path
    packages/dotfiles/dot_agents/skills/op-helper/SKILL.md
    Commit
    d1ae0a6d2f19838bb4df49402cb8ac4dc7113df8
    License
    GPL-3.0
    Collected
    2026-08-25
    Default branch
    main
    View the original SKILL.md

    1Password Helper Agent

    What's New in 2025 (v4+)

    • Concealed Output by Default: Sensitive fields now require --reveal flag to display
    • Performance: Item ID references are faster than name-based lookups
    • Caching: Enabled by default on macOS/Linux for faster responses
    • 1Password Environments: New integration for local .env file access
    • JSON Templates: Create items securely with op item template

    Overview

    This agent helps you work with the 1Password CLI (op) for secure secret retrieval, credential management, and secret injection into your applications and scripts.

    IMPORTANT: Minimize op Invocations

    Every op CLI invocation requires the human operator to authenticate (biometric/password). This is expensive in terms of user friction. Use as few op calls as possible:

    • Retrieve multiple fields in one call using --format json instead of separate calls per field
    • Combine lookups when possible (e.g. get the full item once, then extract fields from the JSON)
    • Never loop over items with individual op calls when a single op item list --format json can get everything

    IMPORTANT: Do NOT gate work on op whoami or op signin

    On a local machine, op typically uses the 1Password desktop-app integration with biometric unlock. Auth then happens per command (a Touch ID / system prompt on each call) — there is no long-lived CLI session token in the shell. Two behaviors routinely mislead agents into wrongly concluding 1Password is unavailable:

    • op whoami reports a false negative. It frequently prints [ERROR] account is not signed in and exits 1 even though the very next real operation (op vault list, op item get, op read) succeeds. whoami is looking for a shell session token that the desktop-app integration never populates — it is not a reliable readiness check in this setup.
    • op signin is effectively a no-op here. Non-interactively it prints nothing and establishes no session; and even if it emitted an export OP_SESSION_…, each Bash tool call is a fresh subprocess, so the variable cannot persist to the next call. Do not run it as a "make sure we're signed in" step, and do not chain op signin && op whoami.

    Do this instead — probe with the real command you need:

    # Readiness == a real read succeeds (triggers the biometric prompt if needed).
    op vault list          # auto-approved; returns vaults when op is usable
    # ...or just run the command you actually need and check its exit code:
    op item get "<item>" --vault "<vault>" --format json
    
    • If any real op call returns data, op is working — regardless of what op whoami said. Proceed.
    • Only conclude 1Password is unavailable when the actual read you need fails (non-zero exit and no data). Never ask the user to sign in based on op whoami / op signin output alone.
    • op account list confirms an account is configured (handy for discovering vault/account names) but is not proof of an active session — it can succeed while whoami fails. Use it for discovery, not gating.
    • Exception — service accounts (OP_SERVICE_ACCOUNT_TOKEN, e.g. CI): there is a real token, so op whoami is meaningful there. This caveat is about the local desktop-app + biometric setup, not service-account contexts.

    Cloudflare environment-token integration

    On the local macOS setup, the shell already exposes the Cloudflare credential as CF_API_TOKEN; the tracked ~/.local/bin/cf wrapper maps it to CLOUDFLARE_API_TOKEN for that process only. Never print, paste, or persist the value. The wrapper deliberately keeps CLOUDFLARE_API_TOKEN out of the ambient shell so a bare OpenTofu apply still fails closed.

    cf auth list is not an authentication probe here. It lists named profiles stored by the cf CLI and may correctly return an empty list when the command is authenticated from the environment. Use cf auth whoami, which reports the environment-token source and validity, or the exact read-only operation needed:

    cf auth whoami
    cf accounts list
    cf zones list
    

    Treat a successful cf auth whoami or API read as proof that Cloudflare authentication works, regardless of op whoami. Treat a Cloudflare 403 on a write as an authorization/scope problem, not a 1Password session problem. For example, creating an API token requires the current credential to have the account-level Account API Tokens Write permission. Report that missing scope and do not ask the operator to paste or recreate a token in chat.

    CLI Commands

    Auto-Approved Commands

    The following op commands are auto-approved and can be used safely:

    • op item list - List items in vaults
    • op item get - Retrieve item details
    • op vault list - List available vaults (best readiness probe — see caveat above)
    • op whoami - Show current user information (⚠️ unreliable as a sign-in check under the desktop-app + biometric setup — see "Do NOT gate work on op whoami" above)

    Common Operations

    Retrieve a secret:

    op item get "Database Password" --fields password
    

    List items in a vault:

    op item list --vault "Production"
    

    Get a field from an item:

    op item get "API Keys" --fields "stripe_key"
    

    Reveal sensitive fields (v4+):

    # Sensitive values concealed by default in v4
    op item get "API Keys" --fields password
    # Output: ********
    
    # Use --reveal to display actual value
    op item get "API Keys" --fields password --reveal
    # Output: actual_password_here
    

    Use item IDs for performance:

    # Slower (searches by name)
    op item get "Production Database"
    
    # Faster (direct ID lookup)
    op item get abc123xyz
    
    # Get ID from item list
    op item list --format json | jq -r '.[] | select(.title=="Production Database") | .id'
    

    Performance and Caching

    1Password CLI v4+ includes automatic caching on macOS and Linux:

    # Caching enabled by default (faster repeat queries)
    op item get "API Keys" --fields key
    
    # Disable caching if needed
    op item get "API Keys" --fields key --cache=false
    
    # Cache persists between commands for faster workflows
    

    Creating Items Securely

    Use JSON templates to create items without exposing sensitive values in command history:

    # Generate template for login item
    op item template get Login > login.json
    
    # Edit template securely
    # Add your values, then create:
    op item create --template login.json --vault Production
    
    # For server items
    op item template get Server | jq '.fields += [{"id":"password","value":"secret"}]' | op item create
    

    Secret Reference Syntax

    1Password CLI supports secret references that can be injected into environment variables:

    op://vault/item/field
    

    Examples:

    # Database URL
    export DATABASE_URL="op://Production/PostgreSQL/connection_url"
    
    # API Key
    export API_KEY="op://Production/Stripe/api_key"
    
    # SSH Key
    ssh-add <(op item get "GitHub SSH" --fields private_key)
    

    Running Commands with Secrets

    Inject secrets into command execution:

    # Secrets automatically injected, masked in output
    op run -- npm start
    op run -- docker-compose up
    
    # Disable masking if you need to see secrets in stdout (use carefully!)
    op run --no-masking -- env | grep API_KEY
    
    # For scripts that need to capture secret output
    SECRET=$(op run --no-masking -- sh -c 'echo $DATABASE_PASSWORD')
    

    Key behaviors:

    • op run automatically loads all op:// references from environment
    • Secrets are masked in stdout by default (v4+)
    • Use --no-masking only when necessary (logs may expose secrets)
    • Command runs in a subprocess with secrets injected

    Service Account Setup

    For CI/CD environments, use service accounts with minimal permissions:

    # Set service account token
    export OP_SERVICE_ACCOUNT_TOKEN="ops_..."
    
    # Verify authentication
    op whoami
    

    Service Account Best Practices:

    1. Principle of Least Privilege: Grant only the vaults and permissions needed

      # Create service account with read-only access to specific vaults
      # (Done via 1Password web interface)
      # Scope: Production vault (read-only), no write access
      
    2. Separate Service Accounts per Environment:

      • Production deployments: Read-only access to Production vault
      • CI/CD testing: Read-only access to Staging vault
      • Local development: Use personal accounts, not service accounts
    3. Rotate Tokens Regularly: Set up automated rotation policies

    4. Monitor Usage: Review service account activity logs regularly

    5. Secure Storage: Store tokens in CI/CD secrets, never in code

      # GitHub Actions example
      env:
        OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}
      

    Best Practices

    1. Use Item IDs Over Names: ID-based lookups are faster and more stable

      # Good: Direct ID reference
      op item get xyz789abc --fields password
      
      # Slower: Name-based search
      op item get "Production DB" --fields password
      
    2. Never Log Secrets: Use --reveal carefully, avoid in scripts that log output

      # Safe: Concealed by default
      op item get "API Key" --fields key
      
      # Dangerous in CI logs:
      op item get "API Key" --fields key --reveal
      
    3. Use Secret References: Prefer op:// references over storing secrets in files

      # .env file
      DATABASE_URL=op://Production/PostgreSQL/connection_url
      
      # Run with op
      op run -- node server.js
      
    4. Scope Service Accounts: Use minimal required permissions (read-only when possible)

    5. Cache Awareness: Leverage default caching, disable only when freshness is critical

      # Cached (faster, use for most workflows)
      op item get "Config" --fields api_key
      
      # Bypass cache (slower, for rotation scenarios)
      op item get "Config" --fields api_key --cache=false
      
    6. Rotate Regularly: Set up secret rotation policies in 1Password

    7. Audit Access: Regularly review who has access to which vaults

    Common Pitfalls to Avoid

    • Don't commit op:// references to public repositories without proper access controls
    • Don't use op item get --reveal in scripts that might log output
    • Don't share service account tokens in plain text
    • Always verify you're in the correct vault before retrieving secrets
    • A . in a field label is parsed as a section separator by both op item create and op item edit. "config.toml[text]=…" is read as section config / field toml, not a top-level field named config.toml. Worse, op item edit against an item that already has a top-level config.toml silently creates a new sectioned field instead of updating the existing one, so your edit appears not to take. Escape the dot: "config\.toml[text]=…". Verify with op item get <id> --format json | jq '.fields[] | {label, section: .section.label}'section: null is the real top-level field. To delete an accidentally-created sectioned twin, use the unescaped form: 'config.toml[delete]'.

    Examples

    Example 1: Database Connection in Script

    #!/bin/bash
    # Retrieve database password securely
    DB_PASS=$(op item get "Production DB" --fields password)
    psql "postgresql://user:${DB_PASS}@host/db"
    

    Example 2: Docker Compose with Secrets

    # .env file (not committed to git)
    DATABASE_URL=op://Production/PostgreSQL/url
    REDIS_URL=op://Production/Redis/url
    API_KEY=op://Production/API/key
    
    # Run with op
    op run -- docker-compose up
    

    Example 3: CI/CD Pipeline

    # GitHub Actions example
    steps:
      - name: Load secrets
        run: |
          export OP_SERVICE_ACCOUNT_TOKEN="${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}"
          op item get "Deploy Keys" --fields ssh_key > ~/.ssh/id_rsa
    

    When to Ask for Help

    Ask the user for clarification when:

    • The vault name or item name is ambiguous
    • Multiple fields exist and it's unclear which one to use
    • Service account permissions might be insufficient
    • The secret retrieval pattern doesn't match standard 1Password practices
    • The actual read you need fails with no data (not merely op whoami failing — see "Do NOT gate work on op whoami"); only then surface a sign-in problem to the user

    Frequently asked questions

    What to verify before installation and use

    What does the op-helper source document cover?

    Helps with 1Password CLI (op) for secure secret retrieval and management When user mentions 1Password, secrets, op command, or asks about credential management

    How do I install op-helper?

    The source record exposes this install command: npx skills add https://github.com/shepherdjerred/monorepo --skill "packages/dotfiles/dot_agents/skills/op-helper". Inspect the command and pinned source before running it.

    Which permission-related actions were detected?

    Static rules flagged exec-script in the source; the page lists the matching lines and excerpts.

    Alternatives

    Compare before choosing

    Computed 10045,511

    coreyhaines31/marketingskills

    ab-testing

    When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program

    Computed 10029,034

    garrytan/gbrain

    bulk-ingestion

    End-to-end discipline for turning any large data source (audio libraries, email takeouts, document corpora, chat exports, API dumps) into brain pages at scale. The lifecycle spine: SCHEMA → ACCESS → TRIAL → EVALUATE → IMPROVE → CODIFY → TEST → SKILLIFY → BULK → MONITOR. State is tracked in a durable JSON manifest (see MANIFEST-PATTERN.md) so any crash, session boundary, or subagent fan-out resumes from ground truth instead of memory.

    Computed 10024,921

    alirezarezvani/claude-skills

    app-store-optimization

    App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist

    Computed 1005,241

    dotnet/skills

    migrate-vstest-to-mtp

    Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP). Use when user asks to "migrate to MTP", "switch from VSTest", "enable Microsoft.Testing.Platform", "use MTP runner", set OutputType=Exe only for test projects in Directory.Build.props, or mentions EnableMSTestRunner, EnableNUnitRunner, or UseMicrosoftTestingPlatformRunner. USE FOR: MTP behavioral differences vs VSTest (exit code 8, zero tests discovered, --ignore-exit-code, TESTINGPLATFORM_EXITCODE_IGNORE); centralizing