Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

Ai Pa

v1.0.2

AI Personal Assistant network skill for multi-agent PA coordination. Use when: contacting another PA, coordinating with peer agents, scheduling meetings betw...

0· 118·1 current·1 all-time
byNetanel Abergel@netanel-abergel

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for netanel-abergel/ai-pa.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Ai Pa" (netanel-abergel/ai-pa) from ClawHub.
Skill page: https://clawhub.ai/netanel-abergel/ai-pa
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install ai-pa

ClawHub CLI

Package manager switcher

npx clawhub@latest install ai-pa
Security Scan
VirusTotalVirusTotal
Pending
View report →
OpenClawOpenClaw
Suspicious
medium confidence
Purpose & Capability
The name/description match the instructions: the skill coordinates PAs, looks up contacts, schedules meetings and broadcasts messages. However, the instructions assume tooling (the 'gog' CLI, python3, messaging via JIDs) and an absolute primary source file (/opt/ocana/openclaw/workspace/PA_LIST.md) without declaring required binaries or credentials — this omission is unexpected.
!
Instruction Scope
The SKILL.md tells the agent to source /opt/ocana/.../.context (which may expose environment variables like OWNER_PHONE, JID_PA_ONBOARDING), read/write data/pa-directory.json, and run commands that will authenticate (gog auth add). Sourcing an absolute .context file and instructing to create/modify files in the workspace expand the skill's data access surface and may expose secrets or other agent state not justified solely by the description.
Install Mechanism
Instruction-only skill with no install spec or code files; this is low-risk in terms of arbitrary code downloads. There is no installer or archive extraction.
!
Credentials
The skill declares no required env vars or primary credential, yet it uses environment-like variables (GOG_ACCOUNT) and the 'gog' CLI for calendar/email/auth flows — i.e., it effectively requires account credentials but doesn't declare them. It also instructs sourcing a .context file that could contain sensitive credentials. The lack of declared credentials is disproportionate to the actual operations described.
Persistence & Privilege
always:false (good). The skill does instruct writing to data/pa-directory.json and suggests running 'gog auth add' which will persist auth state via the gog CLI; it does not ask to modify other skills or system-wide agent settings. Because the agent can invoke skills autonomously by default, access to persisted credentials (from .context or gog auth) would increase blast radius — consider that when deciding whether to allow the skill.
What to consider before installing
This skill mostly does what it says (coordinate PAs) but the instructions raise three practical concerns you should check before enabling it: - Review and sanitize the .context file path referenced (/opt/ocana/openclaw/workspace/skills/ai-pa/.context). That file may contain environment variables or tokens — ensure it does not hold secrets you don't want the skill to read. - The SKILL.md expects the 'gog' CLI and python3 but declares no required binaries or environment variables. If you adopt this skill, verify 'gog' is installed from a trusted source and understand how 'gog auth add' will store credentials (don't reuse shared or high-privilege keys). - The skill reads and writes data/pa-directory.json and refers to a global PA_LIST.md. Make sure file permissions and workspace isolation are appropriate (run in a sandbox if unsure) and check the directory contents for any sensitive contact data you don't want the skill to transmit. If you cannot confirm those points, or if you want to limit risk, avoid enabling autonomous invocation for this skill, run it in a restricted environment, or request the author to (a) declare required binaries/env vars and (b) remove sourcing of absolute context files or explicitly document what .context contains.

Like a lobster shell, security has layers — review code before you run it.

latestvk972jzw2mqtazshv3h50ydj23x8466gt
118downloads
0stars
3versions
Updated 3w ago
v1.0.2
MIT-0

AI-PA Network Skill

Load Local Context

CONTEXT_FILE="/opt/ocana/openclaw/workspace/skills/ai-pa/.context"
[ -f "$CONTEXT_FILE" ] && source "$CONTEXT_FILE"
# Then use: $OWNER_PHONE, $PA_LIST_FILE, $JID_PA_ONBOARDING, etc.

Minimum Model

Any model that can follow numbered steps and run bash commands.


Directory Setup

PRIMARY SOURCE: Always read PA contacts from /opt/ocana/openclaw/workspace/PA_LIST.md — this is the live, maintained index.

data/pa-directory.json may be used as a secondary/legacy source but PA_LIST.md takes precedence.

Silence Rules:

  • Casual acks from PAs (👍, "got it", "thanks", "noted") → NO_REPLY unless directly asked
  • "sure thing" rule: if a PA says "thanks" in a DM context → reply "sure thing"

Contact data also lives in data/pa-directory.json. If this file is missing, create it first.

Schema

{
  "pas": [
    {
      "name": "PA Name",
      "phone": "+1XXXXXXXXXX",
      "owner": "Owner Full Name",
      "owner_phone": "+1XXXXXXXXXX",
      "owner_role": "VP Product",
      "owner_email": "owner@company.com",
      "status": "active",
      "notes": ""
    }
  ],
  "groups": [
    {
      "name": "Group Name",
      "jid": "XXXXXXXXXXX@g.us",
      "purpose": "PA coordination"
    }
  ]
}

Load and Validate Directory

python3 -c "
import sys, json
try:
    with open('data/pa-directory.json') as f:
        d = json.load(f)
    for pa in d.get('pas', []):
        print(pa['name'], '->', pa['owner'], '(', pa['phone'], ')')
