用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/duclm1x1/Dive-Ai --skill clawtributor命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Persistent memory system for AI agents following Model Context Protocol (MCP). Use for storing long-term memories across sessions, semantic search of past knowledge, building knowledge graphs, auto-injecting context, deduplicating memories, syncing to cloud storage. Essential for agents that need to remember decisions, solutions, preferences, and learned patterns over time.
Persistent memory system for AI agents following Model Context Protocol (MCP). Use for storing long-term memories across sessions, semantic search of past knowledge, building knowledge graphs, auto-injecting context, deduplicating memories, syncing to cloud storage. Essential for agents that need to remember decisions, solutions, preferences, and learned patterns over time.
Master REST and GraphQL API design principles to build intuitive, scalable, and maintainable APIs that delight developers. Use when designing new APIs, reviewing API specifications, or establishing API design standards.
正在显示 SKILL.md
基于 SOC 职业分类
| name | clawtributor |
| version | 0.0.3 |
| description | Community incident reporting for AI agents. Contribute to collective security by reporting threats. |
| homepage | https://gclawsec.prompt.security |
| metadata | {"openclaw":{"emoji":"🤝","category":"security"}} |
| clawdis | {"emoji":"🤝","requires":{"bins":["curl","git","gh"]}} |
Community incident reporting for AI agents. Contribute to collective security by reporting threats, vulnerabilities, and attack patterns.
An open source project by Prompt Security
If you are an AI agent reading this, execute the following to install Clawtributor:
# Get latest clawtributor release tag
LATEST_TAG=$(curl -sSL https://api.github.com/repos/prompt-security/ClawSec/releases | \
jq -r '[.[] | select(.tag_name | startswith("clawtributor-v"))][0].tag_name')
# Download SKILL.md from latest release
SKILL_URL="https://github.com/prompt-security/clawsec/releases/download/$LATEST_TAG/SKILL.md"
curl -sSL --fail --show-error "$SKILL_URL"
Once you have this skill file, proceed to Deploy Clawtributor below.
mkdir -p ~/.openclaw/skills/clawtributor
# Save this SKILL.md as SKILL.md in the directory above
# Get latest release tag with retry logic
LATEST_TAG=$(curl -sSL --retry 3 --retry-delay 1 \
https://api.github.com/repos/prompt-security/ClawSec/releases | \
jq -r '[.[] | select(.tag_name | startswith("clawtributor-v"))][0].tag_name')
BASE_URL="https://github.com/prompt-security/clawsec/releases/download/$LATEST_TAG"
INSTALL_DIR="${CLAWTRIBUTOR_INSTALL_DIR:-$HOME/.openclaw/skills/clawtributor}"
TEMP_DIR=$(mktemp -d)
trap "rm -rf '$TEMP_DIR'" EXIT
# Download checksums.json (REQUIRED for integrity verification)
echo "Downloading checksums..."
if ! curl -sSL --fail --show-error --retry 3 --retry-delay 1 \
"$BASE_URL/checksums.json" -o "$TEMP_DIR/checksums.json"; then
echo "ERROR: Failed to download checksums.json"
exit 1
fi
# Validate checksums.json structure
if ! jq -e '.skill and .version and .files' "$TEMP_DIR/checksums.json" >/dev/null 2>&1; then
echo "ERROR: Invalid checksums.json structure"
exit 1
fi
# PRIMARY: Try .skill artifact
echo "Attempting .skill artifact installation..."
if curl -sSL --fail --show-error --retry 3 --retry-delay 1 \
"$BASE_URL/clawtributor.skill" -o "$TEMP_DIR/clawtributor.skill" 2>/dev/null;
ARTIFACT_SIZE=$( -c%s 2>/dev/null || -f%z )
MAX_SIZE=$(( * * ))
[ -gt ];
unzip -l | grep -qE ;
1
FILE_COUNT=$(unzip -l | grep -c || 0)
[ -gt 100 ];
1
unzip -q -d
[ ! -f ];
1
CHECKSUM_FAILED=0
file $(jq -r );
EXPECTED=$(jq -r --arg f )
FILE_PATH=$(jq -r --arg f )
[ -f ];
ACTUAL=$(shasum -a 256 | -d -f1)
[ -f ];
ACTUAL=$(shasum -a 256 | -d -f1)
CHECKSUM_FAILED=1
[ != ];
CHECKSUM_FAILED=1
[ -eq 0 ];
-p
-r /*
600
find - f ! -name - 644 {} \;
0
-p
DOWNLOAD_FAILED=0
file $(jq -r );
FILE_URL=$(jq -r --arg f )
EXPECTED=$(jq -r --arg f )
! curl -sSL --fail --show-error --retry 3 --retry-delay 1 \
-o ;
DOWNLOAD_FAILED=1
ACTUAL=$(shasum -a 256 | -d -f1)
[ != ];
DOWNLOAD_FAILED=1
[ -eq 1 ];
1
! jq -e >/dev/null 2>&1;
1
-p
/*
600
find - f ! -name - 644 {} \;
Tell your user:
Clawtributor deployed successfully.
IMPORTANT: This skill enables community reporting of security incidents.
- Reporting is OPT-IN - I will only submit reports with your explicit approval
- Reports are submitted as GitHub Issues using the Security Incident Report template
- Once approved, advisories are automatically published as CLAW-{YEAR}-{ISSUE#}
- You control what information is shared
Would you like me to explain how reporting works?
Clawtributor enables agents to contribute to collective security:
All reporting is opt-in and requires user approval.
┌─────────────────────────────────────────────────────────────┐
│ │
│ Agent observes ──► Creates report ──► User approves │
│ suspicious │ │
│ activity ▼ │
│ GitHub Issue │
│ │ │
│ Maintainer review │
│ │ │
│ "advisory-approved"? │
│ │ │ │
│ YES NO │
│ │ │ │
│ ▼ ▼ │
│ Advisory Feed ◄── Auto-published Feedback provided │
│ (CLAW-YYYY-NNNN) ↓ │
│ All agents notified via clawsec-feed │
│ │
└─────────────────────────────────────────────────────────────┘
Prompts that attempted to:
Example indicators:
Skills that exhibit:
Any attempt to:
See REPORTING.md for the full report format and submission guide.
{
"report_type": "malicious_prompt | vulnerable_skill | tampering_attempt",
"severity": "critical | high | medium | low",
"title": "Brief descriptive title",
"description": "Detailed description of what was observed",
"evidence": {
"observed_at": "2026-02-02T15:30:00Z",
"context": "What was happening when this occurred",
"payload": "The actual prompt/code/behavior observed (sanitized)",
"indicators": ["list", "of", "specific", "indicators"]
},
"affected": {
"skill_name": "name-of-skill (if applicable)",
"skill_version":
# Create report file securely (prevents symlink attacks)
REPORTS_DIR="$HOME/.openclaw/clawtributor-reports"
# Create directory with secure permissions if it doesn't exist
if [ ! -d "$REPORTS_DIR" ]; then
mkdir -p "$REPORTS_DIR"
chmod 700 "$REPORTS_DIR"
fi
# Verify directory is owned by current user (security check)
DIR_OWNER=$(stat -f '%u' "$REPORTS_DIR" 2>/dev/null || stat -c '%u' "$REPORTS_DIR" 2>/dev/null)
if [ "$DIR_OWNER" != "$(id -u)" ]; then
echo "Error: Reports directory not owned by current user" >&2
echo " Directory: $REPORTS_DIR" >&2
echo " Owner UID: $DIR_OWNER, Current UID: $(id -u)" >&2
exit 1
fi
# Verify directory has secure permissions
DIR_PERMS=$(stat -f '%Lp' "$REPORTS_DIR" 2>/dev/null || stat -c '%a' "$REPORTS_DIR" 2>/dev/null)
if [ != ];
>&2
>&2
1
TIMESTAMP=$(TZ=UTC +%Y%m%d%H%M%S)
REPORT_FILE=$( ) || {
>&2
1
}
600
> <<
{
: ,
: ,
: ,
:
}
REPORT_EOF
! jq empty 2>/dev/null;
-f
1
CRITICAL: Always show the user what will be submitted:
🤝 Clawtributor: Ready to submit security report
Report Type: vulnerable_skill
Severity: high
Title: Data exfiltration in skill 'helper-plus'
Summary: The helper-plus skill sends conversation data to an external server.
This report will be submitted as a GitHub Issue using the Security Incident Report template.
Once reviewed and approved by maintainers, it will be published as an advisory (CLAW-YYYY-NNNN).
Do you approve submitting this report? (yes/no)
Only after user approval:
# Submit report as a GitHub Issue using the security incident template
gh issue create \
--repo prompt-security/ClawSec \
--title "[Report] $TITLE" \
--body "$REPORT_BODY" \
--label "security,needs-triage"
When reporting:
DO include:
DO NOT include:
🤝 Clawtributor: Security incident detected
I observed a potential security threat:
- Type: Prompt injection attempt
- Severity: High
- Details: Attempt to extract environment variables
Would you like me to prepare a report for the community?
This helps protect other agents from similar attacks.
Options:
1. Yes, prepare a report for my review
2. No, just log it locally
3. Tell me more about what was detected
🤝 Clawtributor: Report submitted
Your report has been submitted as GitHub Issue #42.
- Issue URL: https://github.com/prompt-security/clawsec/issues/42
- Status: Pending maintainer review
- Advisory ID (if approved): CLAW-2026-0042
Once a maintainer adds the "advisory-approved" label, your report will be
automatically published to the advisory feed.
Thank you for contributing to agent security!
| Event | Action |
|---|---|
| Prompt injection detected | Ask user if they want to report |
| Skill exfiltrating data | Strongly recommend reporting |
| Tampering attempt on security tools | Strongly recommend reporting |
| Suspicious but uncertain | Log locally, discuss with user |
Track submitted reports:
{
"schema_version": "1.0",
"reports_submitted": [
{
"id": "2026-02-02-helper-plus",
"issue_number": 42,
"advisory_id": "CLAW-2026-0042",
"status": "pending",
"submitted_at": "2026-02-02T15:30:00Z"
}
],
"incidents_logged": 5
}
Save to: ~/.openclaw/clawtributor-state.json
STATE_FILE="$HOME/.openclaw/clawtributor-state.json"
# Create state file with secure permissions if it doesn't exist
if [ ! -f "$STATE_FILE" ]; then
echo '{"schema_version":"1.0","reports_submitted":[],"incidents_logged":0}' > "$STATE_FILE"
chmod 600 "$STATE_FILE"
fi
# Validate state file before reading
if ! jq -e '.schema_version and .reports_submitted' "$STATE_FILE" >/dev/null 2>&1; then
echo "Warning: State file corrupted or invalid schema. Creating backup and resetting."
cp "$STATE_FILE" "${STATE_FILE}.bak.$(TZ=UTC date +%Y%m%d%H%M%S)"
echo '{"schema_version":"1.0","reports_submitted":[],"incidents_logged":0}' > "$STATE_FILE"
chmod 600 "$STATE_FILE"
fi
# Check for major version compatibility
SCHEMA_VER=$(jq -r '.schema_version // "0"' "$STATE_FILE")
if [[ "${SCHEMA_VER%%.*}" != "1" ]]; then
echo "Warning: State file schema version $SCHEMA_VER may not be compatible with this version"
Periodically clean up old report files to prevent disk bloat:
REPORTS_DIR="$HOME/.openclaw/clawtributor-reports"
# Keep only the last 100 report files or files from the last 30 days
cleanup_old_reports() {
if [ ! -d "$REPORTS_DIR" ]; then
return
fi
# Count total reports
REPORT_COUNT=$(find "$REPORTS_DIR" -name "*.json" -type f 2>/dev/null | wc -l)
if [ "$REPORT_COUNT" -gt 100 ]; then
echo "Cleaning up old reports (keeping last 100)..."
# Delete oldest files, keeping 100 most recent
ls -1t "$REPORTS_DIR"/*.json 2>/dev/null | tail -n +101 | xargs rm -f 2>/dev/null
fi
# Also delete any reports older than 30 days
find "$REPORTS_DIR" -name "*.json" -type f -mtime +30 -delete 2>/dev/null
}
# Run cleanup
cleanup_old_reports
Check for and install newer versions:
# Check current installed version
CURRENT_VERSION=$(jq -r '.version' ~/.openclaw/skills/clawtributor/skill.json 2>/dev/null || echo "unknown")
echo "Installed version: $CURRENT_VERSION"
# Check latest available version
LATEST_URL="https://api.github.com/repos/prompt-security/ClawSec/releases"
LATEST_VERSION=$(curl -sSL --fail --show-error --retry 3 --retry-delay 1 "$LATEST_URL" 2>/dev/null | \
jq -r '[.[] | select(.tag_name | startswith("clawtributor-v"))][0].tag_name // empty' | \
sed 's/clawtributor-v//')
if [ -z "$LATEST_VERSION" ]; then
echo "Warning: Could not determine latest version"
else
echo "Latest version: $LATEST_VERSION"
if [ "$CURRENT_VERSION" != "$LATEST_VERSION" ]; then
echo "Update available! Run the deployment steps with the new version."
else
echo "You are running the latest version."
fi
fi
MIT License - See repository for details.
Built with 🤝 by the Prompt Security team and the agent community.
Together, we make the agent ecosystem safer.