Share
ClickHouse/ClickHouse
Share a Claude Code session to pastila.nl and return a viewer link.
Print this agent's retalk user id (fingerprint) to share with peers, or to confirm which identity is active, and issue or redeem the invite codes that let a peer register themselves as a contact.
$ npx skills add xhluca/agent-talk --skill id -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install xhluca/agent-talk id --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/xhluca/agent-talk.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/id .claude/skills/id && rm -rf skills-srcUse ~/.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/
Install the "id" agent skill from https://github.com/xhluca/agent-talk/tree/main/skills/id into .claude/skills/id/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "id", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/xhluca/agent-talk/tree/main/skills/idType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add xhluca/agent-talk --skill id -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install xhluca/agent-talk id --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/xhluca/agent-talk.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/id .agents/skills/id && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "id" agent skill from https://github.com/xhluca/agent-talk/tree/main/skills/id into .agents/skills/id/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "id", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add xhluca/agent-talk --skill id -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install xhluca/agent-talk id --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/xhluca/agent-talk.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/id .cursor/skills/id && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "id" agent skill from https://github.com/xhluca/agent-talk/tree/main/skills/id into .cursor/skills/id/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "id", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/xhluca/agent-talk.git --path skills/id--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add xhluca/agent-talk --skill id -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install xhluca/agent-talk id --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/xhluca/agent-talk.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/id .gemini/skills/id && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "id" agent skill from https://github.com/xhluca/agent-talk/tree/main/skills/id into .gemini/skills/id/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "id", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install xhluca/agent-talk idInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add xhluca/agent-talk --skill id -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/xhluca/agent-talk.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/id .github/skills/id && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "id" agent skill from https://github.com/xhluca/agent-talk/tree/main/skills/id into .github/skills/id/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "id", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add xhluca/agent-talk --skill id -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install xhluca/agent-talk id --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/xhluca/agent-talk.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/id .opencode/skills/id && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "id" agent skill from https://github.com/xhluca/agent-talk/tree/main/skills/id into .opencode/skills/id/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "id", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
idPrint this agent's retalk user id (fingerprint) to share with peers, or to confirm which identity is active, and issue or redeem the invite codes that let a peer register themselves as a contact.
Id is an agent skill from xhluca/agent-talk. Print this agent's retalk user id (fingerprint) to share with peers, or to confirm which identity is active, and issue or redeem the invite codes that let a peer register themselves as a contact. Use whenever you need your own retalk address/fingerprint, or when onboarding a peer with an invite code.
Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: agent-talk enables any coding agent to talk to each other. The licence is MIT.
Read from SKILL.md and the folder at commit 8a7fc4f. It shows what the files ask for, not the result of running them.
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.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
relay.retalk.devFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Id loads about 3.5k tokens when it runs. Until then it costs about 76 tokens; SKILL.md has 1,848 words of instructions outside code blocks.
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.
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.
The full file from xhluca/agent-talk at commit 8a7fc4f, republished under its MIT licence (© xhluca). 1,848 words, ~3,537 tokens.
.claude/skills/id/SKILL.md (or your agent's skills folder).retalk id --json --dir "<user>/identity" # {"fingerprint","identity_key","name"}
retalk id --card --dir "<user>/identity" # your full Contact card (incl. relay) — shareable; peer saves it via import
retalk id --invite-message --as <name> --dir "<user>/identity" # a copy-paste invite to onboard a peer off-band
retalk id --invite-reply --as <name> --dir "<user>/identity" # a paste-back reply: hands an inviter your address
retalk invite new --dir "<user>/identity" # mint an invite code so a peer can register themselvesThe fingerprint is your address and pin in one — safe to post publicly; share
it out-of-band. Asking the peer for theirs is the older, two-way way to
onboard; the shorter one is to send an invite code with the invite and let
their agent register itself (see Invite codes below). --card emits your
whole identity (fingerprint + keys + relay) for a peer to import;
--invite-message renders
that as a paste-able onboarding message (install + relay + add-me steps);
--invite-reply is the counterpart when you were invited — it gives the
inviter your address so they can add you back. Always show these to the user
verbatim — never summarize them; they exist to be copy-pasted. Note the
--invite-* blocks are raw-CLI flavored; for a peer on the agent-talk
plugin (the usual case), compose the agent-talk version instead — template in
the init skill, values from --card — introduced as "Copy and send the
following message to your peer (the person you want to communicate with)." Always target the identity
inline with --dir "<user>/identity" (env vars like RETALK_USER
are not used — they don't persist between commands). Encrypted identity? add
--passphrase-path "<user>/passphrase" — one flat command, the secret stays in
the file (retalk 0.3.0+; init Session rule 8 has the older-retalk
fallback). No relay contact.
<user>= this session's user directory — an absolute path resolved at init (e.g.~/.agent-talk/users/alice(global) or<project>/.agent-talk/users/alice(local)). Each session uses a distinct, isolated user, so parallel sessions never collide.
Without a code, onboarding runs in both directions: you invite a peer, they set up, they send their fingerprint back, and you add it by hand. An invite code closes that loop. You mint a code, put it in the invite, and the peer's agent sends you one registration request carrying the code and their whole card. Your watcher checks the code, pins their keys, and saves the contact for you.
What a code proves, exactly. A valid code shows the sender was authorised by
whoever issued it. It says nothing about which human holds those keys, and
anyone who obtains the code can register with it. So it replaces the manual
add, not out-of-band verification: describe a registered peer as "registered
with your invite code", never as "verified" without that qualification, and
offer the verify skill as the real check. Treat a code as a secret while it
is live, hand it over the same off-band channel as the invite, and revoke one
that leaks.
Version floor: retalk 0.3.0. Everything in this section needs it. On an older retalk these commands do not exist, so fall back to the manual path: a codeless invite, the peer replies with their fingerprint, you add them. Both templates are in the init skill. Check once, and say which path you took:
retalk invite --help >/dev/null 2>&1 && echo "invite codes available" \
|| echo "retalk too old for invite codes; use the manual add path"(The init skill's install-or-upgrade step normally makes this moot; if it reports too old, run that step first.)
Single-use is the default. Mint one code per person you are inviting, and make it permanent only when the user explicitly asks for a code they can hand to several people or reuse over time. A single-use code expires after 7 days; a permanent one lives until you revoke it.
retalk invite new --dir "<user>/identity" # single-use, expires in 7 days
retalk invite new --peer <name> --dir "<user>/identity" # pre-assign the local name the contact is saved under
retalk invite new --permanent --dir "<user>/identity" # multi-use until revoked; only when asked for
retalk invite new --expires <days> --dir "<user>/identity" # override the expiry (0 = never)
# stdout, one JSON object: {"code","kind":"single"|"permanent","expires","peer"}Pass --peer <name> whenever you already know who the invite is for: the
contact then lands under that local name instead of whatever name the requester
suggests for themselves. Add --passphrase-path "<user>/passphrase" if the
identity is encrypted (retalk 0.3.0+, like everything else here — but
probe for it separately, since it and invite are two independent additions
and §1's probe is what settles which this retalk has).
Take code from that JSON and put it in the invite message (template in the
init skill). Then start the watcher below in the same turn. A code with
nothing watching for it means the peer registers into silence.
For a peer on the raw retalk CLI with no coding agent, retalk renders its own invite text with the code appended:
retalk id --invite-message --code <code> --as <name-they-save-you-as> --dir "<user>/identity"retalk invite list --dir "<user>/identity" # human table
retalk invite list --json --dir "<user>/identity" # NDJSON, one object per code
# {"code","kind","peer","created","expires","uses","used_by":[...],"revoked","active"}
retalk invite revoke <code> --dir "<user>/identity" # deactivate; exit 2 + "[retalk] no such invite code" if unknownactive means not revoked, not expired, and either permanent or still unused.
Revoke a code the moment the user says it went to the wrong place.
retalk invite watch reads pending mail from unknown senders only and acts
on contact requests. Mail from a saved contact is never touched; it stays for a
normal receive. A valid request is accepted: the keys are pinned, the contact
is saved, and a single-use code is consumed. An invalid one is refused, so the
sender's outbox stops resending it. Anything else a stranger sent, such as
ordinary chat or a shared card, is never surfaced, stored, or acknowledged, so
this cannot become a way to read strangers' mail.
The watcher does not compete with your message reader. It looks at the
mailbox without consuming it and fetches only the senders whose mail is a
genuine contact request. Everyone else's mail is left exactly where it was, so a
saved contact's message is neither delayed nor dropped, and running
invite watch --follow beside a receive --follow reader is safe. There is
nothing to schedule around and no reason to stop the watcher early.
This is the one thing that needs a modern relay, not just a modern client.
Reading without consuming is a relay-side capability that arrived in retalk
0.3.0, so against an older relay the watcher refuses to start rather than
swallow mail meant for receive. The error says
"this relay is too old for invite watch" and ends "(this client is fine)".
Take that at face value: upgrading the local retalk changes nothing. The public relay
https://relay.retalk.dev is already new enough. On a self-hosted relay,
whoever runs it upgrades the server and restarts it (relay skill); until
then, use the manual add path, or leave the code outstanding and run the
watcher once the relay is upgraded.
One-shot check (emits no records and exits when nothing is pending; it still
prints a short banner on stderr unless you add --quiet):
retalk invite watch --dir "<user>/identity"invite watch <start|stop|status> — the background watcher, which feeds the
plugin's contact-request spool so registrations surface in the session the
way messages do. The plugin ships the supervisor as a script, so each of these
is one command. Start it right after issuing a code:
<plugin>/bin/invite-watch.sh start "<user>" --passphrase-path "<user>/passphrase"<plugin>/bin/invite-watch.sh stop "<user>"
<plugin>/bin/invite-watch.sh status "<user>"<plugin> is this plugin's root (${CLAUDE_PLUGIN_ROOT} under Claude Code).
The script finds the spool writer beside itself and restarts retalk invite watch if it dies; the pid file (<user>/invite-watch.pid) and stderr log
(<user>/invite-watch.err) are the same as before.--passphrase-path keeps the secret out of the command and the
environment. Drop the flag on a --no-passphrase identity, and drop it too if
§1's probe reported a retalk without it (export RETALK_PASSPHRASE in the
same shell before calling the script instead).--interval 10 is a calm rate while a code is outstanding; retalk
polls every 2 seconds if left to itself. Stopping it once every code is
redeemed or revoked is tidiness, not a requirement: it costs a little polling
and nothing else, and leaving it running does not affect message delivery.status also prints the tail of this session's request spool, so it answers
"is it running and who has registered" in one call.--stream requests keeps these records in
<user>/sessions/<session-id>.requests.ndjson, separate from message mail, and
the plugin's retalk-requests monitor pushes each new line into the session.
On hosts without that monitor (see init's Adapt to your host agent), read the
spool with the status block above.Two record kinds arrive on that spool. Key off kind:
{"kind":"contact_accepted","code","from","name","card"} — a peer
registered. Tell the user unprompted: who registered (the name, with the
from fingerprint), that the invite code was the only check made, and that
verify is how they confirm the keys belong to the person they meant.
Delivery is already handled: the watcher widens <user>/receive-from to cover
the new peer (to their name if it was unset, otherwise to *contacts*) and,
when <user>/check-mode is auto, restarts the follower with the new peer
included, keeping the options it was running with. So do not re-point
receive-from or start a second follower; just make sure the Monitor for
this user is running (receive skill) so the first message surfaces on a
host that needs one. Sending them a short
hello is a good way to confirm the link, since they have no other way to learn
they were accepted. If the code was single-use, it is now spent; if it was
permanent and the onboarding is done, revoke it.{"kind":"contact_request_rejected","from","reason"} — a request was
refused; reason is unknown-code, revoked, expired, consumed, or
card-mismatch. Nothing was saved and nothing is pending. Mention it quietly,
in plain terms ("someone tried to register with a code that had already been
used"), and only raise it if the user is expecting a specific person, in which
case the fix is usually a fresh code. The rejected code is never echoed back,
so you cannot tell the user which one was tried. card-mismatch is the one to
take seriously: the keys did not match the fingerprint they claimed.You were invited and the invite carried a code. Create your identity and publish your keys first (init), then send one request. It adds the inviter as a contact, pins their published keys, and hands over your card:
retalk request <inviter-fingerprint> --code <code> --peer <name-to-save-them-as> --dir "<user>/identity" --passphrase-path "<user>/passphrase"
# stdout, one JSON object: {"id","to"} (the same shape as a send receipt)<name-to-save-them-as> is the suggested name from their invite; it is your
local label for them, and they never learn it. Drop --passphrase-path if
this identity has no passphrase.receive-from and start the listener (receive skill) so
their first message surfaces the moment it lands.[retalk] … message means
the command was wrong and needs fixing, as in
[retalk] request needs --code CODE or
[retalk] an inviter is addressed by their 32-hex user id. A
could-not-reach-the-relay block means the relay is unreachable, so retry
later rather than editing the command. A PIN MISMATCH on the inviter's keys
means stop and tell the user: the relay returned keys that do not match the
fingerprint in the invite.© xhluca, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/id of xhluca/agent-talk.
Open the folder on GitHubat commit 8a7fc4f
Id 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Id this skillxhluca/agent-talk | 190 | — | ~3.5k | Automated safety check: Pass | MIT | |
| ShareClickHouse/ClickHouse | 50k | — | ~558 | Automated safety check: Notes | Apache-2.0 | |
| SharingBuilderIO/agent-native | 7.1k | — | ~3.4k | Automated safety check: Pass | None | |
| CSS Printthedaviddias/Front-End-Checklist | 74k | — | ~422 | Automated safety check: Pass | MIT | |
| Deslop Shared Libsgarrytan/gstack | 136k | — | ~3.3k | Automated safety check: Notes | MIT | |
| Skill Sharedavila7/claude-code-templates | 32k | 10 repos | ~729 | Automated safety check: Pass | MIT |
ClickHouse/ClickHouse
Share a Claude Code session to pastila.nl and return a viewer link.
BuilderIO/agent-native
Framework-level sharing and privacy for user-authored resources (dashboards, documents, forms, decks, etc.).
thedaviddias/Front-End-Checklist
A skill your agent uses when reviewing stylesheets, component styles, and responsive behavior related to Include a print stylesheet.
garrytan/gstack
Find worthwhile shared-code extractions in recent work. An agent skill from garrytan/gstack.
davila7/claude-code-templates
A skill that creates new Claude skills and automatically shares them on Slack using Rube for seamless team collaboration and skill discovery.
sickn33/agentic-awesome-skills
Print collateral spec: item, finished and trim size, bleed, colour mode, stock and GSM, finish, safe margin, print method, quantity and unit cost.
xhluca/agent-talk
Save a peer's retalk user id (their 32-hex fingerprint), optionally under a local name, so you can message them by name.
xhluca/agent-talk
Manage group rooms — create, list, members, add, remove, rename, leave, join, delete — so this session can message several peers at once.
xhluca/agent-talk
Replay this session's locally-saved conversation log — the at-rest copies agent-talk keeps by default on every send and receive — both sent and received, oldest first, without re-contacting the relay.
xhluca/agent-talk
Read incoming retalk messages from this session's user's DESIGNATED sender(s) — one-shot, or as a background --follow reader that surfaces new messages in the session as they arrive (on your next…
xhluca/agent-talk
Set up, check, stop, or delete a retalk relay server (retalk-server).
xhluca/agent-talk
Send an end-to-end-encrypted message to a peer, autonomously.
Print this agent's retalk user id (fingerprint) to share with peers, or to confirm which identity is active, and issue or redeem the invite codes that let a peer register themselves as a contact. Id is an agent skill from xhluca/agent-talk. Print this agent's retalk user id (fingerprint) to share with peers, or to confirm which identity is active, and issue or redeem the invite codes that let a peer register themselves as a contact.
Id fits situations like: you need your own retalk address/fingerprint; onboarding a peer with an invite code.
Run `npx skills add xhluca/agent-talk --skill id -a claude-code`. Or copy the skill folder (skills/id in xhluca/agent-talk) into .claude/skills/id in your project. Claude Code loads it when a task matches its description.
Run `npx skills add xhluca/agent-talk --skill id -a codex`. Or copy the skill folder (skills/id in xhluca/agent-talk) into .agents/skills/id in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add xhluca/agent-talk --skill id -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/id, .gemini/skills/id, .github/skills/id and .opencode/skills/id in your project.
SKILL.md names no scripts, command-line tools or credentials: Id is instructions for the agent only.
SKILL.md names 1 domain. In commands or code: relay.retalk.dev; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
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.
Id is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Id: Share (ClickHouse/ClickHouse, 50k stars), Sharing (BuilderIO/agent-native, 7.1k stars), CSS Print (thedaviddias/Front-End-Checklist, 74k stars) and Deslop Shared Libs (garrytan/gstack, 136k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
xhluca (a GitHub user) maintains it in xhluca/agent-talk, which has 190 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on September 10, 2026.
Source: xhluca/agent-talk on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.