agentleFS
okharediaokharedia/my-skills/skills/1password/SKILL.md

1password

Skill0 starsChanged 2 months agoMITView on GitHub

Injects 1Password secret references into a trusted child process with `op run`. Use when a command needs an API key, token, or other secret stored in 1Password. The child receives plaintext; stdout/stderr masking is exact-string only.

43 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use openclaw-performance, plugin-sdk-impact and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • clawdbotSkill

    openclaw-performance

    Performance work in OpenClaw: a slow or heavy flow (latency, CPU, memory, SQL, RPC, renders), writing or reviewing a perf PR, or adding a cache. Count the work, delete waste first, cache last.

    Also in 7 projects that use this

  • clawdbotSkill

    plugin-sdk-impact

    Count Plugin SDK consumers across live ClawHub releases and bundled OpenClaw plugins before deprecation, removal, or behavior changes; supports public release-date filters.

    Also in 7 projects that use this

  • hkyutongSkill

    node-connect

    Diagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps. Use when QR/setup code/manual connect fails, local Wi-Fi works but VPS/tailnet does not, or errors mention pairing required, unauthorized, bootstrap token invalid or expired, gateway.bind, gateway.remote.url, Tailscale, or plugins.entries.device-pair.config.publicUrl.

    Also in 18 projects that use this

  • molt-botSkill

    discord-e2e

    Test Discord with Convex-leased QA bots: check credentials without a Gateway, exercise owned messages, or prove OpenClaw replies, files, threads, reactions, streaming, and typing. Distinguish API and Gateway evidence from manual user interactions.

    Also in 10 projects that use this

  • molt-botSkill

    openclaw-repair-sweep

    Run scoped OpenClaw issue/PR repair campaigns: coordinate workers, prove root causes, and land or close verified work under the requested authority.

    Also in 10 projects that use this

  • AtomicBot-aiSkill

    taskflow-inbox-triage

    Also in 6 projects that use this

  • +2 more from molt-bot
  • Other versions43 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 43

    1. moltbot/clawdbot★ 394ksame name
    2. steipete/warelay★ 394ksame name
    3. steipete/clawdis★ 394ksame name
    4. moltbot/moltbot★ 394ksame name
    5. clawdbot/clawdbot★ 394ksame name
    6. openclaw/openclaw★ 394ksame name
    7. molt-bot/clawdbot★ 391ksame name
    8. spinabot/brigade★ 11ksame name
    9. the-open-agent/openagent★ 5.7ksame name
    10. casibase/casibase★ 5.7ksame name

    33 more not listed

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • In this repository4 other files it gives its agents.

The file

We split this skill into the rules it gives an agent

10 rules. 0 are common, 5 are distinctive, and 5 are very specific to this project.

  • 0

    Common

    Most of the 43 edited versions we read keep these.

  • 5

    Distinctive

    This author's own choices. Worth a look.

  • 5

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  • could be automatic: a setting could enforce it
  1. Distinctive:

    Never ask the user to paste a token into chat.

    line 15
  2. Very specific:

    When one task genuinely needs several commands to share the injected environment, op run -- bash -s with a single-quoted heredoc is allowed:

    line 68
  3. Very specific:

    Prefer an exact item or secret reference over vault enumeration.

    line 83
  4. Distinctive:

    If the vault is unknown and its name is necessary:

    line 85
  5. Very specific:

    If the exact item name is known, inspect it without --reveal:

    line 100
  6. Distinctive:

    If a tag or category is known, filter at the source:

    line 117
  7. Distinctive:

    Never print, log, echo, or commit the token or a resolved secret.

    line 167
  8. Very specific:

    Never use op read alone, --reveal, --no-masking, or OP_RUN_NO_MASKING.

    line 168
  9. Distinctive:

    Do not create, modify, delete, move, or share items.

    line 169
  10. Very specific:

    If the keychain item is missing or authentication fails, stop.

    line 170

“Common” is measured: kept by at least 6 in 10 of the 43 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

1Password

Authentication uses a 1Password service-account token in the macOS login keychain. The agent reads that token into a shell variable, then into op's environment. The real security boundary is a dedicated, read-only, vault-limited service account — not this skill's rules.

Never ask the user to paste a token into chat. Never run setup for them.

Each op snippet below is one complete script. Run it in a single shell. Do not reuse $token in a later tool call.

One-time setup

The user runs this in their own Terminal and pastes the ops_... token at the prompt. The subshell exits on a failed or empty read so security never runs; EOF or a blank paste cannot overwrite an existing item.

(
  printf 'Token: '
  stty -echo
  trap 'stty echo; unset T' EXIT
  if ! IFS= read -r T || [ -z "$T" ]; then
    echo "No token entered; keychain unchanged." >&2
    exit 1
  fi
  printf '\n'
  security add-generic-password -U -a "$USER" -s op-agent -w "$T"
  rc=$?
  unset T
  exit "$rc"
)

The interactive security add-generic-password -w prompt (no value) truncates at 128 characters and stores a broken token. Passing -w "$T" stores the full token but exposes it in process arguments while security runs. History records the literal $T, not the value. The login keychain is readable by other processes as this user while logged in.

Use a secret

Load, validate, invoke, capture status, and unset in this one block. If the keychain read fails or is empty, exit 1 before op. Do not fall back to op signin, an environment token, or the desktop app.

