Paddle Build
PaddlePaddle/Paddle
A skill your agent uses when needing to compile, rebuild, or install Paddle from source after code changes.
A skill your agent uses when: working on libatbus protocol transport, ECDH handshakes, cipher/compression negotiation, message framing, access token auth, connectioncontext, or crypto-related tests.
$ npx skills add owent/libatbus --skill libatbus-protocol-crypto -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install owent/libatbus libatbus-protocol-crypto --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/owent/libatbus.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/libatbus-protocol-crypto .claude/skills/libatbus-protocol-crypto && 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 "libatbus-protocol-crypto" agent skill from https://github.com/owent/libatbus/tree/main/.agents/skills/libatbus-protocol-crypto into .claude/skills/libatbus-protocol-crypto/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "libatbus-protocol-crypto", 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/owent/libatbus/tree/main/.agents/skills/libatbus-protocol-cryptoType 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 owent/libatbus --skill libatbus-protocol-crypto -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install owent/libatbus libatbus-protocol-crypto --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/owent/libatbus.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/libatbus-protocol-crypto .agents/skills/libatbus-protocol-crypto && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "libatbus-protocol-crypto" agent skill from https://github.com/owent/libatbus/tree/main/.agents/skills/libatbus-protocol-crypto into .agents/skills/libatbus-protocol-crypto/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "libatbus-protocol-crypto", 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 owent/libatbus --skill libatbus-protocol-crypto -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install owent/libatbus libatbus-protocol-crypto --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/owent/libatbus.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/libatbus-protocol-crypto .cursor/skills/libatbus-protocol-crypto && 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 "libatbus-protocol-crypto" agent skill from https://github.com/owent/libatbus/tree/main/.agents/skills/libatbus-protocol-crypto into .cursor/skills/libatbus-protocol-crypto/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "libatbus-protocol-crypto", 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/owent/libatbus.git --path .agents/skills/libatbus-protocol-crypto--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 owent/libatbus --skill libatbus-protocol-crypto -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install owent/libatbus libatbus-protocol-crypto --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/owent/libatbus.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/libatbus-protocol-crypto .gemini/skills/libatbus-protocol-crypto && 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 "libatbus-protocol-crypto" agent skill from https://github.com/owent/libatbus/tree/main/.agents/skills/libatbus-protocol-crypto into .gemini/skills/libatbus-protocol-crypto/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "libatbus-protocol-crypto", 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 owent/libatbus libatbus-protocol-cryptoInstalls 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 owent/libatbus --skill libatbus-protocol-crypto -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/owent/libatbus.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/libatbus-protocol-crypto .github/skills/libatbus-protocol-crypto && 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 "libatbus-protocol-crypto" agent skill from https://github.com/owent/libatbus/tree/main/.agents/skills/libatbus-protocol-crypto into .github/skills/libatbus-protocol-crypto/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "libatbus-protocol-crypto", 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 owent/libatbus --skill libatbus-protocol-crypto -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install owent/libatbus libatbus-protocol-crypto --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/owent/libatbus.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/libatbus-protocol-crypto .opencode/skills/libatbus-protocol-crypto && 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 "libatbus-protocol-crypto" agent skill from https://github.com/owent/libatbus/tree/main/.agents/skills/libatbus-protocol-crypto into .opencode/skills/libatbus-protocol-crypto/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "libatbus-protocol-crypto", 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.
libatbus-protocol-cryptoA skill your agent uses when: working on libatbus protocol transport, ECDH handshakes, cipher/compression negotiation, message framing, access token auth, connectioncontext, or crypto-related tests.
Libatbus Protocol Crypto is an agent skill from owent/libatbus. Use when: working on libatbus protocol transport, ECDH handshakes, cipher/compression negotiation, message framing, access token auth, connectioncontext, or crypto-related tests.
Its SKILL.md is about 4.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It works with C++. The repository describes itself as: 用于搭建高性能、全异步、树形结构的BUS消息系统的跨平台框架库. The licence is MIT.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit d46c04d. 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 (its code samples are cpp and protobuf).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From 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.
Libatbus Protocol Crypto loads about 4.3k tokens when it runs. Until then it costs about 51 tokens; SKILL.md has 896 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 owent/libatbus at commit d46c04d, republished under its MIT licence (© owent). 896 words, ~4,302 tokens.
.claude/skills/libatbus-protocol-crypto/SKILL.md (or your agent's skills folder).This skill covers the libatbus wire protocol, ECDH key exchange handshake, encryption/compression algorithm negotiation, message framing, and access token authentication.
include/libatbus_protocol.proto — Protobuf v3 protocol definition (source of truth for all message types)include/atbus_connection_context.h — ECDH handshake, cipher/compression negotiation, pack/unpack APIsrc/atbus_connection_context.cpp — Implementation of handshake, algorithm selection, message encryption/compressioninclude/atbus_message_handler.h — Message dispatch table, access_data signature generationsrc/atbus_message_handler.cpp — Handlers for register, ping/pong, forward, handshake_confirminclude/atbus_node.h — Node configuration (conf_t) with crypto/compression settingstest/case/atbus_connection_context_test.cpp — handshake, pack/unpack, and algorithm casestest/case/atbus_message_handler_test.cpp — access-data and HMAC-signature casesenum ATBUS_CRYPTO_KEY_EXCHANGE_TYPE {
ATBUS_CRYPTO_KEY_EXCHANGE_NONE = 0; // No encryption
ATBUS_CRYPTO_KEY_EXCHANGE_X25519 = 1; // Recommended (TLS 1.3)
ATBUS_CRYPTO_KEY_EXCHANGE_SECP256R1 = 2; // P-256
ATBUS_CRYPTO_KEY_EXCHANGE_SECP384R1 = 3; // P-384
ATBUS_CRYPTO_KEY_EXCHANGE_SECP521R1 = 4; // P-521
}enum ATBUS_CRYPTO_ALGORITHM_TYPE {
ATBUS_CRYPTO_ALGORITHM_NONE = 0;
ATBUS_CRYPTO_ALGORITHM_XXTEA = 1; // Legacy
ATBUS_CRYPTO_ALGORITHM_AES_128_CBC = 11; // PKCS#7 padding
ATBUS_CRYPTO_ALGORITHM_AES_192_CBC = 12; // PKCS#7 padding
ATBUS_CRYPTO_ALGORITHM_AES_256_CBC = 13; // PKCS#7 padding
ATBUS_CRYPTO_ALGORITHM_AES_128_GCM = 14; // AEAD - recommended
ATBUS_CRYPTO_ALGORITHM_AES_192_GCM = 15; // AEAD
ATBUS_CRYPTO_ALGORITHM_AES_256_GCM = 16; // AEAD - recommended
ATBUS_CRYPTO_ALGORITHM_CHACHA20 = 31; // Stream cipher
ATBUS_CRYPTO_ALGORITHM_CHACHA20_POLY1305_IETF = 32; // AEAD - modern
ATBUS_CRYPTO_ALGORITHM_XCHACHA20_POLY1305_IETF = 33; // AEAD - extended nonce
}enum ATBUS_CRYPTO_KDF_TYPE {
ATBUS_CRYPTO_KDF_HKDF_SHA256 = 0; // Only supported KDF
}enum ATBUS_COMPRESSION_ALGORITHM_TYPE {
ATBUS_COMPRESSION_ALGORITHM_NONE = 0;
ATBUS_COMPRESSION_ALGORITHM_ZSTD = 100; // Best general compression
ATBUS_COMPRESSION_ALGORITHM_LZ4 = 200; // Ultra-fast
ATBUS_COMPRESSION_ALGORITHM_SNAPPY = 300; // Fast, reasonable ratio
ATBUS_COMPRESSION_ALGORITHM_ZLIB = 400; // Universal compatibility
}
enum ATBUS_COMPRESSION_LEVEL {
ATBUS_COMPRESSION_LEVEL_DEFAULT = 0;
ATBUS_COMPRESSION_LEVEL_STORAGE = 100; // Minimal CPU
ATBUS_COMPRESSION_LEVEL_FAST = 200; // Lowest latency
ATBUS_COMPRESSION_LEVEL_LOW_CPU = 300; // Light tradeoff
ATBUS_COMPRESSION_LEVEL_BALANCED = 400; // System recommended
ATBUS_COMPRESSION_LEVEL_HIGH_RATIO = 500; // Storage priority
ATBUS_COMPRESSION_LEVEL_MAX_RATIO = 600; // Offline/cold data only
}The handshake is carried within the ping/pong mechanism after node registration.
Client (connecting node) Server (listening node)
│ │
│ ── node_register_req ──────────────────> │ (bus_id, channels, access_key,
│ │ crypto_handshake with public key)
│ <────────────── node_register_rsp ────── │
│ │
│ Step 1: Generate ECDH keypair │
│ ── node_ping_req ──────────────────────> │ (crypto_handshake {
│ crypto_handshake.sequence = N │ sequence, type, kdf_type[],
│ crypto_handshake.public_key = PK_c │ algorithms[], public_key,
│ crypto_handshake.algorithms = [...] │ iv_size, tag_size })
│ │
│ │ Step 2: Generate own ECDH keypair
│ │ Compute shared_secret = ECDH(SK_s, PK_c)
│ │ Select best mutual algorithm
│ │ Derive key+IV via HKDF-SHA256
│ │ Create send_cipher (encrypt mode)
│ │ Create handshake_receive_cipher (decrypt)
│ │ Set handshake_pending_confirm = true
│ │
│ <───────────────── node_pong_rsp ─────── │ (crypto_handshake {
│ crypto_handshake.sequence = N │ sequence=N, public_key=PK_s,
│ crypto_handshake.public_key = PK_s │ algorithms=[selected] })
│ crypto_handshake.algorithms=[selected]│
│ │
│ Step 3: Compute shared_secret = │
│ ECDH(SK_c, PK_s) │
│ Derive same key+IV via HKDF-SHA256 │
│ Create send_cipher + receive_cipher │
│ (Client switches ciphers immediately) │
│ │
│ ── handshake_confirm ──────────────────> │ (sequence = N)
│ │
│ │ Step 4: confirm_handshake(N)
│ │ receive_cipher = handshake_receive_cipher
│ │ handshake_pending_confirm = false
│ │
│ ═══════ Encrypted communication ════════ │During the handshake transition, the server holds both the old receive_cipher and a new handshake_receive_cipher. This is because:
handshake_confirm does the server know the client has switched.receive_cipher is replaced with handshake_receive_cipher.Periodic key refresh uses the same handshake flow on an already-connected session:
crypto_key_refresh_interval (3 hours)crypto_handshake_datacrypto_handshake_data.algorithmsconf_t.crypto_allow_algorithmsEN_ATBUS_ERR_CRYPTO_HANDSHAKE_NO_AVAILABLE_ALGORITHMregister_data.supported_compression_algorithmconnection_context::update_compression_algorithm() method receives the peer's supported list and selects the first mutually supported algorithmATFW_UTIL_MACRO_COMPRESSION_ENABLED)Not all messages are compressed. The decision is per-message:
// Control messages: NEVER compressed or encrypted
// ping/pong, register req/rsp, handshake_confirm → plaintext always
// Data/command messages: compressed if body_size >= 1024 bytes
// kDataTransformReq, kDataTransformRsp, kCustomCommandReq, kCustomCommandRsp
// Other messages: compressed if body_size >= 2048 bytes
// Below 512 bytes: NEVER compressed (header overhead exceeds savings)// Control messages: NEVER encrypted
// kNodeRegisterReq, kNodeRegisterRsp, kNodePingReq, kNodePongRsp, kHandshakeConfirm
// All other messages: encrypted if send_cipher is available┌──────────────────┬──────────────────┬──────────────┬─────────┐
│ varint(head_len) │ protobuf header │ body payload │ padding │
│ 1-10 bytes │ head_len bytes │ variable │ 0+ bytes│
└──────────────────┴──────────────────┴──────────────┴─────────┘message_body to byteshead.compression.type and head.compression.original_sizehead.crypto.algorithm and head.crypto.iv; for AEAD ciphers also set head.crypto.aadmessage_head (with crypto/compression metadata)message_head protobufhead.crypto.algorithm != NONE: restore IV from header, decrypt payloadhead.compression.type != NONE: decompress to head.body_size bytesmessage_body protobufThe internal_padding_temporary_buffer_block() function aligns buffer sizes to reduce allocation fragmentation:
| Input Size | Alignment | Strategy |
|---|---|---|
| 0 | → word size (8 bytes) | Minimum allocation |
| 1–64 | 8-byte aligned | Word alignment |
| 65–512 | 16-byte aligned | Cache line friendly |
| 513–8192 | mimalloc size classes | Follows allocator bins |
| >8192 | 4096-byte (page) aligned | OS page alignment |
Registration and custom commands are authenticated with HMAC-SHA256:
plaintext = "{timestamp}:{nonce1}-{nonce2}:{bus_id}" // without crypto
plaintext = "{timestamp}:{nonce1}-{nonce2}:{bus_id}:{key_exchange_type}:{hex(sha256(pubkey))}" // with crypto
plaintext = "{timestamp}:{nonce1}-{nonce2}:{from}:{hex(sha256(commands.arg[0]))}{hex(sha256(commands.arg[1]))}" // custom cmd
signature = HMAC-SHA256(access_token, plaintext)access_data.signature[]auto ctx = connection_context::create(
protocol::ATBUS_CRYPTO_KEY_EXCHANGE_X25519, // Key exchange algorithm
dh_shared_context // Pre-created DH context from node
);// Step 1 (Client): Generate keypair
ctx->handshake_generate_self_key(0); // 0 = client generates own sequence
// Step 1b: Write public key to send
protocol::crypto_handshake_data handshake_msg;
ctx->handshake_write_self_public_key(handshake_msg, supported_algorithms);
// Step 2 (Server): Receive peer key and compute shared secret
ctx->handshake_generate_self_key(peer_sequence); // Use peer's sequence
ctx->handshake_read_peer_key(peer_handshake_data, supported_algorithms, true); // need_confirm=true for server
// Step 3 (Client): Receive server's key
ctx->handshake_read_peer_key(server_handshake_data, supported_algorithms, false); // need_confirm=false for client
// Step 4 (Server): Confirm cipher switch
ctx->confirm_handshake(handshake_sequence);// Pack (serialize + compress + encrypt)
auto result = ctx->pack_message(msg, protocol_version, random_engine, max_body_size);
if (result.is_success()) {
auto &buffer = result.get_success();
// buffer.data(), buffer.size() → send over wire
}
// Unpack (decrypt + decompress + deserialize)
ATBUS_ERROR_TYPE err = ctx->unpack_message(msg, input_span, max_body_size);// Update compression algorithm from peer's supported list
std::vector<protocol::ATBUS_COMPRESSION_ALGORITHM_TYPE> peer_algorithms = { ZSTD, LZ4 };
ctx->update_compression_algorithm(peer_algorithms);
// Check if a specific algorithm is available at build time
bool has_zstd = connection_context::is_compression_algorithm_supported(
protocol::ATBUS_COMPRESSION_ALGORITHM_ZSTD);atbus::node::conf_t conf;
atbus::node::default_conf(&conf);
// Key exchange
conf.crypto_key_exchange_type = protocol::ATBUS_CRYPTO_KEY_EXCHANGE_X25519;
conf.crypto_key_refresh_interval = std::chrono::hours{3};
// Allowed ciphers (in priority order)
conf.crypto_allow_algorithms = {
protocol::ATBUS_CRYPTO_ALGORITHM_AES_256_GCM,
protocol::ATBUS_CRYPTO_ALGORITHM_CHACHA20_POLY1305_IETF,
protocol::ATBUS_CRYPTO_ALGORITHM_AES_128_GCM,
};
// Compression
conf.compression_allow_algorithms = {
protocol::ATBUS_COMPRESSION_ALGORITHM_ZSTD,
protocol::ATBUS_COMPRESSION_ALGORITHM_LZ4,
};
conf.compression_level = protocol::ATBUS_COMPRESSION_LEVEL_BALANCED;
// Access tokens
conf.access_tokens.push_back({'s','e','c','r','e','t'});// Change crypto config without restarting
node->reload_crypto(
protocol::ATBUS_CRYPTO_KEY_EXCHANGE_X25519,
std::chrono::hours{1},
{protocol::ATBUS_CRYPTO_ALGORITHM_AES_256_GCM}
);
// Change compression config
node->reload_compression(
{protocol::ATBUS_COMPRESSION_ALGORITHM_ZSTD},
protocol::ATBUS_COMPRESSION_LEVEL_FAST
);Read ../testing/references/test-design-and-acceptance.md before designing or reviewing cases, and use the exact current
test source as the API/fixture reference. Do not copy placeholder handshakes, messages, fixed ports, or wait loops into a
new test.
connection_context and message-handler paths for handshake, negotiation, pack/unpack,
authentication, boundary, and failure semantics. Use real node/transport setup only when end-to-end transport behavior
is the subject.CASE_EXPECT_* is
non-fatal, so do not continue a handshake after a failed setup assertion.Binary test vectors are generated by:
test/case/atbus_connection_context_crosslang_generator.cpp → test/case/atbus_connection_context_enc_dec/test/case/atbus_access_data_crosslang_generator.cpp → test/case/atbus_access_data_crosslang/Each algorithm combination produces:
{algorithm}_{message_type}.bytes — binary wire-format message{algorithm}_{message_type}.json — metadata (algorithm, key, IV, plaintext hash, etc.)index.json — catalog of all test vectorsOther language implementations (Go, etc.) read these files to verify byte-for-byte compatibility.
Control messages are never encrypted: register, ping/pong, and handshake_confirm are always plaintext. Don't try to add encryption to them.
Sequence ID prevents replay: The handshake sequence ID must match between client's ping and server's pong. Mismatched sequences return EN_ATBUS_ERR_CRYPTO_HANDSHAKE_SEQUENCE_EXPIRED.
Server needs confirm before switching receive cipher: The server uses handshake_receive_cipher temporarily. Only after receiving handshake_confirm does it call confirm_handshake() to switch.
Compression threshold is per-message: Small messages (<512 bytes) are never compressed. Data messages need ≥1024 bytes, control-style messages need ≥2048 bytes.
AEAD vs non-AEAD: GCM and Poly1305 ciphers are AEAD (authenticated encryption with associated data). CBC and XXTEA are non-AEAD. The pack/unpack code handles both, but AEAD validation failures cause EN_ATBUS_ERR_CRYPTO_DECRYPT.
Algorithm availability is build-time: Compression algorithms depend on whether the library was built with zstd/lz4/snappy/zlib support. Use connection_context::is_compression_algorithm_supported() to check.
© owent, 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 .agents/skills/libatbus-protocol-crypto of owent/libatbus.
Open the folder on GitHubat commit d46c04d
Libatbus Protocol Crypto 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 |
|---|---|---|---|---|---|---|
| Libatbus Protocol Crypto this skillowent/libatbus | 234 | — | ~4.3k | Automated safety check: Pass | MIT | |
| Paddle BuildPaddlePaddle/Paddle | 24k | — | ~1k | Automated safety check: Pass | Apache-2.0 | |
| Fory Releaseapache/fory | 4.6k | — | ~2.9k | Automated safety check: Pass | Apache-2.0 | |
| ONNX Runtime Shape Inference Safety Auditmicrosoft/onnxruntime | 22k | — | ~3.3k | Automated safety check: Pass | MIT | |
| Code Audit3stoneBrother/code-audit | 893 | 1 repos | ~2.7k | Automated safety check: Pass | None | |
| Qt C++ Code Reviewx-tools-author/x-tools | 1.1k | 2 repos | ~4.3k | Automated safety check: Pass | BSD-3-Clause |
PaddlePaddle/Paddle
A skill your agent uses when needing to compile, rebuild, or install Paddle from source after code changes.
apache/fory
Prepare an Apache Fory release candidate from a clean release branch, including the version bump, RC tag, JVM staging, ASF source artifacts, SVN upload, and vote email.
microsoft/onnxruntime
Finds and fixes out-of-range output writes in ONNX Runtime operator shape-inference functions where a getNumOutputs guard admits too few outputs.
3stoneBrother/code-audit
Professional code security audit skill covering 55+ vulnerability types.
x-tools-author/x-tools
Read-only review of Qt6 C++ code that combines a deterministic lint script with six parallel analysis agents and reports only high-confidence issues.
doxygen/doxygen
Keeps all Doxygen and Doxywizard translations up to date across three mechanisms: translator C++ classes (src/translatorxx.h), Qt .ts locale files for the Doxywizard GUI (addon/doxywizard/i18n/)…
owent/libatbus
A skill your agent uses when: designing, writing, reviewing, or running libatbus unit tests, filtering private-framework cases, testing topology/channel behavior, or diagnosing Windows test…
owent/libatbus
A skill your agent uses when: initializing, auditing, or optimizing repository AI guidance, including AGENTS.md/CLAUDE.md bridges, Agent Skills, trigger descriptions, progressive disclosure, source…
owent/libatbus
A skill your agent uses when: diagnosing or fixing a defect, test/build/runtime failure, or planning and implementing a nontrivial feature, behavior change, cross-module refactor, public API/ABI…
owent/libatbus
A skill your agent uses when: running terminal commands, writing or debugging shell/PowerShell scripts, choosing or installing CLI tools, or diagnosing command failures, quoting/escaping errors, or…
owent/libatbus
A skill your agent uses when: writing or reviewing C++, public headers, template function visibility, exported API ABI, ATFWUTILSYMBOLVISIBLE, or ATFWUTILFORCEINLINE.
Works with
A skill your agent uses when: working on libatbus protocol transport, ECDH handshakes, cipher/compression negotiation, message framing, access token auth, connectioncontext, or crypto-related tests. Libatbus Protocol Crypto is an agent skill from owent/libatbus. Use when: working on libatbus protocol transport, ECDH handshakes, cipher/compression negotiation, message framing, access token auth, connectioncontext, or crypto-related tests.
Libatbus Protocol Crypto fits situations like: : working on libatbus protocol transport; ECDH handshakes; cipher/compression negotiation; message framing.
Run `npx skills add owent/libatbus --skill libatbus-protocol-crypto -a claude-code`. Or copy the skill folder (.agents/skills/libatbus-protocol-crypto in owent/libatbus) into .claude/skills/libatbus-protocol-crypto in your project. Claude Code loads it when a task matches its description.
Run `npx skills add owent/libatbus --skill libatbus-protocol-crypto -a codex`. Or copy the skill folder (.agents/skills/libatbus-protocol-crypto in owent/libatbus) into .agents/skills/libatbus-protocol-crypto 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 owent/libatbus --skill libatbus-protocol-crypto -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/libatbus-protocol-crypto, .gemini/skills/libatbus-protocol-crypto, .github/skills/libatbus-protocol-crypto and .opencode/skills/libatbus-protocol-crypto in your project.
SKILL.md names no scripts, command-line tools or credentials: Libatbus Protocol Crypto is instructions for the agent only.
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.
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.
Libatbus Protocol Crypto is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.3k tokens (SKILL.md is roughly 17k 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 Libatbus Protocol Crypto: Paddle Build (PaddlePaddle/Paddle, 24k stars), Fory Release (apache/fory, 4.6k stars), ONNX Runtime Shape Inference Safety Audit (microsoft/onnxruntime, 22k stars) and Code Audit (3stoneBrother/code-audit, 893 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
owent (a GitHub user) maintains it in owent/libatbus, which has 234 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on September 11, 2026.
Source: owent/libatbus on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.