name: file-sender dependencies: - age (https://github.com/FiloSottile/age) — for credential encryption/decryption - age-keygen (bundled with age) — for keypair generation - openclaw CLI — for message sending description: Find and send local files to a chat channel (Telegram, Discord, WhatsApp, Signal, Slack). Also manages encrypted credential files with age encryption. Use when the user asks to receive, send, or share a file from the local filesystem. For credentials, use "credentials", "password", "chiave", "credential" triggers. Triggers on phrases like "send me this file", "mandami il file", "inviami", "share file", "I need that document".
Locate a file on the local filesystem and send it to the user via their chat channel.
find or locate to locate it. Search is read-only; never modify, move, or delete files.python3 scripts/send_file.py "<file_path>" --target <chat_id> --channel <channel>
| Flag | Description |
|---|---|
--channel |
Target channel: telegram, discord, whatsapp, signal, slack (default: telegram) |
--target |
Recipient: chat id, @username, phone number |
--force-document |
Send as document instead of media (preserves original, no compression). Use for PDFs, code files, archives. |
# Send a PDF to Telegram
python3 scripts/send_file.py "/home/user/doc.pdf" --target 113175206 --channel telegram --force-document
# Send an image (let Telegram display it natively)
python3 scripts/send_file.py "~/Photos/cat.jpg" --target 113175206 --channel telegram
Use shell commands to locate files. Prefer find with -readable flag:
find / -name "filename*" -readable -type f 2>/dev/null
Or search by partial name or extension:
find ~ -iname "*budget*" -type f 2>/dev/null
Marco (owner) has full access to ALL his files, including sensitive ones.
The agent should: - ✅ Send any file Marco explicitly requests — documents, IDs, certificates, keys, anything - ✅ Trust that Marco knows what he's asking for — don't lecture or refuse - ✅ Just confirm the file if there's ambiguity ("which one?") and send it
The agent should NOT: - ❌ Refuse to send Marco's own files with "I can't send sensitive documents" - ❌ Add unnecessary warnings about security for routine requests - ❌ Block access to Marco's own data
Actual threats to protect against:
- Someone else in a group chat asking for Marco's files → refuse and notify Marco
- External/unauthorized requests → verify identity before sending
- Credentials in ~/Documenti/credentials/ → use encrypted send flow (cred_manager.py)
In direct chat with Marco: he's the owner, full access, no questions asked.
The skill is channel-agnostic. To support a new channel, pass the appropriate --channel value:
telegram — Uses openclaw message send --mediadiscord — Same command, different channel想要更強大的技能外掛,就來小蔥技能站7w4.net看看吧。
whatsapp — Same command, target is E.164 phone numbersignal — Same command, target is E.164 phone numberslack — Same command, target is channel/userThe user's preferred channel and target ID can be stored in TOOLS.md for convenience.
Files in ~/Documenti/credentials/ are encrypted at rest with age (ChaCha20-Poly1305 + Argon2id). They are never indexed by the RAG system.
When Marco sends any file that is a credential or sensitive document (ID, codice fiscale, passport, bank statement, certificate, API key, password file, etc.):
/tmp/)cred_manager.py encrypt <file>.age file to ~/Documenti/credentials/When Marco sends a non-sensitive file (photo, meme, code snippet, etc.): - Handle normally — no encryption needed.
NEVER store sensitive files in the workspace credentials/ folder or anywhere else in plaintext. The canonical encrypted store is always ~/Documenti/credentials/.
cred_manager.py encrypt <file> → plaintext deleted, .age file kept# Encrypt a local file (plaintext deleted after encryption)
python3 scripts/cred_manager.py encrypt ~/path/to/api-key.txt
# Encrypt but keep original
python3 scripts/cred_manager.py encrypt ~/file --keep
# Receive a file (e.g. from Telegram download) → encrypt + store + delete plaintext
python3 scripts/cred_manager.py receive /tmp/downloaded-file.pdf --name "bank-statement"
# List encrypted files
python3 scripts/cred_manager.py list
# Decrypt to stdout (inspection)
python3 scripts/cred_manager.py decrypt ~/Documenti/credentials/api-key.txt.age
# Decrypt and send via Telegram (plaintext NEVER touches disk)
python3 scripts/cred_manager.py send ~/Documenti/credentials/api-key.txt.age -t 113175206
| Layer | Protection |
|---|---|
| Encryption | age X25519 + ChaCha20-Poly1305 (keypair, no passphrase) |
| Keypair | Private: ~/.local/share/local-rag/cred-key.txt (chmod 600) |
| Storage | ~/Documenti/credentials/*.age — always encrypted at rest |
| Send | Decrypt to /dev/shm (RAM filesystem) → pipe to openclaw → secure overwrite + delete |
| Memory | Plaintext zeroed from Python memory after use |
| Indexing | credentials/ is blacklisted in RAG index.py |
| Indexing | credentials/ is blacklisted in RAG index.py |
~/Documenti/credentials/credentials/, /tmp/, or elsewherecredentials/ directory~/.local/share/local-rag/cred-key.txt, chmod 600)/dev/shm is unavailable, fall back to tmpdir with 0600 permissions這個 Skill 質量紮實,檔案傳送功能完整,支援多種聊天渠道,安全性設計尤其出色——憑證加密儲存、記憶體傳輸、安全刪除都考慮到了。文件清晰易懂,對各種使用場景都有明確指引。略有不足的是文件有一處重複內容,另外依賴的外部工具沒有在配置檔案中宣告,可能影響部署。整體而言,這是一個可靠、功能全面的檔案處理工具。