Agent skill

Dual Side Debug

by UniClipboard in UniClipboard/UniClipboard

Inspect uniclipboard logs from BOTH the macOS host and the mounted Windows peer when debugging cross-platform sync, pairing, transfer, or daemon issues.

AGPL-3.0Auto-check passedDevelopment

Install Dual Side Debug

skills CLI
$ npx skills add UniClipboard/UniClipboard --skill dual-side-debug -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install UniClipboard/UniClipboard dual-side-debug --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/UniClipboard/UniClipboard.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/dual-side-debug .claude/skills/dual-side-debug && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
dual-side-debug
GitHub stars
1.9k
Token cost
~2.6k tokens
SKILL.md length
1,255 words
Files
3
Skills in repo
24
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Inspect uniclipboard logs from BOTH the macOS host and the mounted Windows peer when debugging cross-platform sync, pairing, transfer, or daemon issues.

  • Works in 3 steps: Does the assumed Mac profile's log… → For each side, is the latest log file's… → On the Win side, the status output shows…
  • The user asks to check logs
  • SKILL.md covers Log layout you must remember, Mount setup (do this once per…, Profile resolution (DO NOT… and Commands you'll use, plus 4 more sections
  • Runs Shell scripts from its folder

What it does

Dual Side Debug is an agent skill from UniClipboard/UniClipboard. Inspect uniclipboard logs from BOTH the macOS host and the mounted Windows peer when debugging cross-platform sync, pairing, transfer, or daemon issues. Use whenever the user asks to "check logs", "see what's happening on both sides", or describes a symptom that involves the Windows peer (e.g. "Windows didn't receive...", "Mac sent but...", pairing/transfer/sync failures during dual-side dev).

Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `dual-logs.sh` and `transfer-speed.sh`).

It sits in Development, covering Debugging. It works with macOS. The repository describes itself as: Real-time clipboard sync across all your devices — local-first, peer-to-peer, and end-to-end encrypted. No account. No cloud dependency. No central server. The licence is AGPL-3.0.

When your agent uses it

  • The user asks to check logs
  • See whats happening on both sides
  • Describes a symptom that involves the Windows peer (e.g

Example prompts

  • “check logs”
  • “see what”
  • “, or describes a symptom that involves the Windows peer (e.g.”
  • “/dual-side-debug”

Requirements

  • A Bash shell

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Does the assumed Mac profile's log directory exist?
  2. For each side, is the latest log file's mtime close to "now" (live (<2m) or recent (<10m) is good; anything older means the process…
  3. On the Win side, the status output shows which profile was auto-detected and prints the alternatives sorted by mtime — sanity-check that…

What it can do on your machine

Read from SKILL.md and the folder at commit 101ffb3. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships script files (Shell), which the agent can run.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Dual Side Debug loads about 2.6k tokens when it runs. Until then it costs about 103 tokens; SKILL.md has 1,255 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~103
When it runs · the whole SKILL.md, loaded when a task matches
~2.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from UniClipboard/UniClipboard at commit 101ffb3, republished under its AGPL-3.0 licence (© UniClipboard). 1,255 words, ~2,650 tokens.

Download SKILL.mdSave it as .claude/skills/dual-side-debug/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
dual-side-debug
description
Inspect uniclipboard logs from BOTH the macOS host and the mounted Windows peer when debugging cross-platform sync, pairing, transfer, or daemon issues. Use whenever the user asks to "check logs", "see what's happening on both sides", or describes a symptom that involves the Windows peer (e.g. "Windows didn't receive...", "Mac sent but...", pairing/transfer/sync failures during dual-side dev).

dual-side-debug

Inspect logs from the macOS host and the Windows peer in a single, time-aligned view.

This project is a Go/Wails desktop app where two peers (macOS + Windows) sync clipboard / files over an iroh-based network. The Windows machine's AppData/Local is exposed to the Mac via SMB and mounted at /tmp/win-local/, so both sides' JSONL logs are reachable from this host.

The helper script lives at .agents/skills/dual-side-debug/dual-logs.sh. It is the only thing you should need to invoke for log work — do not hand-roll ls/tail/jq pipelines unless the script can't express what you need.

Log layout you must remember

  • macOS logs: ~/Library/Logs/app.uniclipboard.desktop[-<UC_PROFILE>]/uniclipboard-{gui,daemon,cli}.json.YYYY-MM-DD — Apple convention (~/Library/Logs/<app>); the profile dir is the log dir, there is no logs/ subdir on macOS.
  • Windows logs (mounted): /tmp/win-local/app.uniclipboard.desktop[-<WIN_PROFILE>]/logs/uniclipboard-{gui,daemon,cli}.json.YYYY-MM-DD — Windows keeps the logs/ subdir under the data-local app root.
  • Per-role files (since the platform-log-dir split): each process writes its own family — gui (Go/Wails host), daemon (uniclipd), cli (uniclip) — daily rotation, 7-day retention. dual-logs.sh picks the newest by mtime per side, i.e. the busiest process (usually the daemon for sync/pairing/transfer). The legacy single-file name uniclipboard.json.YYYY-MM-DD is still matched for old logs. For per-role single-host digging, use the local-log-debug skill instead.
  • Format: JSON Lines. Each line has at least timestamp (UTC, ISO-8601 with Z, always the first field), level, target, message, span, device_id, plus structured fields.
  • The date in the filename is UTC, not local time. A file named ...2026-04-25 can be the live file while it is still 2026-04-24 in PDT.

Mount setup (do this once per Mac reboot)

The Windows logs only exist on this Mac because an SMB share is mounted from DESKTOP-HIC7MLI. The mount point is not auto-created — you must mkdir it first (otherwise mount_smbfs fails with No such file or directory), and the mount itself does not survive a reboot or a disconnect.

Before debugging, verify a mount exists:

bash
mount | grep -E 'win-local|win-uniclipboard' || echo "no SMB mount yet"

If nothing is mounted, stop and ask the user before running mount_smbfs — it prompts for the Windows password interactively and the agent shouldn't silently do credential prompts. Hand the user the exact commands and let them run via ! <cmd>.

Default: broad mount of AppData/Local at /tmp/win-local

This is what dual-logs.sh expects out of the box. It exposes every Windows uniclipboard profile dir at once, so you can switch profiles without re-mounting:

bash
mkdir -p /tmp/win-local
mount_smbfs '//DESKTOP-HIC7MLI/Users/mark/AppData/Local' /tmp/win-local

After mount you'll see dirs like /tmp/win-local/app.uniclipboard.desktop, /tmp/win-local/app.uniclipboard.desktop-dev, plus old version-suffixed ones. The script auto-detects the freshest one (see "Profile resolution" below).

Legacy: narrow mount at /tmp/win-uniclipboard

Older sessions sometimes still use this — mounting only one profile dir directly. The script supports it via the WIN_LOGS env override (full-path bypass of $WIN_BASE):

bash
mkdir -p /tmp/win-uniclipboard
mount_smbfs '//DESKTOP-HIC7MLI/Users/mark/AppData/Local/app.uniclipboard.desktop-<WIN_PROFILE>' /tmp/win-uniclipboard

# Then for every invocation:
WIN_LOGS=/tmp/win-uniclipboard/logs .agents/skills/dual-side-debug/dual-logs.sh status

Prefer the broad mount unless there's a specific reason — it pins you to one profile and requires re-mounting to switch.

Tearing down

If the mount is wedged (Finder hangs, ls blocks for 30s), unmount cleanly before re-mounting:

bash
umount /tmp/win-local   # or /tmp/win-uniclipboard

If umount fails because the path is busy, fall back to diskutil unmount force /tmp/win-local.

Profile resolution (DO NOT skip this step)

Mac and Windows each have their own active profile, and they are not always the same name. The script resolves each side independently.

Mac profile

Default is dev (package.json's wails:dev script sets UC_PROFILE=dev). Treat dev as the assumed Mac profile unless the user said otherwise. The user sometimes runs other profiles (a, b for wails:dev:profile a/b, or ad-hoc names like abc). Override with --profile <name>.

Windows profile

The script auto-detects the Windows profile by scanning $WIN_BASE for the profile dir whose latest log file has the newest mtime. This handles the common case where the Win side is on a different profile than the Mac side, without you having to know which one. Override with --win-profile <name> (or --win-profile default for the no-suffix app.uniclipboard.desktop dir).

Always run status first

Before answering any question that depends on log content, run:

bash
.agents/skills/dual-side-debug/dual-logs.sh status

Then judge:

  1. Does the assumed Mac profile's log directory exist?
  2. For each side, is the latest log file's mtime close to "now" (live (<2m) or recent (<10m) is good; anything older means the process probably isn't running on that profile)?
  3. On the Win side, the status output shows which profile was auto-detected and prints the alternatives sorted by mtime — sanity-check that it picked the one the user actually meant.

If the assumed profile dir is missing, OR the freshness is stale / old / cold while the user is actively reproducing, stop and ask the user to confirm. Suggest a likely candidate from the available-profiles list. Example:

dev profile dir doesn't exist on Mac. The most recently active Mac profile is abc (last write 30s ago). Should I use abc, or are you running with a different UC_PROFILE?

Do not silently fall back. Wrong profile = looking at frozen logs from a previous session.

Show full SKILL.md (476 more words)Show less

Commands you'll use

Always invoke via the script. From the project root:

bash
.agents/skills/dual-side-debug/dual-logs.sh <command> [args]
CommandWhen to use
statusFirst call of any debug session. Confirms profile + freshness on both sides. Shows which Win profile was auto-detected.
list-profilesWhen you suspect the user is on a profile other than dev. Defaults to both sides; use --side win for just the Windows list.
pathsJust need the resolved file paths (e.g. to feed another tool).
tailQuick "what just happened" — defaults to last 50 lines, both sides.
grep <pat>Plain string match. Cheap; good first probe (e.g. an error message, a device id).
query --filterStructured jq filter against the JSONL. Best for level/target/span filters.
mergeTime-interleave both sides into a single chronological stream. Use this whenever the question is "what happened between Mac and Windows around time X".
Useful flags
  • --profile <name> — Mac profile override (default: dev).
  • --win-profile <name> — Win profile override (default: auto-detected by mtime). Use default for the no-suffix dir.
  • --side mac|win|both — restrict to one side.
  • --lines N — output line cap.
  • --since <ISO8601> (merge only) — drop lines older than this UTC timestamp.
  1. Ground yourself. Run status. Confirm both sides are live; resolve any profile mismatch with the user before continuing.
  2. Narrow the time window. Ask the user when they reproduced the issue (or read it from their last message), convert to UTC, and pass it as --since.
  3. Start broad, then narrow.
    • Broad: merge --since <UTC> --lines 400 to see the cross-peer story.
    • Narrow: query --filter '. | select(.level=="ERROR" or .level=="WARN")' or filter by target (e.g. iroh::magicsock, pairing, transfer).
  4. Quote sparingly. Logs are noisy. In your reply to the user, quote the 3–10 lines that actually carry signal, with the side prefix and timestamp. Don't dump raw JSONL walls.
  5. Cross-reference, don't assume. If the symptom is "Mac says sent, Windows didn't receive", verify by grepping the same id (transfer id, blob hash, request id) on both sides. The merged view is much stronger than two parallel monologues.

jq filter cookbook

These plug straight into query --filter '<jq>':

jq
# Errors and warnings only
. | select(.level == "ERROR" or .level == "WARN")

# Restrict to one subsystem (substring match on target)
. | select(.target | test("pairing|setup|transfer"))

# A specific span chain
. | select(.span | test("handle_pong"))

# Around a particular device id
. | select(.device_id == "47a545ac-6d31-413c-b9fe-315ee4be0fb0")

# Compact projection for human reading
. | {ts: .timestamp, lvl: .level, tgt: .target, msg: .message, span}

For the merged view (script already injects .side):

jq
{ts: .timestamp, side: .side, lvl: .level, tgt: .target, msg: .message}

Things to avoid

  • Don't cat whole log files — they're hundreds of MB.
  • Don't infer "Windows is broken" without first checking the Windows log freshness; the SMB mount can lag, and a stale mtime may just mean the Windows app is paused.
  • Don't translate UTC ↔ local time in your head and silently. If you do convert, say so (e.g. "logs around 17:30 PDT = 00:30 UTC the next day").
  • Don't add or modify Mac log paths in this skill if the layout in crates/AGENTS.md changes — fix dual-logs.sh first, then this doc.

When this skill does not apply

  • User is debugging build / cargo / typecheck failures — those don't go through these JSONL logs.
  • User asks about the daemon HTTP API or sqlite state — those are separate; logs are observability, not state.

© UniClipboard, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files in .agents/skills/dual-side-debug of UniClipboard/UniClipboard.

  • SKILL.md
  • dual-logs.sh
  • transfer-speed.sh

Open the folder on GitHubat commit 101ffb3

Compare with similar skills

Dual Side Debug next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Dual Side Debug compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Dual Side Debug this skillUniClipboard/UniClipboard1.9k—~2.6kAutomated safety check: PassAGPL-3.0
OpenLogi macOS Permissions TriageAprilNEA/OpenLogi23k—~2.5kAutomated safety check: NotesApache-2.0
Cmux Debugging Guidemanaflow-ai/cmux28k1 repos~1.1kAutomated safety check: PassCustom licence
Gearcoleco Debuggingdrhelius/Gearcoleco141—~3.5kAutomated safety check: PassGPL-3.0
OpenLogi Device DiagnosisAprilNEA/OpenLogi23k—~1.6kAutomated safety check: PassApache-2.0
App Screenshot Debugtermio-sh/termio540—~1.2kAutomated safety check: PassMIT

Similar skills

  • Decides whether an OpenLogi device problem on macOS is a privacy-permission (TCC) problem, using agent log lines, and says which identity needs which grant.

    23k GitHub stars~2.5k tokensUpdated 4 days ago
    DevelopmentAuto-check: notes
  • Cmux Debugging Guide

    manaflow-ai/cmux

    Covers debug logging, the Debug menu, profiling rules and runtime pitfalls for working on the cmux macOS terminal app.

    28k GitHub starsUsed in 1 repo~1.1k tokens
    DevelopmentAuto-check passed
  • Gearcoleco Debugging

    drhelius/Gearcoleco

    Debug and trace ColecoVision and Super Game Module games using the Gearcoleco emulator MCP server.

    141 GitHub stars~3.5k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • OpenLogi Device Diagnosis

    AprilNEA/OpenLogi

    Finds the first failing layer when an OpenLogi Logitech device is missing or misbehaving across enumeration, open, probe, IPC and UI.

    23k GitHub stars~1.6k tokensUpdated 4 days ago
    DevelopmentAuto-check passed
  • App Screenshot Debug

    termio-sh/termio

    Drive the running termio app via AppleScript / System Events to reach a UI state (focus the window, click a sidebar project, a terminal pane, a control), capture a pixel-accurate screenshot of just…

    540 GitHub stars~1.2k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Dotnet Debugging

    novotnyllc/dotnet-artisan

    Debugs Windows and Linux/macOS applications (native, .NET/CLR, mixed-mode) with WinDbg MCP (crash dumps, !analyze, !syncblk, !dlk, !runaway, !dumpheap, !gcroot, BSOD), dotnet-dump, lldb with SOS…

    233 GitHub stars~2.1k tokensUpdated today
    DevelopmentAuto-check passed

More from UniClipboard/UniClipboard

All 24 skills in this repo
  • Beui

    UniClipboard/UniClipboard

    Pick and install beUI (@beui) animated React components from the shadcn registry.

    1.9k GitHub stars~1.8k tokensUpdated today
    Auto-check passed
  • Create PR

    UniClipboard/UniClipboard

    Push the current branch and open a GitHub pull request against main.

    1.9k GitHub stars~4.6k tokensUpdated today
    Auto-check passed
  • Design Audit

    UniClipboard/UniClipboard

    定期审计代码库的工程设计问题(高心智复杂度、单一真相源被破坏、catch-all 胖接口、死代码、散落魔法字面量、泄漏抽象、资源生命周期靠环形缓冲)与可优化点,范围限定为自上次审计以来的 git churn,每条发现都落到 file:line 并对照本项目自己的 VISION.md / 各级 AGENTS.md / memory…

    1.9k GitHub stars~554 tokensUpdated today
    Auto-check passed
  • E2E Test Thinker

    UniClipboard/UniClipboard

    Analyze the current branch's diff against main and determine which changes are testable via CLI-based end-to-end tests.

    1.9k GitHub stars~1.7k tokensUpdated today
    Auto-check passed
  • iOS Log Diagnose

    UniClipboard/UniClipboard

    Drive the UniClipboard iOS app in a simulator and read its OSLog yourself to diagnose a mobile-sync bug, instead of asking the user to paste logs.

    1.9k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Learn

    UniClipboard/UniClipboard

    Record a lesson learned into crates/AGENTS.md (CONVENTIONS or ANTI-PATTERNS section).

    1.9k GitHub stars~1.1k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Dual Side Debug

What does Dual Side Debug do?

Inspect uniclipboard logs from BOTH the macOS host and the mounted Windows peer when debugging cross-platform sync, pairing, transfer, or daemon issues. Dual Side Debug is an agent skill from UniClipboard/UniClipboard. Inspect uniclipboard logs from BOTH the macOS host and the mounted Windows peer when debugging cross-platform sync, pairing, transfer, or daemon issues.

When should I use Dual Side Debug?

Dual Side Debug fits situations like: the user asks to check logs; see whats happening on both sides; describes a symptom that involves the Windows peer (e.g.

How do I install Dual Side Debug in Claude Code?

Run `npx skills add UniClipboard/UniClipboard --skill dual-side-debug -a claude-code`. Or copy the skill folder (.agents/skills/dual-side-debug in UniClipboard/UniClipboard) into .claude/skills/dual-side-debug in your project. Claude Code loads it when a task matches its description.

How do I install Dual Side Debug in Codex?

Run `npx skills add UniClipboard/UniClipboard --skill dual-side-debug -a codex`. Or copy the skill folder (.agents/skills/dual-side-debug in UniClipboard/UniClipboard) into .agents/skills/dual-side-debug in your project. Codex loads it when a task matches its description.

Can I use Dual Side Debug in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add UniClipboard/UniClipboard --skill dual-side-debug -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/dual-side-debug, .gemini/skills/dual-side-debug, .github/skills/dual-side-debug and .opencode/skills/dual-side-debug in your project.

What does Dual Side Debug need to run?

Going by SKILL.md and its folder, Dual Side Debug needs a shell for the scripts in its folder. Our summary lists: A Bash shell.

Does Dual Side Debug access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Dual Side Debug safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Dual Side Debug use?

Dual Side Debug is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Dual Side Debug use?

About 2.6k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Dual Side Debug?

Skills that share tags, products or a category with Dual Side Debug: OpenLogi macOS Permissions Triage (AprilNEA/OpenLogi, 23k stars), Cmux Debugging Guide (manaflow-ai/cmux, 28k stars), Gearcoleco Debugging (drhelius/Gearcoleco, 141 stars) and OpenLogi Device Diagnosis (AprilNEA/OpenLogi, 23k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Dual Side Debug?

UniClipboard (a GitHub organization) maintains it in UniClipboard/UniClipboard, which has 1,856 GitHub stars. The repository holds 24 skills in this directory. The repository was last updated on October 8, 2026.

Source: UniClipboard/UniClipboard on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.