A voice-first tool to send messages, manage briefings, and preserve context across your personal and professional team communication.
Install
mkdir -p .claude/skills/mypa && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/19464" && unzip -o skill.zip -d .claude/skills/mypa && rm skill.zipInstalls to .claude/skills/mypa
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Personal communication hub. Send tezits to family/team members, manage messages, get briefings, interrogate context, and share mirrors. Voice-first with Library of Context preservation and Tezit Protocol support.Key capabilities
- →Send and manage Tez messages
- →Retrieve work briefings
- →Interrogate project context
- →Share communication mirrors
- →Resolve multi-team scopes
How it works
MyPA acts as a voice-first hub where messages are stored as discrete Tez items with preserved context. It requires a bootstrap sequence to discover team capabilities and endpoints before performing operations.
Inputs & outputs
When to use mypa
- →Managing team messages
- →Preserving message context
- →Retrieving work briefings
- →Sharing communication mirrors
About this skill
MyPA Skill
MyPA is a voice-first personal communication hub. Every message is a Tez (short for Tezit) — a discrete, actionable item with its full context iceberg preserved forever. This skill lets you send messages to teammates, manage your tez feed, get briefings, interrogate context, and share mirrors.
Quick Start for External OpenClaw
This skill works with any OpenClaw runtime, not just the MyPA Canvas UI.
1. Install
cp SKILL.md ~/.openclaw/workspace/skills/mypa/SKILL.md
2. Set Environment
export MYPA_API_URL="https://api.mypa.chat" # or your instance URL
export MYPA_EMAIL="[email protected]"
export MYPA_PASSWORD="your-password"
# Optional: for PA-to-PA messaging
export RELAY_URL="https://relay.tezit.com" # or your relay URL
3. Verify
# Login
TOKEN=$(curl -s -X POST "$MYPA_API_URL/api/auth/login" \
-H "Content-Type: application/json" \
-d "{\"email\":\"$MYPA_EMAIL\",\"password\":\"$MYPA_PASSWORD\"}" | jq -r '.data.tokens.accessToken')
# Bootstrap — discover teams, capabilities, endpoints
curl -s "$MYPA_API_URL/api/auth/bootstrap" -H "Authorization: Bearer $TOKEN" | jq .
If you see data.user and data.teams in the response, you're connected.
Bootstrap Flow (CRITICAL for External Runtimes)
On first contact with a MyPA instance, always run the bootstrap sequence:
- Login →
POST /api/auth/login→ storeaccessToken+refreshToken - Bootstrap →
GET /api/auth/bootstrap→ discover:teams[]— all teams the user belongs tocapabilities— which integrations are available (relay, crm, paWorkspace, federation, scheduler)instanceMode—"team"or"personal"connectedHubs— (personal mode only) federated team hubsendpoints— backend URL, relay URL, cross-team URL
- If
teams.length > 1→ present the list and ask the user which team to scope to - If
teams.length === 1→ set scope automatically - Store the resolved team scope in conversation memory for subsequent operations
curl "$MYPA_API_URL/api/auth/bootstrap" \
-H "Authorization: Bearer $TOKEN"
Response shape:
{
"data": {
"user": { "id": "uuid", "email": "...", "name": "...", "department": "...", "teamId": "uuid" },
"teams": [{ "id": "uuid", "name": "Alpha Team", "role": "member", "isActive": true, "memberCount": 4 }],
"instanceMode": "team",
"capabilities": { "relay": true, "crm": false, "paWorkspace": false, "federation": true, "scheduler": false },
"connectedHubs": [],
"endpoints": { "backend": "https://api.mypa.chat", "relay": "http://10.108.0.2:3002", "crossTeam": null }
}
}
Multi-Team Scope Resolution (CRITICAL)
Users may belong to multiple teams. Write operations must be scoped to a specific team.
Rules
- Read operations (context, briefing, feed, library search): use the user's active team by default. In personal mode, can aggregate across all teams.
- Write operations (create team card, classify, relay share): MUST have an explicit
teamIdwhen the user belongs to 2+ teams. - Disambiguation protocol: if
teams.length > 1and no teamId is specified, the backend returnsAMBIGUOUS_TEAM_SCOPEwith the list of teams. Present this to the user and ask them to choose.
Handling AMBIGUOUS_TEAM_SCOPE
If a write operation returns HTTP 400 with error.code === "AMBIGUOUS_TEAM_SCOPE":
{
"error": {
"code": "AMBIGUOUS_TEAM_SCOPE",
"message": "User is a member of multiple teams. Specify teamId explicitly.",
"teams": [
{ "id": "team-1-uuid", "name": "Alpha Team", "role": "member" },
{ "id": "team-2-uuid", "name": "Beta Team", "role": "admin" }
]
}
}
Agent response: Present the team list and ask the user which team they mean. Then retry the operation with the selected teamId.
Scope Modes
team:{teamId}— scoped to a specific team (default for write operations)personal— local data only (user's personal tezits, no team context)all-teams— read-only aggregation across all connected teams (personal instance mode only, via cross-team endpoints)
Authentication
All requests require a JWT Bearer token. Obtain one by logging in.
Login:
curl -X POST "$MYPA_API_URL/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"email": "'"$MYPA_EMAIL"'", "password": "'"$MYPA_PASSWORD"'"}'
Store accessToken and refreshToken from the response. Include on every request:
Authorization: Bearer $TOKEN
Access tokens expire after 15 minutes. On 401, refresh:
curl -X POST "$MYPA_API_URL/api/auth/refresh" \
-H "Content-Type: application/json" \
-d '{"refreshToken": "'"$REFRESH_TOKEN"'"}'
Optional CRM Environment
If Twenty CRM is configured for this deployment, set:
export TWENTY_API_URL="http://localhost:3000"
export TWENTY_API_KEY="your_twenty_api_key"
Use CRM calls only when both are present. If missing, continue with MyPA-only workflows.
Optional PA Workspace bridge for Google execution flows:
export PA_WORKSPACE_API_URL="http://localhost:3003"
When set, CRM orchestration can optionally execute PA email/calendar actions in addition to Tez draft generation.
CRM + Tez Operations
IMPORTANT: Before any CRM operation, check CRM status first. If configured: true and reachable: true, proceed with CRM calls. If not, inform the user that CRM is not yet set up.
CRM Intent Routing (CRITICAL)
Treat CRM as an API integration (Twenty), not a local workspace file.
When a user asks things like:
- "add this person to CRM"
- "update that deal"
- "show my contacts/opportunities/tasks"
You MUST:
- Call
GET /api/crm/statusfirst. - If
data.configured === trueanddata.reachable === true, execute CRM API calls (/api/crm/people,/api/crm/opportunities,/api/crm/tasks). - If not configured/reachable, tell the user CRM integration is not configured or unreachable and ask for setup help (URL/key), not for a file path.
You MUST NOT:
- ask the user for a "CRM file", "CRM folder", or local CRM path as the primary approach.
- claim CRM is unavailable just because no local file exists.
Example user request:
"Add my wife, Natalie Williams to our CRM."
Expected action flow:
GET /api/crm/status- If healthy,
POST /api/crm/peoplewith structured name:
curl -X POST "$MYPA_API_URL/api/crm/people" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"payload":{"name":{"firstName":"Natalie","lastName":"Williams"}}}'
- Confirm creation result to user.
Check CRM + runtime status
curl "$MYPA_API_URL/api/crm/status" \
-H "Authorization: Bearer $TOKEN"
curl "$MYPA_API_URL/api/crm/workflows/status" \
-H "Authorization: Bearer $TOKEN"
List CRM entities
curl "$MYPA_API_URL/api/crm/people?limit=20" \
-H "Authorization: Bearer $TOKEN"
curl "$MYPA_API_URL/api/crm/opportunities?limit=20" \
-H "Authorization: Bearer $TOKEN"
curl "$MYPA_API_URL/api/crm/tasks?limit=20" \
-H "Authorization: Bearer $TOKEN"
Write CRM entities (create/update)
Create a person — name is a structured {firstName, lastName} object. Use emails.primaryEmail for email.
curl -X POST "$MYPA_API_URL/api/crm/people" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"payload":{"name":{"firstName":"Jane","lastName":"Example"},"emails":{"primaryEmail":"[email protected]"},"jobTitle":"VP Sales","city":"New York","phones":{"primaryPhoneNumber":"+15551234567"}}}'
Update a person — PATCH with only the fields to change:
curl -X PATCH "$MYPA_API_URL/api/crm/people/<entity-id>" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"payload":{"jobTitle":"CTO","city":"San Francisco"}}'
Update a task:
curl -X PATCH "$MYPA_API_URL/api/crm/tasks/<task-id>" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"payload":{"status":"in_progress"}}'
Build Tez-ready context from CRM
curl -X POST "$MYPA_API_URL/api/crm/tez-context" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"entityType":"opportunity","entityId":"<id>"}'
Use data.relayContext with relay /tez/share or /conversations/:id/messages.
Cross-system coordination workflow
curl -X POST "$MYPA_API_URL/api/crm/workflows/coordinate" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"entityType":"opportunity",
"entityId":"<id>",
"objective":"Move deal to next stage with clear owner actions",
"tez":{"teamId":"<team-id>","recipients":["<user-id>"]},
"openclaw":{"enabled":true},
"googleWorkspace":{"enabled":true,"dryRun":true}
}'
This returns:
tezDraft(ready for relay/tez/share)openclawplanning summarygoogleWorkspacedraft/execute result (dry-run by default)
Key Concepts
Tez-Based Model: Everything is a tez. Tezits are discrete, actionable items — not threads.
Personal vs Team Tezits:
- "Message for Me" → personal tez (private note, reminder). Only the creator sees it.
- "Message for Team" → team tez sent to specific recipients or all team members.
Library of Context: ALL original content (voice transcripts, typed text) is preserved forever. Context is sacred — never suggest deleting it.
Status State Machine:
pending → active → resolved → archived
archived is terminal. Transitions are enforced by the API.
Sending Messages (CRITICAL)
Step 0: Resolve Team Scope
Before any write operation, ensure you have a resolved team scope:
- If user is in 1 team → scope is set automatically (no
teamIdneeded) - If user is in 2+ teams → you MUST include
teamIdin write reques
Content truncated.
When not to use it
- →When the user has not authenticated via the bootstrap sequence
- →When the team operator has not approved the skill
Prerequisites
Limitations
- →Access tokens expire after 15 minutes
- →Write operations require explicit teamId for users in multiple teams
How it compares
This system preserves the full context iceberg of every message, unlike standard messaging platforms that treat messages as isolated text.
Compared to similar skills
mypa side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| mypa (this skill) | 0 | 4mo | Review | Advanced |
| team-collaboration-standup-notes | 1 | 3mo | No flags | Intermediate |
| notion-knowledge-capture | 10 | 8mo | No flags | Intermediate |
| apple-reminders | 25 | 2mo | Review | Beginner |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by diegosouzapw
View all by diegosouzapw →You might also like
team-collaboration-standup-notes
sickn33
You are an expert team communication specialist focused on async-first standup practices, AI-assisted note generation from commit history, and effective remote team coordination patterns.
notion-knowledge-capture
makenotion
Transforms conversations and discussions into structured documentation pages in Notion. Captures insights, decisions, and knowledge from chat context, formats appropriately, and saves to wikis or databases with proper organization and linking for easy discovery.
apple-reminders
openclaw
Manage Apple Reminders via the `remindctl` CLI on macOS (list, add, edit, complete, delete). Supports lists, date filters, and JSON/plain output.
memory-keeper-proactive-context-maintenance
b4CU-R4U
Automatically detect and maintain memory freshness by monitoring context staleness, significant code changes, task completions, and phase transitions. Proactively suggests and executes memory sync operations with user confirmation. Use when the user says "sync memory", "update context", or when the Skill detects that context is stale (>2 hours), significant changes have occurred (new commits), tasks completed, or major milestones reached. Replaces passive "context is stale" warnings with active maintenance.
notion-meeting-intelligence
openai
Prepare meeting materials with Notion context and Codex research; use when gathering context, drafting agendas/pre-reads, and tailoring materials to attendees.
agent-memory
yamadashy
Use this skill when the user asks to save, remember, recall, or organize memories. Triggers on: 'remember this', 'save this', 'note this', 'what did we discuss about...', 'check your notes', 'clean up memories'. Also use proactively when discovering valuable findings worth preserving.