← Back to Skills
Automation

praesidia-a2a

msoica By msoica 👁 8 views ▲ 0 votes

Verify AI agents, check trust scores (0-100), fetch A2A agent

GitHub
---
name: Praesidia
description: Verify AI agents, check trust scores (0-100), fetch A2A agent cards, discover marketplace agents, apply guardrails for security and compliance. Use when user mentions agent verification, trust scores, agent discovery, A2A protocol, agent identity, agent marketplace, guardrails, security policies, content moderation, or asks "is this agent safe?" or "find agents that can [task]" or "apply guardrails to protect my agent".
metadata: {"openclaw":{"requires":{"env":["PRAESIDIA_API_KEY"]},"primaryEnv":"PRAESIDIA_API_KEY","homepage":"https://praesidia.ai","emoji":"🛡️"}}
---

# Praesidia Agent Identity, Verification & Guardrails

Verify AI agents, check trust scores (0-100), discover marketplace agents, and apply guardrails for security and compliance.

## Core Capabilities

- **Verify agents** - Check if an agent is registered, verified, and trustworthy
- **Trust scores** - View 0-100 trust ratings and verification status
- **Agent discovery** - Search marketplace for public agents by capability
- **Guardrails** - Apply security policies and content moderation to agents
- **A2A protocol** - Fetch standard Agent-to-Agent protocol cards

## Prerequisites

1. Praesidia account: https://praesidia.ai
2. API key from Settings → API Keys
3. Configure in `~/.openclaw/openclaw.json`:

```json
{
  "skills": {
    "entries": {
      "praesidia": {
        "apiKey": "pk_live_your_key_here",
        "env": {
          "PRAESIDIA_API_URL": "https://api.praesidia.ai"
        }
      }
    }
  }
}
```

For local development, use `http://localhost:3000` as the URL.

---

## Quick Reference

### 1. Verify an Agent

**User says:** "Is agent chatbot-v2 safe?" / "Verify agent chatbot-v2"

**Your action:**
```javascript
web_fetch({
  url: "${PRAESIDIA_API_URL}/agents/chatbot-v2/agent-card",
  headers: {
    "Authorization": "Bearer ${PRAESIDIA_API_KEY}",
    "Accept": "application/json"
  }
})
```

**Present to user:**
- ✅ Agent name & description
- 🛡️ **Trust score (0-100)** and trust level
- ✓ Verification status (verified date)
- 🔧 Capabilities (what the agent can do)
- 📜 Compliance (SOC2, GDPR, etc.)
- 🔗 Agent card URL

**Example output:**
```
✅ ChatBot V2 is verified and safe to use!

Trust Score: 92.5/100 (VERIFIED)
Status: ACTIVE
Capabilities: message:send, task:create, data:analyze
Compliance: SOC2, GDPR
Last verified: 2 days ago

Agent card: https://api.praesidia.ai/agents/chatbot-v2/agent-card
```

---

### 2. List Guardrails for an Agent

**User says:** "What guardrails are configured for my agent?" / "Show me security policies for chatbot-v2"

**Your action:**
```javascript
// First, get the user's organization ID from their profile or context
// Then fetch guardrails
web_fetch({
  url: "${PRAESIDIA_API_URL}/organizations/${orgId}/guardrails?agentId=${agentId}",
  headers: {
    "Authorization": "Bearer ${PRAESIDIA_API_KEY}",
    "Accept": "application/json"
  }
})
```

**Present to user:**
- List of guardrails with:
  - Name and description
  - Type (RULE, ML, LLM)
  - Category (CONTENT, SECURITY, COMPLIANCE, etc.)
  - Action (BLOCK, WARN, REDACT, REPLACE)
  - Scope (INPUT, OUTPUT, BOTH)
  - Enabled status
  - Trigger count

**Example output:**
```
Found 3 guardrails for ChatBot V2:

1. PII Detection (ENABLED)
   - Type: ML | Category: SECURITY
   - Scope: BOTH (input & output)
   - Action: REDACT sensitive data
   - Triggered: 45 times

2. Toxic Language Filter (ENABLED)
   - Type: RULE | Category: CONTENT
   - Scope: BOTH
   - Action: BLOCK toxic content
   - Triggered: 12 times

3. Financial Advice Warning (ENABLED)
   - Type: LLM | Category: COMPLIANCE
   - Scope: OUTPUT only
   - Action: WARN if detected
   - Triggered: 3 times
```

---

### 3. Get Available Guardrail Templates

**User says:** "What guardrail templates are available?" / "Show me security templates"

**Your action:**
```javascript
web_fetch({
  url: "${PRAESIDIA_API_URL}/organizations/${orgId}/guardrails/templates",
  headers: {
    "Authorization": "Bearer ${PRAESIDIA_API_KEY}",
    "Accept": "application/json"
  }
})
```

**Available Templates:**

**Content Moderation:**
- TOXIC_LANGUAGE - Detect toxic/harmful language
- PROFANITY_FILTER - Filter profanity
- HATE_SPEECH - Detect hate speech
- VIOLENCE_DETECTION - Detect violent content
- ADULT_CONTENT - Filter adult content

**Security:**
- PII_DETECTION - Detect personally identifiable information
- CREDIT_CARD_DETECTION - Detect credit card numbers
- SSN_DETECTION - Detect social security numbers
- API_KEY_DETECTION - Detect leaked API keys
- PROMPT_INJECTION - Detect prompt injection attacks
- JAILBREAK_DETECTION - Detect jailbreak attempts

**Compliance:**
- FINANCIAL_ADVICE - Flag financial advice
- MEDICAL_ADVICE - Flag medical advice
- LEGAL_ADVICE - Flag legal advice
- GDPR_COMPLIANCE - Enforce GDPR rules
- HIPAA_COMPLIANCE - Enforce HIPAA rules

