# Send Icom IC-7610 to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- Download the package from Yavira.
- Extract it into a folder your agent can access.
- Paste one of the prompts below and point your agent at the extracted folder.
## Suggested prompts
### New install

```text
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
```
### Upgrade existing

```text
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "icom-7610",
    "name": "Icom IC-7610",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/morozsm/icom-7610",
    "canonicalUrl": "https://clawhub.ai/morozsm/icom-7610",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/icom-7610",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=icom-7610",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "SKILL.md",
      "references/FULL-REFERENCE.md"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/icom-7610"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/icom-7610",
    "downloadUrl": "https://openagent3.xyz/downloads/icom-7610",
    "agentUrl": "https://openagent3.xyz/skills/icom-7610/agent",
    "manifestUrl": "https://openagent3.xyz/skills/icom-7610/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/icom-7610/agent.md"
  }
}
```
## Documentation

### Prerequisites

Hamlib (rigctl): brew install hamlib
curl: usually pre-installed
python3: usually pre-installed
pyserial (only for serial power on): pip3 install pyserial
wfview (optional, for LAN control): wfview.org/download

### Configuration

Station config in .env (not in git). On first install: cp .env.example .env.

### Environment Variables

VariableDefaultDescriptionCALLSIGN(required for CW/beacon)Your callsignSERIAL_PORT/dev/cu.usbserial-11320CI-V USB serial portBAUD_RATE19200Serial baud rate (⚠️ not 115200!)HAMLIB_MODEL3078Hamlib model ID for IC-7610FLRIG_URLhttp://127.0.0.1:12345/RPC2flrig XML-RPC endpointRIGCTLD_ADDR127.0.0.1:4533rigctld TCP address (wfview/hamlib)MAX_POWER_W50Hard power limit in watts

source "$(dirname "$0")/.env" 2>/dev/null || true
PORT="${SERIAL_PORT:-/dev/cu.usbserial-11320}"
BAUD="${BAUD_RATE:-19200}"
MODEL="${HAMLIB_MODEL:-3078}"
FLRIG="${FLRIG_URL:-http://127.0.0.1:12345/RPC2}"
RIGCTLD="${RIGCTLD_ADDR:-127.0.0.1:4533}"
MAX_POWER="${MAX_POWER_W:-50}"

### RFPOWER Scale

rigctl uses 0.0–1.0 where 1.0 = 100 W. So: RFPOWER = watts / 100.
5 W = 0.05, 50 W = 0.50. ⚠️ L RFPOWER 5 = 500 W equivalent, NOT 5 watts!
flrig uses watts directly: rig.set_power 50 = 50 W.

### Connecting

Three connection methods, in priority order. Auto-detect logic:

# 1. Check rigctld (wfview LAN or standalone hamlib rigctld)
if rigctl -m 2 -r "$RIGCTLD" f >/dev/null 2>&1; then
  CONN="rigctld"
# 2. Check flrig
elif curl -s --connect-timeout 2 --max-time 3 -X POST "$FLRIG" \\
     -H "Content-Type: text/xml" \\
     -d '<?xml version="1.0"?><methodCall><methodName>rig.get_vfoA</methodName></methodCall>' \\
     | grep -q '<value>'; then
  CONN="flrig"
# 3. Fall back to direct serial
else
  CONN="serial"
fi

### rigctld — LAN via wfview (recommended) or standalone hamlib daemon

Connects to IC-7610 over network via wfview (UDP) or a running rigctld daemon.
Full control: freq, mode, power, S-meter, SWR, CW keying, power on/off.

rigctl -m 2 -r "$RIGCTLD" <cmd>
# Read:  f   m   l RFPOWER   l SWR
# Write: F 14074000   M USB 3000   L RFPOWER 0.50
# CW:    b "CQ CQ DE YOURCALL K"
# Power: set_powerstat 0 (off)   set_powerstat 1 (on)

Setup: wfview → Settings → Enable LAN → connect to radio IP → Enable RigCtld (port 4533).

⚠️ Note: M (set mode) may hang waiting for ack from wfview rigctld — command still executes.
Use a timeout wrapper or send as fire-and-forget when needed.

Advantages over serial:

No USB cable needed — Ethernet only
Power on works with simple set_powerstat 1 (no raw CI-V / pyserial needed)
Multiple programs can share the radio via wfview (rigctld + virtual serial port)
Longer distance (Ethernet 100m vs USB 5m)

### rigctl serial (direct USB, full control incl. CW and power on/off)

rigctl -m $MODEL -r "$PORT" -s $BAUD <cmd>
# Read:  f (freq)  m (mode+BW)  l RFPOWER  l SWR
# Write: F 14074000   M USB 3000   L RFPOWER 0.50
# CW:    b "CQ CQ DE YOURCALL K"
# Quick: f m l RFPOWER   → freq, mode, BW, power in one call

⚠️ Baud 19200 (not 115200!). Always wrap: timeout 10 rigctl ...
⚠️ Port busy while flrig runs. Close flrig for CW/power on-off.

