Skip to content
cccskills
FreePublished on GitHub

ssh-connection-import

Implement and debug onetcli SSH connection importers that read OpenSSH config and known_hosts. Trace why previews return no records, check candidate file access and manifests, and match serialized authentication data to the host protocol’s expected JSON shape.

OriginalShow the original description

Use when implementing or debugging onetcli SSH connection importers, including OpenSSH config, known_hosts, candidate file manifests, local composite installs, SSH auth_method JSON decode errors such as unknown variant kind, or preview scans that show available sources but return zero records.

feigeCode/navop1,953 stars(GitHub 1,953 + cccskills 0)

Run score Not tested

See how to install

Good for

  • Adding OpenSSH config import support
  • Using known_hosts to discover SSH hosts
  • Debugging previews that show sources but no records
  • Fixing SSH authentication JSON decode errors

Files included (4)

  • SKILL.md4.8 KB
  • agents/openai.yaml197 B
  • references/openssh-sources.md2.6 KB
  • references/ssh-protocol-debugging.md2.5 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

SSH Connection Import

Overview

Build and debug SSH importers against the host protocol first. Most failures are not parsing failures; they are mismatches between manifest visibility, candidate file access, WASM output JSON, and connection-import-protocol decode rules.

For shared WASM component structure, manifests, packaging, and host runtime work, also use connection-import-wasm.

References

NeedReference
OpenSSH config and known_hosts parsing rulesOpenSSH Sources
SSH protocol JSON, auth methods, and preview failuresSSH Protocol Debugging

Protocol Contract

Inspect the host protocol before defining extension structs:

  • Host model: ../onetcli/crates/connection-import-protocol/src/model.rs
  • Importer output must serialize to the host's serde shape, not a local convenience shape.

For SSH auth, match SshImportAuthMethod with #[serde(rename_all = "snake_case")]:

VariantJSON shape
AutoPublicKey"auto_public_key"
Agent"agent"
PrivateKey{"private_key":{"key_path":"...","passphrase":null}}
Password{"password":{"password":null}} or an omitted secret when not importing passwords

Never emit {"kind":"auto_public_key"}. The host error unknown variant kind, expected one of password, private_key, private_key_material, agent, auto_public_key means the importer used internally tagged JSON that the host protocol does not accept.

Add a focused serialization test for each auth variant the importer emits:

let value = serde_json::to_value(&record).unwrap();
assert_eq!(value["ssh"]["auth_method"], "auto_public_key");

OpenSSH Sources

Declare platform candidates and fs:read:* permissions for both primary config and fallback discovery:

SourcemacOS/LinuxWindows
OpenSSH config~/.ssh/config%USERPROFILE%/.ssh/config
known hosts fallback~/.ssh/known_hosts%USERPROFILE%/.ssh/known_hosts

Use known_hosts only as host discovery. It rarely contains username or auth metadata, so emit host-only records with empty username, parsed port, and AutoPublicKey.

Parsing rules for known_hosts:

  • Parse plain hosts, comma-separated aliases, and bracketed ports like [example.com]:2222.
  • Skip hashed hosts starting with |, wildcard or negated patterns, and marker lines such as @cert-authority.
  • Ignore key material after the host pattern column.
  • See OpenSSH Sources before extending parser behavior.

Debug Flow

When the UI shows the source as available but OpenSSH returns no rows, trace the full path:

  1. Confirm the installed composite manifest contributes the importer and the current platform.
  2. Confirm each candidate file path expands correctly (~/..., %USERPROFILE%/...) and has matching fs:read:* permission.
  3. Confirm the file exists on the user's machine. ~/.ssh/config may be absent while ~/.ssh/known_hosts exists.
  4. Run importer unit tests for parser behavior and serialized JSON shape.
  5. Check host logs for connection import preview failed. Decode errors mean the source was read and the WASM component returned JSON, but the host rejected the protocol shape.

Treat "可导入" or "available" in the UI as manifest/source visibility only. It does not prove preview records decoded successfully.

Local Packaging

Verify and install the composite extension before host UI testing:

rtk cargo test -p openssh_config_importer_wasm
rtk cargo build --release -p openssh_config_importer_wasm --target wasm32-wasip2
rtk node scripts/release-driver.mjs openssh-config-importer 0.1.0 --target universal --artifact-dir /tmp/onetcli-composite-local/openssh-config

The local install target is:

~/.config/one-hub/extensions/composite/com.onetcli.importer.openssh-config

The installed folder must contain extension.json and wasm/openssh_config_importer_wasm.wasm.

Common Mistakes

MistakeFix
Defining SSH auth as { kind, ... }Serialize exactly like connection-import-protocol::SshImportAuthMethod.
Only scanning ~/.ssh/configAdd known_hosts fallback because many local machines have no config file.
Treating known_hosts aliases as full configsEmit conservative host-only records and skip ambiguous patterns.
Debugging only extension code after a UI zero-row resultInspect host decode logs and candidate file reads.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Implement and debug onetcli connection importers packaged as WebAssembly components. The skill covers parsing application settings, manifests and packaging, host integration, local visibility, password handling, and import preview issues.

  • Adding an importer for a database application
  • Debugging a WASM importer that is not listed
  • Packaging and installing a composite extension
feigeCode/navop2KUpdated Oct 26, 2026

gpui

FreeSummary

Use this skill while building or maintaining GPUI applications. It provides focused references for framework APIs and patterns, including keybindings, async tasks, state, events, layout, focus, custom elements, and tests.

  • Finding the right GPUI API for a feature
  • Implementing keyboard actions and focus navigation
  • Managing entities, events, or global state
feigeCode/navop2KUpdated Oct 26, 2026

gpui-component

FreeSummary

Build GPUI interfaces with gpui-component by choosing suitable controls, handling component state and themes, and following its design and coding guides. The references also cover layout, interaction states, interface copy, and application structure.

  • Choosing a component for a UI need
  • Setting up gpui-component in a GPUI app
  • Handling component state and theming
feigeCode/navop2KUpdated Oct 26, 2026

Design, implement, review, or debug onetcli IPC database drivers. Work from the `driver.json` manifest and JSON-RPC protocol contract through schema metadata, SQL-building methods, import and export, tests, and packaging, with guidance that applies across implementation languages.

  • Creating or reviewing an onetcli IPC database driver
  • Defining driver.json methods and capabilities
  • Implementing schema metadata and DDL builders
feigeCode/navop2KUpdated Oct 26, 2026

navop

FreeSummary

Use the Navop CLI to discover and operate resources exposed by a running Navop desktop app. The skill checks live tools, permissions, and schemas before commands, then follows Navop’s approval decisions for operations.

  • Checking which Navop tools are currently available
  • Inspecting a tool’s live schema before using it
  • Running a supported read or write operation
feigeCode/navop2KUpdated Oct 26, 2026

Prepare and review bilingual Chinese and English release notes for Navop. Maintain `CHANGELOG.md` as the source of truth, then check that tagged entries provide consistent content for GitHub Releases and the R2 updater manifest when a release is published or synchronized.

  • Drafting bilingual notes for a Navop version
  • Reviewing a CHANGELOG.md release entry
  • Checking release notes before creating a version tag
feigeCode/navop2KUpdated Oct 26, 2026

See all skills by feigeCode

Report a problem with this skill