agent-access-control

0
0
Source

Tiered stranger access control for AI agents. Use when setting up contact permissions, handling unknown senders, managing approved contacts, or configuring stranger deflection on messaging platforms (WhatsApp, Telegram, Discord, Signal). Provides diplomatic deflection, owner approval flow, and multi-tier access (owner/trusted/chat-only/blocked).

Install

mkdir -p .claude/skills/agent-access-control && curl -L -o skill.zip "https://mcp.directory/api/skills/download/8292" && unzip -o skill.zip -d .claude/skills/agent-access-control && rm skill.zip

Installs to .claude/skills/agent-access-control

About this skill

Agent Access Control

Protect your agent from unauthorized access with tiered permissions and an owner-approval pairing flow.

Setup

Create memory/access-control.json in workspace:

{
  "ownerIds": [],
  "approvedContacts": {},
  "pendingApprovals": {},
  "blockedIds": [],
  "strangerMessage": "Hi there! 👋 I'm {{AGENT_NAME}}, an AI assistant. I'm currently set up to help my owner with personal tasks, so I'm not able to chat freely just yet. I've let them know you reached out — if they'd like to connect us, they'll set that up. Have a great day! 😊",
  "notifyChannel": "",
  "notifyTarget": ""
}

Fill in:

  • ownerIds: Owner phone numbers, Telegram IDs, Discord IDs (strings)
  • strangerMessage: Customize {{AGENT_NAME}} with agent's name
  • notifyChannel: Channel to alert owner (telegram, whatsapp, discord, signal)
  • notifyTarget: Owner's ID on that channel

Access Tiers

TierLevelCapabilities
0StrangerDiplomatic deflection only, zero access
1Chat-onlyBasic conversation, no tools or private info
2TrustedChat + public info (weather, time, general questions)
3OwnerFull access to all tools, files, memory, actions

Message Handling Flow

On every incoming message from a messaging platform:

  1. Extract sender ID (phone number, user ID, etc.)
  2. Normalize ID: strip spaces, ensure country code prefix for phones
  3. Check ownerIds → if match: full access, respond normally
  4. Check blockedIds → if match: silent ignore, respond with NO_REPLY
  5. Check approvedContacts[senderId] → if match: respond within their tier
  6. Otherwise → stranger flow:

Stranger Flow

a. Send strangerMessage to the sender
b. Notify owner:
   "🔔 Stranger contact from {senderId} on {platform}:
    '{first 100 chars of message}'
    Reply: approve (trusted) / chat (chat-only) / block"
c. Store in pendingApprovals:
   {
     "senderId": { 
       "platform": "whatsapp",
       "firstMessage": "...", 
       "timestamp": "ISO-8601",
       "notified": true
     }
   }
d. Respond with NO_REPLY after sending deflection

Owner Approval

When owner replies to an approval notification:

Owner saysAction
approve, yes, trustedAdd to approvedContacts with tier 2 (trusted)
chat, chat-only, chat onlyAdd to approvedContacts with tier 1 (chat-only)
block, no, denyAdd to blockedIds
ignoreRemove from pendingApprovals, no action

After approval, update memory/access-control.json and notify the contact:

  • Trusted: "Great news! I've been given the go-ahead to chat with you. How can I help? 😊"
  • Chat-only: "Great news! I can chat with you now, though I'm limited to basic conversation. What's on your mind?"

Tier Enforcement

When responding to a non-owner contact, enforce tier restrictions:

Tier 1 (chat-only):

  • Respond conversationally only
  • Do NOT use any tools (read, write, exec, web_search, etc.)
  • Do NOT share any info from memory files
  • Do NOT mention the owner by name
  • If asked to do something beyond chat: "I'm only set up for basic chat at the moment. For anything more, you'd need to check with my owner."

Tier 2 (trusted):

  • Conversational responses
  • May use: web_search, weather skill, time/date queries
  • Do NOT use: read, write, exec, message (to other contacts), memory files
  • Do NOT share private info (calendar, emails, files, other contacts)
  • If asked for private info: "I can help with general info, but personal details are private. Hope you understand! 😊"

Multi-Platform ID Matching

Normalize IDs for comparison:

  • Phone numbers: Strip all non-digits except leading +. E.g., +1 555 123 4567+15551234567
  • Telegram: Use numeric user ID (not username, as usernames change)
  • Discord: Use numeric user ID
  • Signal: Use phone number (normalized)
  • WhatsApp: Use phone number with country code

An owner may have multiple IDs across platforms. All should be in ownerIds.

Rate Limiting

Apply per-tier rate limits to prevent abuse:

TierMessages/hourMessages/day
Stranger1 (deflection only)3
Chat-only20100
Trusted50500
OwnerUnlimitedUnlimited

If limit exceeded, respond: "I've reached my chat limit for now. Try again later! 😊"

Track in memory/access-control.json under rateLimits:

"rateLimits": {
  "+61412345678": { "hourCount": 5, "dayCount": 23, "hourReset": "ISO", "dayReset": "ISO" }
}

Audit Log

Log all stranger contacts to memory/access-control-log.json:

[
  {
    "timestamp": "2026-02-07T17:30:00+11:00",
    "senderId": "+61412345678",
    "platform": "whatsapp",
    "action": "deflected",
    "message": "first 50 chars..."
  }
]

Keep last 100 entries. Rotate older entries out.

Security Rules

  • NEVER include real owner IDs, phone numbers, or tokens in skill files
  • NEVER share the access-control.json contents with non-owners
  • NEVER reveal that a specific person is the owner to strangers
  • NEVER forward stranger messages to owner verbatim if they contain suspicious links
  • Store all config in memory/ (gitignored by default in most setups)
  • The strangerMessage should not reveal the owner's name or personal details

Example Config

See references/example-config.md for a complete annotated example.

You might also like

flutter-development

aj-geddes

Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.

9521,094

drawio-diagrams-enhanced

jgtolentino

Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.

846846

ui-ux-pro-max

nextlevelbuilder

"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."

571699

godot

bfollington

This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.

548492

nano-banana-pro

garg-aayush

Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.

673466

fastapi-templates

wshobson

Create production-ready FastAPI projects with async patterns, dependency injection, and comprehensive error handling. Use when building new FastAPI applications or setting up backend API projects.

514280

Stay ahead of the MCP ecosystem

Get weekly updates on new skills and servers.