# Send Agent Access Control to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- Download the package from Yavira.
- Extract it into a folder your agent can access.
- Paste one of the prompts below and point your agent at the extracted folder.
## Suggested prompts
### New install

```text
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
```
### Upgrade existing

```text
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "agent-access-control",
    "name": "Agent Access Control",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/bowen31337/agent-access-control",
    "canonicalUrl": "https://clawhub.ai/bowen31337/agent-access-control",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/agent-access-control",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=agent-access-control",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "SKILL.md",
      "references/example-config.md",
      "scripts/init-access-control.sh",
      "skill.toml"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "slug": "agent-access-control",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-29T04:26:07.079Z",
      "expiresAt": "2026-05-06T04:26:07.079Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=agent-access-control",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=agent-access-control",
        "contentDisposition": "attachment; filename=\"agent-access-control-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "agent-access-control"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/agent-access-control"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/agent-access-control",
    "downloadUrl": "https://openagent3.xyz/downloads/agent-access-control",
    "agentUrl": "https://openagent3.xyz/skills/agent-access-control/agent",
    "manifestUrl": "https://openagent3.xyz/skills/agent-access-control/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/agent-access-control/agent.md"
  }
}
```
## Documentation

### 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

TierLevelCapabilities0StrangerDiplomatic deflection only, zero access1Chat-onlyBasic conversation, no tools or private info2TrustedChat + 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:

Extract sender ID (phone number, user ID, etc.)
Normalize ID: strip spaces, ensure country code prefix for phones
Check ownerIds → if match: full access, respond normally
Check blockedIds → if match: silent ignore, respond with NO_REPLY
Check approvedContacts[senderId] → if match: respond within their tier
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 saysActionapprove, yes, trustedAdd to approvedContacts with tier 2 (trusted)chat, chat-only, chat onlyAdd to approvedContacts with tier 1 (chat-only)block, no, denyAdd to blockedIdsignoreRemove 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/dayStranger1 (deflection only)3Chat-only20100Trusted50500OwnerUnlimitedUnlimited

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.
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: bowen31337
- Version: 1.0.1
## Source health
- Status: healthy
- Item download looks usable.
- Yavira can redirect you to the upstream package for this item.
- Health scope: item
- Reason: direct_download_ok
- Checked at: 2026-04-29T04:26:07.079Z
- Expires at: 2026-05-06T04:26:07.079Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/agent-access-control)
- [Send to Agent page](https://openagent3.xyz/skills/agent-access-control/agent)
- [JSON manifest](https://openagent3.xyz/skills/agent-access-control/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/agent-access-control/agent.md)
- [Download page](https://openagent3.xyz/downloads/agent-access-control)