.claude/skills/company-messaging/SKILL.md
--- name: company-messaging description: > summary: | Mensajeria interna Company Savia con cifrado E2E basado en ramas git. Soporta mensajes directos, broadcasts y threading. Datos en company repo compartido. Nivel N2 (empresa). maturity: stable Knowledge module for Company Savia messaging: message lifecycle, @handle resolution, encryption protocol, privacy rules. disable-model-invocation: false user-invocable: false allowed-tools: [Read, Bash, Glob, Grep] category: "communication" tag
npx skillsauth add gonzalezpazmonica/pm-workspace .claude/skills/company-messagingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Company Savia enables async messaging between users across a company using orphan Git branches. Messages are plain markdown files with YAML frontmatter, stored in personal inboxes and a pub/sub exchange branch.
main (orphan)
├── company/identity.md, org-chart.md
├── pubkeys/user/{handle}.pem
└── .savia-index/users.idx
user/{handle} (orphan)
├── inbox/unread/ ← Personal messages (unread)
├── inbox/read/ ← Personal messages (archive)
└── outbox/ ← Sent message archive
exchange (orphan)
└── pub/sub/pending/
├── {msg_id}.md ← Pending delivery (temp)
└── .index ← Routing table by recipient
team/{name} (orphan)
└── (shared team resources)
savia-crypto.shexchange:pub/sub/pending/{msg_id}.mdgit add + commit + push to exchange branchexchange:pub/sub/pending/user/{handle}/inbox/unread/user/{handle}/inbox/read/git show exchange:pub/sub/pending/{msg_id}.md | decrypt | move to user/{handle}/inbox/unread/
No need to checkout exchange branch — just git show.
Handles are resolved from main:company/directory.md (admin-only):
| Handle | Name | Role | Status |
|--------|------|------|--------|
| @admin | Admin Name | Admin | active |
Pubkeys stored at main:pubkeys/user/{handle}.pem.
Hybrid RSA-4096 + AES-256-CBC (openssl only, zero deps):
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096encrypted_key:::encrypted_body in frontmatterPublic keys auto-published to main:pubkeys/user/{handle}.pem by admin script.
Before any git push:
validate_privacy() — PATs, tokens, IPs, connection stringsScript: scripts/privacy-check-company.sh
| Type | Location | Persist | Encrypted | |---|---|---|---| | Direct message | exchange:pending → user/{handle}/inbox/unread/ | 7 days | Optional | | Reply | user/{handle}/inbox/ | Until archived | Optional | | Broadcast | exchange:pending (deliver to each user/{handle}) | 7 days | Optional | | Announcement | main:company/announcements/ | Permanent | Never |
Messages form threads via YAML frontmatter:
thread: ID of first messagereply_to: ID of message being replied toReplies auto-inherit thread from parent.
unread/ to read/ on user branch$HOME/.pm-workspace/company-inbox-read.log| Script | Purpose |
|--------|---------|
| scripts/savia-branch.sh | Abstraction layer for branch operations |
| scripts/savia-messaging.sh | Message CRUD (create, fetch, deliver, archive) |
| scripts/savia-crypto.sh | E2E encryption (RSA+AES) |
| scripts/privacy-check-company.sh | Privacy validation pre-push |
Writes use temporary worktrees to avoid checkout pollution:
git worktree add .claude/worktrees/{temp} user/{handle}
# Write/edit files
git add && git commit && git push
git worktree remove .claude/worktrees/{temp}
Unread count from user/{handle}/inbox/unread/ (local, no network):
📬 3 unread messages · 1 pending broadcast
testing
Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
tools
Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).
tools
Sistema proactivo de bienestar individual
development
Search the web to resolve context gaps — documentation, versions, CVEs, best practices. Auto-starts SearxNG Docker if available, falls back to WebSearch.