**Brand Safety:**
- COMPETITOR_MENTIONS - Detect competitor mentions
- POSITIVE_TONE - Ensure positive tone
- BRAND_VOICE - Maintain brand voice
- OFF_TOPIC_DETECTION - Detect off-topic responses

**Accuracy:**
- HALLUCINATION_DETECTION - Detect hallucinations
- FACT_CHECKING - Verify facts
- SOURCE_VALIDATION - Validate sources
- CONSISTENCY_CHECK - Check consistency

---

### 4. Apply a Guardrail to an Agent

**User says:** "Add PII detection to my chatbot" / "Apply toxic language filter to agent xyz"

**Your action:**
```javascript
web_fetch({
  url: "${PRAESIDIA_API_URL}/organizations/${orgId}/guardrails",
  method: "POST",
  headers: {
    "Authorization": "Bearer ${PRAESIDIA_API_KEY}",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    name: "PII Detection",
    description: "Automatically detect and redact PII",
    agentId: "${agentId}",
    template: "PII_DETECTION",
    type: "ML",
    category: "SECURITY",
    scope: "BOTH",
    action: "REDACT",
    severity: "HIGH",
    isEnabled: true,
    priority: 0
  })
})
```

**Guardrail Options:**

**Type:**
- RULE - Simple regex/keyword matching (fast)
- ML - Machine learning model (balanced)
- LLM - LLM-powered validation (most accurate)

**Category:**
- CONTENT - Content moderation
- SECURITY - Security checks
- COMPLIANCE - Regulatory compliance
- BRAND - Brand safety
- ACCURACY - Accuracy checks
- CUSTOM - Custom rules

**Scope:**
- INPUT - Validate user input only
- OUTPUT - Validate agent output only
- BOTH - Validate both directions

**Action:**
- BLOCK - Block the request/response entirely
- WARN - Log warning but allow through
- REDACT - Mask the offending content
- REPLACE - Replace with alternative content
- RETRY - Retry with modified prompt
- ESCALATE - Escalate to human review

**Severity:**
- LOW, MEDIUM, HIGH, CRITICAL

---

### 5. Validate Content Against Guardrails

**User says:** "Check if this message passes guardrails: [content]"

**Your action:**
```javascript
web_fetch({
  url: "${PRAESIDIA_API_URL}/organizations/${orgId}/guardrails/validate",
  method: "POST",
  headers: {
    "Authorization": "Bearer ${PRAESIDIA_API_KEY}",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    content: "User's message here",
    agentId: "${agentId}",
    scope: "INPUT"
  })
})
```

**Response shows:**
- Whether content passed or failed
- Which guardrails were triggered
- Suggested actions (block, redact, warn)
- Modified content (if redaction applied)

---

### 6. Discover Public Agents

**User says:** "Find public data analysis agents" / "Show me chatbot agents"

**Your action:**
```javascript
web_fetch({
  url: "${PRAESIDIA_API_URL}/agents/discovery?visibility=PUBLIC&search=data",
  headers: { "Accept": "application/json" }
  // Authorization optional for public agents (includes it for more results)
})
```

**Filters available:**
- `?visibility=PUBLIC` - public marketplace agents
- `?role=SERVER` - agents that provide services
- `?role=CLIENT` - agents that consume services
- `?status=ACTIVE` - only active agents
- `?search=keyword` - search by name/description

**Present to user:**
- List of matching agents with:
  - Name, description, agent ID
  - Trust score and level
  - Role (SERVER/CLIENT)
  - Key capabilities
  - Link to full card

**Example output:**
```
Found 2 public data analysis agents:

1. OpenData Analyzer (VERIFIED - 88.0/100)
   - Capabilities: data:analyze, chart:generate, report:create
   - Role: SERVER | Status: ACTIVE
   - Card: https://api.praesidia.ai/agents/opendata-1/agent-card

2. CSV Processor (STANDARD - 70.0/100)
   - Capabilities: file:parse, data:transform, export:json
   - Role: SERVER | Status: ACTIVE
   - Card: https://api.praesidia.ai/agents/csv-proc/agent-card
```

---

### 7. List User's Agents

**User says:** "Show my agents" / "List all my server agents"

**Your action:**
```javascript
web_fetch({
  url: "${PRAESIDIA_API_URL}/agents/discovery?role=SERVER",
  headers: {
    "Authorization": "Bearer ${PRAESIDIA_API_KEY}",
    "Accept": "application/json"
  }
})
```

This returns all agents the user has access to (their own + team/org agents).

---

## Trust Levels Guide

Present trust information clearly to help users make decisions:

| Trust Score | Level | Meaning | Recommendation |
|-------------|-------|---------|----------------|
| 90-100 | **VERIFIED** | Fully vetted, compliant, verified identity | ✅ Safe to use |
| 70-89 | **STANDARD** | Good reputation, basic verification | ✅ Generally safe |
| 50-69 | **LIMITED** | Minimal verification | ⚠️ Use with caution |
| 0-49 | **UNTRUSTED** | Not verified or poor reputation | ❌ Not recommended |

Always show the trust score numerically (e.g., 92.5/100) and the level (e.g., VERIFIED).

---

## Error Handling

| Error | Meaning | What to tell user |
|-------|---------|-------------------|
| 401 Unauthorized | API key missing/invalid | "Check PRAESIDIA_API_KEY in ~/.openclaw/openclaw.json" |
| 403 Forbidden | No permission | "You don't have access to this agent" |
| 404 Not Found | Agent doesn't exist | "Agent not found. Check t

... (truncated)
automation

Comments

Sign in to leave a comment

Loading comments...