From lxmf-toolkit
Deep knowledge of LXMF (Lightweight Extensible Message Format) protocol and Reticulum integration. Use when working with LXMF messaging, LXMessage creation, LXMRouter configuration, propagation nodes, delivery methods (OPPORTUNISTIC, DIRECT, PROPAGATED), stamps, tickets, or RNS destinations and links.
How this skill is triggered — by the user, by Claude, or both
Slash command
/lxmf-toolkit:lxmf-protocolThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill provides comprehensive knowledge for developing with the LXMF protocol.
This skill provides comprehensive knowledge for developing with the LXMF protocol.
Comprehensive documentation is in the references/ directory:
references/protocol-guide.mdreferences/constants.mdreferences/examples.md| Hash Type | Derivation | Usage |
|---|---|---|
| Identity Hash | truncated_hash(public_key) | Identifies cryptographic identity |
| Destination Hash | truncated_hash(name_hash + identity_hash) | Addresses specific endpoint (LXMF address) |
# From identity hash to LXMF destination
identity = RNS.Identity.recall(identity_hash, from_identity_hash=True)
lxmf_hash = RNS.Destination.hash_from_name_and_identity("lxmf.delivery", identity)
# From LXMF address (destination hash), recall identity
identity = RNS.Identity.recall(destination_hash) # from_identity_hash=False
| Method | Value | Use Case | Max Size |
|---|---|---|---|
DIRECT | 0x02 | Default - establishes link | Unlimited |
OPPORTUNISTIC | 0x01 | Quick small messages | ~295 bytes |
PROPAGATED | 0x03 | Offline recipients | Node dependent |
PAPER | 0x05 | QR/URI for offline | ~2.9 KB |
GENERATING (0x00) -> OUTBOUND (0x01) -> SENDING (0x02) ->
SENT (0x04) / DELIVERED (0x08) / REJECTED (0xFD) / CANCELLED (0xFE) / FAILED (0xFF)
import RNS, LXMF
reticulum = RNS.Reticulum()
router = LXMF.LXMRouter(storagepath="~/.myapp/lxmf")
identity = RNS.Identity()
local_dest = router.register_delivery_identity(identity)
recipient_identity = RNS.Identity.recall(recipient_hash)
recipient_dest = RNS.Destination(
recipient_identity, RNS.Destination.OUT,
RNS.Destination.SINGLE, "lxmf", "delivery"
)
message = LXMF.LXMessage(
recipient_dest, local_dest, "Hello!",
desired_method=LXMF.LXMessage.DIRECT
)
router.handle_outbound(message)
def on_message(message):
print(f"From: {RNS.prettyhexrep(message.source_hash)}")
print(f"Content: {message.content}")
router.register_delivery_callback(on_message)
delivery_dest.announce()
RNS.Transport.request_path() and waitgetattr(message, 'receiving_interface', None)| File | Purpose |
|---|---|
LXMF/LXMessage.py | Message class - states, methods, pack/unpack |
LXMF/LXMRouter.py | Routing - delivery, propagation, callbacks |
LXMF/LXMPeer.py | Peer sync - offer/request protocol |
LXMF/LXStamper.py | Proof-of-work stamps |
LXMF/LXMF.py | Constants - fields, renderers |
Enable verbose logging:
import RNS
RNS.loglevel = RNS.LOG_VERBOSE # Or LOG_DEBUG, LOG_EXTREME
Check message state:
print(f"State: {message.state}, Method: {message.method}")
print(f"Hash: {RNS.prettyhexrep(message.hash)}")
npx claudepluginhub torlando-tech/reticulum-skills --plugin lxmf-toolkitThis skill should be used when the user is authoring, validating, or invoking AT Protocol lexicons in Rust, TypeScript, or Go — the JSON schema layer that governs record shapes and XRPC methods. Triggers on phrases like "lexicon", "lexicon doc", "LexiconDoc", "NSID", "defs", "$type", "$type dispatch", "main def", "open union", "closed union", "knownValues", "enum", "strongRef", "blob ref", "cid-link", "record-key", "rkey", "tid", "at-uri", "at://<did>/<collection>/<rkey>", "record validation", "assertValidRecord", "ValidateRecord", "validate_record", "query", "procedure", "subscription", "XRPC", "XRPC method", "invoke XRPC", "xrpc call", "params", "parameters", "input.schema", "output.schema", "subscription frame", "MessageFrame", "ErrorFrame", "firehose consumer", "Jetstream", "lex-cli", "gen-api", "gen-server", "lexgen", "cbor-gen", "backward-compat", "breaking change", "add optional field", "closed union evolution", "InvalidRequest", "XRPCError", "XRPCInvalidResponseError", "AuthRequiredError", "RateLimitExceeded". Also triggers on dependency/import names like `atproto-lexicon`, `atproto-client`, `atproto-record`, `atproto-jetstream`, `@atproto/lexicon`, `@atproto/xrpc`, `@atproto/xrpc-server`, `@atproto/api`, `@atproto/lex-cli`, `@atproto/syntax`, `indigo/atproto/lexicon`, `indigo/atproto/data`, `indigo/atproto/syntax`, `indigo/xrpc`, `indigo/api/atproto`, `indigo/api/agnostic`, `indigo/events`, `indigo/lex/util`, or API names like `BaseCatalog`, `Lexicons`, `XrpcClient`, `AtpAgent`, `createServer`, `streamMethod`, `ResolvingCatalog`, `DefaultLexiconResolver`, `RepoGetRecord`, `RepoCreateRecord`, `HandleRepoStream`, `RepoStreamCallbacks`, `LexiconTypeDecoder`, `BlobRef`, `DataValue`. Use this skill to author a new lexicon, run a validator against records (strict on write, lenient on read), call any `com.atproto.*` XRPC method, consume the firehose, stand up an XRPC server, or plan a backward-compatible lexicon change. Covers lexicon document structure, NSID grammar, AT-URI shape inside records, `$type` dispatch, strongRef vs. blob refs, XRPC HTTP/WebSocket wire format, validation strictness modes, and the backward-compat change matrix. Does NOT cover CID parsing/construction (see `atproto-cid`), DID resolution / handle lookup (see `atproto-identity-resolution`), CAR / MST / commit signing at the repo layer (see `atproto-repository`), OAuth token flows / DPoP (see `atproto-oauth`), Bluesky-domain record idioms (`app.bsky.*` facets, richtext, embeds, threadgates, labels — out of scope for this plugin entirely; point users at the Bluesky appview or `@atproto/api` docs).
Navigates the lnd Go codebase: entry points, key subsystems (routing, htlcswitch, lnwallet), and patterns. Useful for contributing or debugging lnd.
Technical reference on Lightning Network channel factories, multi-party channels, LSP architectures, and Bitcoin Layer 2 scaling without soft forks.