Matrix communication
Use when communicating via Matrix chat, notifying teams, or managing E2EE. Triggers on #room:server references, Matrix URLs, and chat requests.From its SKILL.md
npx -y skills add netresearch/matrix-skill --skill matrix-communicationAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as (MIT AND CC-BY-SA-4.0). See LICENSE-MIT and LICENSE-CC-BY-SA-4.0. That is the authorβs claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
5.9 KB, ~1.6k tokens by cl100k_base, as published. Nobody here has run it
Matrix Communication
Matrix rooms: send, read, download media. Always use *-e2ee.py scripts.
Bash ! rule: Prepend set +H && when arguments contain !
Quick Reference
ROOM: name (test), ID (!abc:server), or alias (#room:server).
# Send (E2EE)
set +H && uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-send-e2ee.py ROOM "message"
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-send-e2ee.py ROOM "message" --no-prefix
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-send-e2ee.py ROOM "is deploying" --emote
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-send-e2ee.py ROOM "π¦ Release: β¦" --notice # unattended automation; no auto-reply loops
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-send-e2ee.py ROOM "reply" --thread '$rootEventId'
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-send-e2ee.py ROOM "reply" --reply '$eventId'
# Read (E2EE) β JSON includes media URL/info for m.image/m.file/m.video/m.audio
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-read-e2ee.py ROOM --limit 10
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-read-e2ee.py ROOM --limit 20 --json
# Download media (E2EE) β decrypts and saves by event ID
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-download-e2ee.py ROOM '$eventId' --output /tmp
# Edit / Delete / React
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-edit-e2ee.py ROOM '$eventId' "new text"
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-redact.py ROOM '$eventId' "reason"
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-react.py ROOM '$eventId' "β
"
# Rooms
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-rooms.py
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-rooms.py --search ops
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-resolve.py "#room:server"
# Room management (create, invite, promote)
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-create-room.py "Room Name" --alias localpart --invite '@user:server'
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-invite.py ROOM '@user:server'
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-power-level.py ROOM --show
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-power-level.py ROOM --set '@user:server' 50
# E2EE management
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-e2ee-setup.py --status
MATRIX_PASSWORD="pass" uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-e2ee-setup.py
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-e2ee-verify.py --timeout 180
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-fetch-keys.py ROOM --sync-time 60
uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-key-backup.py --recovery-key "EsTj ..." --import-keys
# Health check (uses python3, not uv run)
python3 ${CLAUDE_SKILL_DIR}/scripts/matrix-doctor.py --install
Script Selection
| Operation | E2EE (preferred) | Non-E2EE Fallback |
|---|---|---|
| Send | matrix-send-e2ee.py | matrix-send.py |
| Read | matrix-read-e2ee.py | matrix-read.py |
| Edit | matrix-edit-e2ee.py | matrix-edit.py |
| Download | matrix-download-e2ee.py | β |
| React | matrix-react.py | (same) |
| Delete | matrix-redact.py | (same) |
Other: matrix-rooms.py, matrix-resolve.py, matrix-create-room.py, matrix-invite.py, matrix-power-level.py, matrix-e2ee-setup.py, matrix-e2ee-verify.py, matrix-fetch-keys.py, matrix-key-backup.py, matrix-doctor.py.
matrix-power-level.py --set: --show first on rooms you didn't create (see references/api-reference.md).
Config
~/.config/matrix/config.json β required: homeserver, user_id. Optional: access_token
Error Handling
| Error | Solution |
|---|---|
M_FORBIDDEN | Join room first in Element |
M_UNKNOWN_TOKEN | Get new token from Element |
M_LIMIT_EXCEEDED | Wait and retry |
Could not find room | matrix-rooms.py to list rooms |
[Unable to decrypt] | First: uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-fetch-keys.py ROOM --sync-time 60 (requests keys from other devices, no recovery key needed); fallback: uv run ${CLAUDE_SKILL_DIR}/scripts/matrix-key-backup.py --recovery-key "..." --import-keys |
libolm not found | Linux: apt install libolm-dev; macOS 26+ unsupported (see references/setup-guide.md) |
matrix-nio not found | python3 ${CLAUDE_SKILL_DIR}/scripts/matrix-doctor.py --install |
Invalid password | Use env var: MATRIX_PASSWORD="pass" uv run ... |
signature failed | Dedicated device via matrix-e2ee-setup.py |
Common Mistakes
- Using non-E2EE scripts for encrypted rooms β always use
*-e2ee.py - Forgetting
set +Hβ!in messages gets mangled by bash - Skipping
--import-keysβ key backup doesn't save without it - Using Element X for verification β use Element Desktop or Android
- Hardcoding passwords β use
MATRIX_PASSWORDenv var
No editorializing
In messages and announcements, state what happened, not how good or careful the work is β no narrating expected results ("all tests green", "shipped") or self-praise ("clean", "the honest breaking change"). Judged by tone, not a wordlist. See references/no-editorializing.md.
References
references/setup-guide.mdβ setupreferences/e2ee-guide.mdβ E2EE, key recovery, verificationreferences/messaging-guide.mdβ formatting, reactionsreferences/api-reference.mdβ Matrix APIreferences/hookshot-integration.mdβ provisioning webhooks via the matrix-hookshot bridge botreferences/no-editorializing.mdβ writing without self-praise / narrating the expected- netresearch/matrix-skill
What ships with it: 37 files
240.4 KB alongside SKILL.md, 28 of them executable
evals/
- evals.json12.5 KB
references/
- api-reference.md4.7 KB
- e2ee-guide.md10.5 KB
- hookshot-integration.md2.9 KB
- messaging-guide.md7.2 KB
- no-editorializing.md229 B
- setup-guide.md7.0 KB
scripts/
- _lib/config.pyruns1.7 KB
- _lib/deps.pyruns1.8 KB
- _lib/e2ee.pyruns2.0 KB
- _lib/formatting.pyruns10.2 KB
- _lib/http.pyruns3.3 KB
- _lib/__init__.pyruns1.8 KB
- _lib/rooms.pyruns8.1 KB
- _lib/test_formatting.pyruns7.9 KB
- _lib/utils.pyruns1.6 KB
- matrix-create-room.pyruns4.6 KB
- matrix-doctor.pyruns9.3 KB
- matrix-download-e2ee.pyruns7.1 KB
- matrix-e2ee-setup.pyruns7.2 KB
- matrix-e2ee-verify.pyruns25.7 KB
- matrix-edit-e2ee.pyruns7.1 KB
- matrix-edit.pyruns5.2 KB
- matrix-fetch-keys.pyruns8.4 KB
- matrix-invite.pyruns2.9 KB
- matrix-key-backup.pyruns15.0 KB
- matrix-power-level.pyruns6.8 KB
- matrix-react.pyruns4.4 KB
- matrix-read-e2ee.pyruns12.5 KB
- matrix-read.pyruns4.6 KB
- matrix-redact.pyruns4.4 KB
- matrix-resolve.pyruns1.6 KB
- matrix-rooms.pyruns3.5 KB
- matrix-send-e2ee.pyruns15.6 KB
- matrix-send.pyruns9.2 KB