The exit status is held in rc, not status: status is a read-only special variable in zsh, and assigning to it aborts the block with read-only variable: status after the real work has already run.

if ! token="$(security find-generic-password -a "$USER" -s op-agent -w)" || [ -z "$token" ]; then
  echo "1Password keychain item missing. Ask the user to redo setup." >&2
  exit 1
fi
OP_SERVICE_ACCOUNT_TOKEN="$token" \
OP_BIOMETRIC_UNLOCK_ENABLED=false \
API_TOKEN='op://Vault/Item/password' \
  op run -- trusted-command
rc=$?
unset token
exit "$rc"

OP_BIOMETRIC_UNLOCK_ENABLED=false disables desktop-app integration. A failed keychain read otherwise becomes an empty OP_SERVICE_ACCOUNT_TOKEN, which op treats as "no service account" and may sign in as the human user with every vault.

Field names: password for Login/Password items, credential for API Credential items. Use the field the user named. Do not guess by retrying fields.

trusted-command is the smallest executable that must read the secret from its environment. Do not wrap package-manager scripts (npm test, yarn, pnpm), bash -c, sh -c, env, a script file on disk, or other untrusted code. Do not put the resolved secret on the command line.

When one task genuinely needs several commands to share the injected environment, op run -- bash -s with a single-quoted heredoc is allowed:

  op run -- bash -s <<'SCRIPT'
set -euo pipefail
# commands, written inline, never saved to disk
SCRIPT

The quoted delimiter stops the parent shell expanding anything, and stdin keeps the script out of process arguments — which is why bash -c "$script" stays forbidden. The script must be written inline in that same block and must be your own; this is not permission to pipe in code from elsewhere.

op run sets plaintext in the child environment. It masks the exact secret string on the child's stdout and stderr only. A value written to a file, sent over the network, encoded, or printed in part is not masked.

Find the narrowest match

Prefer an exact item or secret reference over vault enumeration. Use the same load / validate / unset / exit shape; only the op command changes.

If the vault is unknown and its name is necessary:

if ! token="$(security find-generic-password -a "$USER" -s op-agent -w)" || [ -z "$token" ]; then
  echo "1Password keychain item missing. Ask the user to redo setup." >&2
  exit 1
fi
OP_SERVICE_ACCOUNT_TOKEN="$token" \
OP_BIOMETRIC_UNLOCK_ENABLED=false \
  op vault list
rc=$?
unset token
exit "$rc"

If the exact item name is known, inspect it without --reveal:

if ! token="$(security find-generic-password -a "$USER" -s op-agent -w)" || [ -z "$token" ]; then
  echo "1Password keychain item missing. Ask the user to redo setup." >&2
  exit 1
fi
OP_SERVICE_ACCOUNT_TOKEN="$token" \
OP_BIOMETRIC_UNLOCK_ENABLED=false \
  op item get "Item" --vault "Vault"
rc=$?
unset token
exit "$rc"

This may display metadata and non-concealed fields (usernames, URLs, notes). Use it only when that output is needed.

If a tag or category is known, filter at the source:

if ! token="$(security find-generic-password -a "$USER" -s op-agent -w)" || [ -z "$token" ]; then
  echo "1Password keychain item missing. Ask the user to redo setup." >&2
  exit 1
fi
OP_SERVICE_ACCOUNT_TOKEN="$token" \
OP_BIOMETRIC_UNLOCK_ENABLED=false \
  op item list --vault "Vault" --tags "project-name"
rc=$?
unset token
exit "$rc"
if ! token="$(security find-generic-password -a "$USER" -s op-agent -w)" || [ -z "$token" ]; then
  echo "1Password keychain item missing. Ask the user to redo setup." >&2
  exit 1
fi
OP_SERVICE_ACCOUNT_TOKEN="$token" \
OP_BIOMETRIC_UNLOCK_ENABLED=false \
  op item list --vault "Vault" --categories "API Credential"
rc=$?
unset token
exit "$rc"

The CLI has no free-text title-search flag. When the user asks to search a known vault, filter locally and return only IDs and titles:

if ! token="$(security find-generic-password -a "$USER" -s op-agent -w)" || [ -z "$token" ]; then
  echo "1Password keychain item missing. Ask the user to redo setup." >&2
  exit 1
fi
set -o pipefail
OP_SERVICE_ACCOUNT_TOKEN="$token" \
OP_BIOMETRIC_UNLOCK_ENABLED=false \
  op item list --vault "Vault" --format=json |
  jq -r --arg q "search-term" \
    '.[] | select(.title | ascii_downcase | contains($q | ascii_downcase)) | [.id, .title] | @tsv'
rc=$?
unset token
exit "$rc"

This narrows agent output, but op still retrieves all item metadata for that vault. It is not an access-control boundary. If nothing matches, ask the user instead of falling back to an unfiltered list.

Rules

  • Never print, log, echo, or commit the token or a resolved secret.
  • Never use op read alone, --reveal, --no-masking, or OP_RUN_NO_MASKING.
  • Do not create, modify, delete, move, or share items. The skill cannot enforce this; use a read-only service account limited to the agent vault.
  • If the keychain item is missing or authentication fails, stop. Do not fall back to op signin, an environment token, or asking for a token in chat.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.