z1y1n

Claude Approval — Design skill for Claude Code

Design community

Approve Claude Code tool calls from your phone via Feishu (Lark) - a zero-dependency PreToolUse hook with fail-closed design.

How to install Claude Approval

This entry records only its repository, not the path inside it, so there is no exact command to give. Open z1y1n/claude-approval and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

What Claude Approval does

Approve Claude Code tool calls from your phone via Feishu (Lark) - a zero-dependency PreToolUse hook with fail-closed design.

Alternatives in Design

  • Brand Guidelines — Apply Anthropic's official brand colors and typography to artifacts 94.1k ★
  • Od Contribute — Open a first-contribution PR (or bug issue) on nexu-io/open-design — works for non-coders too 91.8k ★
  • Export Diagram — Export a diagram-design HTML file to .svg and .png next to the source 27.2k ★

README

claude-approval

**Approve Claude Code's tool calls from your phone.**

A small, zero-dependency [Claude Code](https://claude.com/claude-code) `PreToolUse` hook that pushes every tool call to your phone via Feishu (Lark) and blocks until you answer — one tap on **✅ Allow / ⛔ Deny**, or a one-character reply. Walk away from the keyboard without either stalling the agent or handing it unrestricted access to your files.

[中文说明见下方](#中文说明)


The problem

AI coding agents stop and ask for permission before most tool calls. When you're at the keyboard that's one click. When you're not, you have two bad options:

  • Leave it waiting — the task stalls until you get back, sometimes on the very first file write.
  • Turn on "skip permissions" — the agent now edits and runs whatever it wants, unattended.

This middleware adds a third option: a human-in-the-loop gate that follows you onto your phone.

How it works

Claude Code wants to run a tool
        │
        ▼
  PreToolUse hook  (hook.cjs)
        │
        ├─ away mode off ──────────────────► exit 0   (identical to not being installed)
        ├─ read-only tool ─────────────────► exit 0   (Read / Glob / Grep …)
        ├─ approved in the last 10 min ────► allow    (no local permission prompt)
        │
        ▼
  send a card to Feishu as the bot
        │
        │   your phone:  🔐 Claude Code needs your approval
        │                ⚡ Run command: npm test
        │                [ ✅ Allow ]  [ ⛔ Deny ]
        │                     │
        │                     └── tap ──► card.action.trigger  (WebSocket, no public URL)
        │                                    │
        │                                    ▼
        │                          button-daemon.cjs (background)
        │                          verifies the clicker is you,
        │                          then atomically writes
        │                          runtime/decisions/.json
        │