DeepSeek Harness Remote
DeepSeek Harness Remote: DeepSeek Harness 실행 PC와 모바일·PC를 안전하게 연결해 어디서나 작업 이어받기
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Klardrop is an open-source nearby-sharing app — think AirDrop, but it works between every device you own regardless of the operating system. Pick a file or a snippet of text on one device, choose a nearby device, and it lands on the other side a moment later. There is no account, no cloud, no upload step: bytes go directly from one device to the other over the local network (or Bluetooth when Wi-Fi can't reach).
It's built with Kotlin Multiplatform and Compose Multiplatform, so the discovery, transfer, and UI code is shared across every target.
| Platform | Status | Notes |
|---|---|---|
| Android | ✅ | Full app with a system share-sheet extension |
| iOS | ✅ | Full app with a share extension |
| macOS | ✅ | Native app with a menubar presence |
| Desktop (JVM) | ✅ | Windows / Linux / macOS via the JVM build |
Klardrop has three jobs: find nearby devices, trust them once, and move bytes between them.
Klardrop simultaneously advertises itself and scans for other Klardrop instances on every transport it has available:
_klardrop._tcp.). It can also discover devices speaking Google's Nearby Share
protocol (_FC9F5ED42C8A._tcp.) for cross-app interop.Every discovered device shows up in a live list with its name, OS, and device type. The friendly name and metadata are only revealed after an authenticated handshake, never over open airwaves.
The first time two devices talk to each other, they go through a one-time pairing flow that you confirm with a tap on both ends. Under the hood:
Once paired, the shared secret and the peer's identity key are stored locally on both sides and the devices recognise each other automatically forever after.
Klardrop uses its own compact wire format: a 4-byte length prefix, a 1-byte message type, and a Protocol Buffer payload. The same format flows over every transport (Wi-Fi TCP, Nearby Share TCP, BLE GATT), so the rest of the system doesn't have to care which medium the bytes travelled over.
For files, the sender announces the file metadata, the receiver acknowledges
(ACK_READY), and the payload is streamed in 32 KB chunks with live progress on
both ends. Every chunk carries an authentication tag (see below), and the whole
transfer is acknowledged when complete (ACK_RECEIVED). If a connection drops,
the sender retries with exponential back-off and rebuilds the connection from
scratch.
The wire format, message types, and ACK state machine are documented in detail in
KLARDROP_PROTOCOL.md.
Klardrop is built to feel like dropping a file across the room — and the security model is designed around that mental image: bytes only move between your devices after you've explicitly approved that they know each other, and they only ever travel directly between those two devices.
TrustedMessage envelope carrying an ECDSA signature, a
timestamp, and a random nonce. The receiver verifies the signature against the
pinned identity key, rejects stale timestamps, and rejects nonces it has already
seen — so tampered, replayed, or spoofed messages are dropped before they reach
the app.A note on transport encryption. Klardrop's threat model is "trusted devices on a network you control" and the current focus is authenticated integrity rather than confidential transport: messages between paired devices are signed and file chunks are MAC'd, but payloads themselves are not yet symmetrically encrypted on the wire. Adding an authenticated-encryption layer (AES-GCM / ChaCha20-Poly1305) keyed from the same ECDH secret is on the roadmap; until then, prefer running Klardrop on networks you trust (your home / work Wi-Fi, your hotspot, or BLE), rather than on shared open Wi-Fi.
If you find a security issue, please follow the private reporting instructions in
SECURITY.md rather than posting a public proof-of-concept.
Binaries are published to GitHub Releases on every tagged version.
| Platform | Format | Notes |
|---|---|---|
| macOS | .dmg | Unsigned during beta — run xattr -dr com.apple.quarantine /Applications/Klardrop.app after first launch if Gatekeeper blocks it |
| Windows | .msi | Unsigned during beta — SmartScreen will warn on first run |
| Linux | Script / AUR | Native GUI via install.sh (Qt desktop GUI by default, Omarchy shell integration on Omarchy; no JVM required); AUR klardrop-bin remains legacy JVM (JRE 21+) |
| Android | .apk | Sideload; Play Store internal-testing track planned |
| iOS | TestFlight | Public invite link forthcoming |
On Linux and macOS the native build is two binaries with two jobs, and they are never mixed:
| Command | What it is |
|---|---|
klardrop | Native CLI client — the one you type (klardrop send, klardrop status, …) |
klardrop-engine | The daemon, started by systemctl --user start klardrop.service (the klardrop.service user unit) |
The Linux install script puts both in ~/.local/bin, and the in-app self-updater
replaces the pair together — a CLI from one release is never left beside an engine
from another. The AUR packages follow the same split: klardrop-native-bin owns both
binaries and the systemd unit, klardrop-qt-bin depends on it and adds only the Qt
frontend, and klardrop-omarchy adds the shell integration.
The desktop app checks for updates on launch via the latest.json manifest published
alongside each release.
| Module | Purpose |
|---|---|
common/ | Shared business logic: discovery, transport, file management, trust, DI |
compose-ui/ | Shared Compose Multiplatform UI (Android + desktop JVM) |
control-plane/ | Shared authenticated loopback control API (devices, share, transfers, …) that every host serves: the Linux engine, the JVM desktop app and the native macOS app |
protos/ | Protocol Buffer definitions for the wire format and Nearby Share interop |
android/ | Android app + share extension |
iosApp/ | iOS app + share extension, and the native macOS app (Xcode targets iosApp and KlardropMac; the macOS app is presentation/src/macosMain + iosApp/iosApp/App/MacApp.swift, there is no separate macos/ module) |
desktop/ | JVM desktop app (Windows / Linux / macOS) |
cli/ | Kotlin/Native daemon engine, shipped as klardrop-engine (see cli/README.md) |
cli-rust/ | Native Rust CLI client, shipped as klardrop (see cli-rust/README.md) |
Requires JDK 21. For mobile / native targets you also need the platform toolchain (Xcode for iOS and macOS, the Android SDK for Android). Everything else — Kotlin, Compose, Ktor, jmDNS, dbus-java, the cryptography library, the protobuf generator — is pulled in by Gradle, so there's no separate setup step.
# Desktop (JVM) on the current host
./gradlew :desktop:run
# or, equivalently:
./run-desktop.command
# Android (install on a connected device or emulator)
./gradlew :android:installDebug
# Command-line client
./gradlew :cli:run --args="--help"
# macOS / iOS — open in Xcode
open iosApp/iosApp.xcworkspace
# Tests
./gradlew test
As a local dev aid, the Swift apps can be typechecked on Linux (CI's macOS job is the real Xcode build):
~/kn-ios (see ~/kn-ios/README.md), the Apple SDK bundle from omarchy-apple-dev at ~/.swiftpm/swift-sdks/darwin.artifactbundle, and swiftc on PATH.GRADLEW_IOS, DARWIN_SDK_BUNDLE, and KONAN_DIST.check.py uses the Kotlin/Native dist matching the kotlin version in gradle/dependencies.toml; after a Kotlin bump, if the build fails, the ~/kn-ios toolchain may need its dist/ redone for the new version (see its README).scripts/swift-check/bridge.sh ios|mac
python3 scripts/swift-check/check.py ios|mac
# Or run just the swift-export step:
scripts/swift-check/swx-run.sh
Klardrop is a personal project: the codebase is being tidied in the open. Issues and pull requests are welcome, especially:
Huge thanks to @grishka and his project
NearDrop. Klardrop's Nearby Share /
Quick Share support — and the ability to send to and receive from Android — is
only possible because grishka reverse-engineered Google's protocol and wrote it
up in PROTOCOL.md.
The Kotlin port that lives in this repo started as a translation of his Swift
implementation; the wire format, the UKEY2 handshake glue, the paired-key dance,
and the payload-layer framing all follow his lead. Thank you for the work and
for sharing it openly.
Apache License 2.0 © 2022–2026 Carlo Marinangeli.