except FileNotFoundError:
    print('ERROR: data/pa-directory.json not found. Create it from the schema above.')
    sys.exit(1)
except json.JSONDecodeError as e:
    print('ERROR: Invalid JSON:', e)
    print('Fix: run python3 -m json.tool data/pa-directory.json to see the error')
    sys.exit(1)
"

If this fails → create the file from the schema above. Do not proceed without a valid directory.


Core Rules

Contact the PA (not the owner) for:

  • Scheduling meetings
  • Passing messages between owners
  • Coordination and follow-ups

Contact the owner directly only when:

  • Their PA is unresponsive for >1 hour on a time-sensitive matter
  • Explicitly instructed by your owner

Never contact an owner directly if contact_preference is "pa_only".


Task Templates

Find a PA's Contact

python3 -c "
import json, sys
try:
    with open('data/pa-directory.json') as f:
        d = json.load(f)
except (FileNotFoundError, json.JSONDecodeError) as e:
    print('ERROR:', e)
    sys.exit(1)

name = 'OWNER_NAME_HERE'  # replace with the name you are searching for
matches = [p for p in d.get('pas', []) if name.lower() in p['owner'].lower()]

if not matches:
    print('No PA found for owner:', name)
else:
    for m in matches:
        print('PA:', m['name'], '| Phone:', m['phone'], '| Owner:', m['owner'])
"

If no match found → ask your owner for the contact details.

Schedule a Meeting

1. Find the other PA's phone from pa-directory.json (use script above)
2. Message the PA:
   "Hey [PA Name], [your owner] wants to meet [their owner].
    Are they available [proposed time]? Or what works best?"
3. Wait for reply. If no reply after 2 hours on a business day:
   → Follow up once.
   If no reply after 4 hours:
   → Tell your owner and suggest contacting them directly.
4. Once agreed, create calendar event:
   GOG_ACCOUNT=owner@company.com gog calendar create primary \
     --summary "Meeting: [Owner A] + [Owner B]" \
     --start "YYYY-MM-DDTHH:MM:SS+00:00" \
     --end "YYYY-MM-DDTHH:MM:SS+00:00" \
     --attendees "other-owner@company.com"
5. Confirm with both PAs

Broadcast to All PAs

1. Find the group JID with purpose "pa_coordination" in pa-directory.json
2. Send to the group (not individual DMs)
3. For personal follow-ups only: DM each PA individually

If no coordination group exists → message each PA individually and suggest creating one.

Send Email on Owner's Behalf

Always confirm with owner before sending.

GOG_ACCOUNT=owner@company.com gog gmail send \
  --to "recipient@company.com" \
  --subject "Subject" \
  --body "Body"

If gog returns an auth error:

gog auth add owner@company.com --services gmail
# Then retry the send command

Add a New PA to Directory

python3 << 'EOF'
import json, sys, os

path = 'data/pa-directory.json'

if not os.path.exists(path):
    print('ERROR:', path, 'not found')
    sys.exit(1)

with open(path, 'r') as f:
    d = json.load(f)

new_pa = {
    'name': 'New PA Name',          # replace
    'phone': '+1XXXXXXXXXX',         # replace
    'owner': 'Owner Full Name',       # replace
    'owner_phone': '+1XXXXXXXXXX',   # replace
    'owner_role': 'Role',             # replace
    'owner_email': 'owner@company.com',  # replace
    'status': 'active',
    'notes': ''
}

# Check for duplicate phone
existing_phones = [p['phone'] for p in d.get('pas', [])]
if new_pa['phone'] in existing_phones:
    print('WARNING: PA with phone', new_pa['phone'], 'already exists. Not adding.')
    sys.exit(1)

d.setdefault('pas', []).append(new_pa)

with open(path, 'w') as f:
    json.dump(d, f, indent=2, ensure_ascii=False)

print('Added:', new_pa['name'], 'for owner:', new_pa['owner'])
EOF

PA Unresponsive Protocol

  1. Try messaging their phone number again
  2. If no response after 2 hours on a business day → contact their owner (only if contact_preference allows)
  3. Log the issue in your memory files

Quick Reference

TaskAction
Find PA phoneCheck pa-directory.json → pas → owner
Schedule meetingContact other PA → agree time → create calendar event
Broadcast messageUse PA coordination group JID
Billing issueSee billing-monitor skill
New PAAdd to pa-directory.json → announce in group
PA unresponsiveWait 2h → contact owner if urgent
Directory missingCreate from schema above

Cost Tips

  • Cheap: Simple lookups (find phone, list PAs) — any small model works
  • Expensive: Multi-step coordination with reasoning (timezones, conflicts) — use larger model only when needed
  • Batch: When adding multiple PAs, run one Python script — not one per PA
  • Avoid: Don't search the web for contact info if it's in the local directory

Error Reference

ErrorCauseFix
pa-directory.json missingFirst-time setupCreate file from schema above
JSON parse errorBad file formatRun python3 -m json.tool data/pa-directory.json
PA not foundSpelling mismatch or not addedSearch by partial name; add to directory
gog auth errorToken expiredRe-run gog auth add owner@company.com --services gmail
No PA coordination groupEarly-stage networkMessage individually; suggest creating a group

Comments

Loading comments...