### flrig XML-RPC

call_flrig() {
  curl -s --connect-timeout 3 --max-time 5 -X POST "$FLRIG" \\
    -H "Content-Type: text/xml" \\
    -d "<?xml version=\\"1.0\\"?><methodCall><methodName>$1</methodName><params>$2</params></methodCall>" | \\
    grep -o '<value>[^<]*</value>' | head -1 | sed 's/<[^>]*>//g'
}
# Read:  call_flrig rig.get_vfoA / rig.get_modeA / rig.get_power / rig.get_Sunits / rig.get_SWR
# Write: call_flrig rig.set_vfoA '<param><value><double>14074000</double></value></param>'
#        call_flrig rig.set_modeA '<param><value><string>USB</string></value></param>'
#        call_flrig rig.set_power '<param><value><double>50</double></value></param>'

### Remote Power On/Off

Requires: rear POWER switch ON + MENU → SET → Network → Power OFF Setting = Standby/Shutdown.

### Via rigctld (wfview LAN) — simplest

rigctl -m 2 -r "$RIGCTLD" set_powerstat 0   # off
rigctl -m 2 -r "$RIGCTLD" set_powerstat 1   # on — works! wfview handles it

### Via serial — power off works, power on needs raw CI-V

Off: rigctl -m $MODEL -r "$PORT" -s $BAUD set_powerstat 0

On: rigctl set_powerstat 1 DOES NOT WORK via serial (rig_open fails in standby). Use raw CI-V:

python3 -c "
import serial, time
ser = serial.Serial('$PORT', $BAUD, timeout=2)
ser.reset_input_buffer()
ser.write(bytes([0xFE,0xFE,0x98,0xE0,0x18,0x01,0xFD]))
time.sleep(1); resp = ser.read(100); ser.close()
print('Power ON: OK' if 0xFB in resp else 'FAIL')
"

Wait 7–10 sec after power on before sending commands. "Command rejected" during boot is normal.

### CW & Beacon

Works via both rigctld (LAN) and direct serial.

# Via rigctld (LAN):
rigctl -m 2 -r "$RIGCTLD" b "CQ CQ CQ DE $CALLSIGN $CALLSIGN K"

# Via serial:
rigctl -m $MODEL -r "$PORT" -s $BAUD b "CQ CQ CQ DE $CALLSIGN $CALLSIGN K"

# Beacon loop (works with either connection)
for i in $(seq 1 $REPEATS); do
  rigctl -m 2 -r "$RIGCTLD" b "VVV DE $CALLSIGN VVV DE $CALLSIGN"
  [ $i -lt $REPEATS ] && sleep $INTERVAL
done

Radio setting for CW: MENU → SET → Connectors → USB Keying (CW) → RTS

### Pre-TX checklist (MANDATORY before every transmission)

Operator confirmation received
Frequency within amateur band (1.8–2.0, 3.5–4.0, 7.0–7.3, 10.1–10.15, 14.0–14.35, 18.068–18.168, 21.0–21.45, 24.89–24.99, 28.0–29.7 MHz)
Mode matches band segment (no phone below CW/data boundary)
Power ≤ $MAX_POWER_W (default 50 W); above → extra confirmation
SWR ≤ 3.0 if available; >3.0 → REFUSE (antenna problem)

### No confirmation needed

Reading freq/mode/S-meter/SWR, switching VFO, changing freq/mode, power on/off.

### Always require confirmation

PTT, CW keying, beacon, power > $MAX_POWER_W. Any RF transmission.

### Auto-refuse (even with confirmation)

Transmit outside amateur bands. Transmit with SWR > 3.0.

### Beacon regulatory (FCC)

Remote operation legal (§97.109d). Unattended beacon only 28.2–28.3, 50.06–50.08+ MHz. Below 28 MHz → operator must be on comms.

### Reference

Full documentation in references/FULL-REFERENCE.md — consult when needed:

Complete flrig XML-RPC method list (30+ methods)
CI-V protocol reference (commands, modes, addressing)
Error recovery table (common errors + fixes)
Shell helper functions (freq_valid, set_power_safe, rig_retry, preflight, quick_status)
Radio menu settings (Network, CI-V, Connectors)
Compatibility notes for other Icom transceivers
US Amateur Band Plan table (detailed, with CW/Data/Phone segments)
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: morozsm
- Version: 2.1.0
## Source health
- Status: healthy
- Source download looks usable.
- Yavira can redirect you to the upstream package for this source.
- Health scope: source
- Reason: direct_download_ok
- Checked at: 2026-04-23T16:43:11.935Z
- Expires at: 2026-04-30T16:43:11.935Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/icom-7610)
- [Send to Agent page](https://openagent3.xyz/skills/icom-7610/agent)
- [JSON manifest](https://openagent3.xyz/skills/icom-7610/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/icom-7610/agent.md)
- [Download page](https://openagent3.xyz/downloads/icom-7610)