Initial release: sender/recipient agnostic transfer-pack skill
This commit is contained in:
commit
a77e1c3efb
3 changed files with 228 additions and 0 deletions
21
LICENSE
Normal file
21
LICENSE
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2026 Jezza Hehn
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
51
README.md
Normal file
51
README.md
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
# transfer-pack
|
||||
|
||||
A Hermes Agent skill for sending transfer packets (files + instructions) between remote agent instances withDiscord notification.
|
||||
|
||||
## What It Does
|
||||
|
||||
When you need to send files or instructions to another Hermes Agent running on a different machine, this skill:
|
||||
|
||||
1. Packages files + a LETTER.md into a tarball
|
||||
2. SCPs it to the recipient's server
|
||||
3. Creates a one-shot cron job that notifies the recipient via Discord
|
||||
4. Cleans up temp files
|
||||
|
||||
## Installationsymlink:
|
||||
|
||||
```bash
|
||||
ln -s /path/to/transfer-pack ~/.hermes/skills/transfer-pack
|
||||
```
|
||||
|
||||
Or copy the `SKILL.md` to `~/.hermes/skills/transfer-pack/SKILL.md`.
|
||||
|
||||
## Usage
|
||||
|
||||
From another skill or directly:
|
||||
|
||||
```
|
||||
User: "Use transfer-pack to send the new config to CeeLo"
|
||||
```
|
||||
|
||||
The skill will:
|
||||
1. Parse AGENTS.md to find CeeLo's SSH address
|
||||
2. Create a transfer packet with the files
|
||||
3. Deliver to CeeLo's server
|
||||
4. Schedule a Discord notification for CeeLo
|
||||
|
||||
## Requirements
|
||||
|
||||
- SSH key access to recipient servers
|
||||
- `mcp_ssh` tool (SSH-MCP integration)
|
||||
- Hermes cron support on both sender and recipient
|
||||
|
||||
## Integration with agent-coordination
|
||||
|
||||
This skill is designed to work with the [agent-coordination](https://git.jezzahehn.com/KrustyPlanet/agent-coordination) repository:
|
||||
|
||||
- Parses `AGENTS.md` to resolve recipient names to SSH addresses
|
||||
- Uses `PERSONALITY.md` for shared behavioral context (optional)
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
156
SKILL.md
Normal file
156
SKILL.md
Normal file
|
|
@ -0,0 +1,156 @@
|
|||
---
|
||||
name: transfer-pack
|
||||
description: "Send a transfer packet to a remote Hermes agent with file delivery and Discord notification."
|
||||
version: 1.1.0
|
||||
metadata:
|
||||
hermes:
|
||||
tags: [transfer, agent-communication, scp, cron]
|
||||
---
|
||||
|
||||
# Transfer Pack
|
||||
|
||||
Send a transfer packet (files + letter) to a remote Hermes Agent instance. The recipient agent reads the letter and responds via Discord.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- SSH key access to recipient agent's server
|
||||
- `mcp_ssh` tool available (SSH-MCP)
|
||||
- Both agents must have Hermes cron support
|
||||
|
||||
## Configuration
|
||||
|
||||
Before using, identify from context or AGENTS.md:
|
||||
|
||||
| Variable | Source |
|
||||
|----------|--------|
|
||||
| SENDER_NAME | Your agent name (e.g., BarnacleBoy, Lucy, CeeLo, MermaidMan) |
|
||||
| RECIPIENT_NAME | Target agent name from AGENTS.md |
|
||||
| RECIPIENT_SSH_HOST | Tailscale address from AGENTS.md |
|
||||
| RECIPIENT_SSH_USER | SSH username for recipient server |
|
||||
| USER_NAME | Human operator's name (for acknowledgment) |
|
||||
|
||||
## Procedure
|
||||
|
||||
### Step 1: Parse the prompt
|
||||
|
||||
Identify:
|
||||
- The **topic** (succinct kebab-case keyword from the user's prompt)
|
||||
- The **files to include** (from context — code, docs, configs, etc.)
|
||||
- The **instructions for the recipient** (what they should do with the contents)
|
||||
|
||||
### Step 2: Create the transfer packet directory
|
||||
|
||||
```bash
|
||||
mkdir -p /tmp/transfer-packs/YYYY-MM-DD-<topic>
|
||||
```
|
||||
|
||||
Use today's date and the succinct topic. Example: `2026-05-08-agent-coordination`
|
||||
|
||||
### Step 3: Copy relevant files into the directory
|
||||
|
||||
Copy all files referenced in the prompt into the packet directory. Use `cp` or `write_file` as appropriate.
|
||||
|
||||
If no files needed, just create the LETTER.md.
|
||||
|
||||
### Step 4: Write LETTER.md
|
||||
|
||||
Write `LETTER.md` in the packet directory with this structure:
|
||||
|
||||
```markdown
|
||||
# Transfer Packet: <Topic>
|
||||
|
||||
**From:** <SENDER_NAME> (Hermes Agent)
|
||||
**To:** <RECIPIENT_NAME> (Hermes Agent)
|
||||
**Date:** YYYY-MM-DD
|
||||
**Topic:** <topic>
|
||||
|
||||
---
|
||||
|
||||
<Personal letter addressing the recipient. Explain:>
|
||||
- What's in this packet
|
||||
- Why it's being sent
|
||||
- What the recipient should do with it
|
||||
- Any specific instructions or context needed
|
||||
|
||||
**At the end, include this line:**
|
||||
"Please inform <USER_NAME> that this transfer was successful and include a brief summary of what you received."
|
||||
```
|
||||
|
||||
The letter MUST end with the instruction to inform the user of success.
|
||||
|
||||
### Step 5: Create the tarball
|
||||
|
||||
```bash
|
||||
cd /tmp/transfer-packs && tar czf YYYY-MM-DD-<topic>.tar.gz YYYY-MM-DD-<topic>/
|
||||
```
|
||||
|
||||
### Step 6: SCP the tarball to the recipient
|
||||
|
||||
```bash
|
||||
scp -o StrictHostKeyChecking=no /tmp/transfer-packs/YYYY-MM-DD-<topic>.tar.gz <RECIPIENT_SSH_USER>@<RECIPIENT_SSH_HOST>:~/
|
||||
```
|
||||
|
||||
### Step 7: Extract the tarball on the recipient server
|
||||
|
||||
Use SSH-MCP (`mcp_ssh_execute_command`):
|
||||
|
||||
```bash
|
||||
cd ~ && tar xzf YYYY-MM-DD-<topic>.tar.gz
|
||||
```
|
||||
|
||||
### Step 8: Create a one-shot cron job on the recipient server
|
||||
|
||||
Use SSH-MCP to run:
|
||||
|
||||
```bash
|
||||
hermes cron create \
|
||||
--name "transfer-ack-<topic>" \
|
||||
--deliver discord \
|
||||
--repeat 1 \
|
||||
1m \
|
||||
"New transfer packet from <SENDER_NAME>. Please read ~/YYYY-MM-DD-<topic>/LETTER.md and follow the instructions inside."
|
||||
```
|
||||
|
||||
This creates a one-shot cron job that:
|
||||
- Runs in ~1 minute
|
||||
- Triggers the recipient agent with the notification prompt
|
||||
- Delivers the response to Discord
|
||||
- Auto-removes after running once (`--repeat 1`)
|
||||
|
||||
**Note:** The cron ticker runs at 60s intervals, so it may take 1-2 minutes for the job to fire.
|
||||
|
||||
### Step 9: Confirm to user
|
||||
|
||||
Report:
|
||||
- Packet directory name
|
||||
- Files included
|
||||
- That the cron notification was created
|
||||
- Expected delivery timeframe (~1-2 minutes)
|
||||
|
||||
## Cleanup
|
||||
|
||||
After confirming the transfer, clean up local temp files:
|
||||
|
||||
```bash
|
||||
rm -rf /tmp/transfer-packs/YYYY-MM-DD-<topic> /tmp/transfer-packs/YYYY-MM-DD-<topic>.tar.gz
|
||||
```
|
||||
|
||||
The recipient should clean up their copy after reading the letter.
|
||||
|
||||
## Pitfalls
|
||||
|
||||
- **Do NOT use `hermes -z` or `hermes chat -q`** — those output to stdout only, not Discord. Always use the cron mechanism with `--deliver discord`.
|
||||
- **Do NOT try to message the recipient's Discord bot directly** — Discord bots cannot see messages from other bots.
|
||||
- **The `--repeat 1` flag is required** — without it, the job runs indefinitely.
|
||||
- **Schedule format:** Use `1m` (relative offset), not `now`. The cron ticker picks it up on the next tick.
|
||||
- **SCP requires SSH key auth** — ensure `~/.ssh/authorized_keys` is set up on the recipient server for the sending agent's key.
|
||||
- **Files must be in the tarball** — don't assume the recipient has access to your filesystem. Copy everything into the packet directory.
|
||||
- **Hardcoded names** — always derive SENDER_NAME, RECIPIENT_NAME, and USER_NAME from context or AGENTS.md, never hardcode them.
|
||||
|
||||
## Integration with agent-coordination
|
||||
|
||||
For agents using the `agent-coordination` repository:
|
||||
|
||||
1. Parse `~/.hermes/agent-coordination/AGENTS.md` (or equivalent path) to resolve recipient names to SSH hosts and users
|
||||
2. Use `~/.hermes/agent-coordination/PERSONALITY.md` for shared behavioral context
|
||||
3. The sender's name should match their entry in AGENTS.md
|
||||
Loading…
Add table
Add a link
Reference in a new issue