DeepSeek Harness Remote
DeepSeek Harness Remote 可將手機或另一台電腦與你運行 DeepSeek Harness 的電腦安全連接,隨時隨地繼續你的工作,方便隨時查看進度並繼續工作。
AI 翻譯
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Keep the keyboard layout, dictation and clipboard in sync with the Mac you control through macOS Screen Sharing. Menu-bar app, notarized, encrypted.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗LangSync is a small menu-bar app for macOS. While you work in an Apple Screen Sharing window, it keeps the keyboard layout identical on the Mac you sit at and the Mac you control, makes ⌘Space switch instantly without eating the next keystroke, pastes text from dictation apps such as Superwhisper on the remote Mac, and delivers copied images to the remote clipboard. Outside Screen Sharing it does nothing.
Apple Screen Sharing is great until you type in more than one language:
v arrives instead of ⌘V.LangSync runs on both Macs. Screen Sharing keeps doing its job (screen, keyboard, mouse); LangSync adds a small side channel next to it.
flowchart LR
subgraph local["Mac you sit at (controls)"]
direction TB
input["Keyboard · Superwhisper · clipboard"]
lsA["LangSync"]
ss["Screen Sharing window"]
end
subgraph remote["Controlled Mac"]
direction TB
lsB["LangSync"]
apps["Apps on the remote Mac"]
end
input --> lsA
ss -->|"screen, keys, mouse (Apple Screen Sharing, unchanged)"| apps
lsA <-->|"layout · UDP 47811"| lsB
lsA -->|"dictated text, images · TCP 47812"| lsB
lsB -->|"real ⌘V"| apps
| What | How |
|---|---|
| Layout | LangSync sends the exact input source (say, Ukrainian – PC), not "switch to the next one". The other Mac selects the same source, or one for the same language. The Mac you sit at sends and applies changes only while Screen Sharing is in front; bringing the window to the front syncs it too. |
| ⌘Space | An event tap on the controlling Mac catches ⌘Space and the "Select the previous / next input source" shortcuts from System Settings → Keyboard → Keyboard Shortcuts → Input Sources, but only inside Screen Sharing. It switches locally at key-down; the remote follows through layout sync. |
| Dictation | LangSync takes over a ⌘V only when the clipboard changed a moment ago (≤ 0.3 s), Command is not physically held, and the focused Screen Sharing window shows a Mac in your list that runs LangSync. The text goes to that Mac, which puts it on its clipboard, presses ⌘V and restores the previous clipboard after 1 s. Keys pressed meanwhile (Return, for example) are held and replayed after the paste. If the remote doesn't answer or refuses, the ⌘V goes through Screen Sharing as before and takeover pauses for 30 s. |
| Images | Sent once when you enter the Screen Sharing window, if you copied an image (a screenshot, an image from a browser, an image file in Finder) since you last left it. Clipboard changes made inside Screen Sharing are ignored, so images don't loop with Screen Sharing's own sync. |
| Several Macs | Each Mac reports its names and addresses on request (refreshed every few minutes and remembered). LangSync matches them against the focused Screen Sharing window's title to decide where layout, ⌘Space and dictation go. |
Requirements: macOS 13 Ventura or later on every Mac, Apple Silicon or Intel, Apple's Screen Sharing app, and a network path from the Mac you sit at to the Mac you control (same LAN, or a VPN such as Tailscale).
On each Mac:
When it runs from /Applications, LangSync adds itself to the login items; switch that off in
the menu if you prefer.
To update, download the new DMG and replace the app. Settings and the key are kept (coming
from 1.5 or earlier, see Upgrading from 1.5 or earlier).
To uninstall, quit LangSync from its menu and delete /Applications/LangSync.app; optionally
remove ~/.config/langsync/, ~/Library/Logs/LangSyncApp.log and run
defaults delete com.nick.LangSync.
Note: the menu is in Ukrainian for now (see Contributing). The table below maps the items used in this guide.
| Menu item (Ukrainian) | Meaning |
|---|---|
| Цей Мак керує через Screen Sharing | This Mac controls (list of Macs) |
| Додати Мак… / Прибрати зі списку | Add Mac… / Remove from list |
| Цим Маком керують (приймати мову) | This Mac is controlled (accept layout) |
| Адреса: … | Address of this Mac |
| Диктовка і вставка з цього Мака (Superwhisper тощо) | Dictation and paste from this Mac |
| Передавати зображення при вході в Screen Sharing | Send images when entering Screen Sharing |
| Ключ: … (відбиток; однаковий на всіх Маках) | Key fingerprint (must be the same on all Macs) |
| ⚠︎ Створено новий ключ — скопіюйте його на інші Маки | New key created — copy it to your other Macs |
| Скопіювати ключ · Вставити ключ із буфера | Copy key · Paste key from clipboard |
| Запускати при вході · Відкрити журнал · Вийти з LangSync | Launch at login · Open log · Quit LangSync |
| ⚠︎ Дати доступ: … | ⚠︎ Grant access: … (opens the right System Settings pane) |
Version 1.6 speaks a new encrypted protocol (v3) that older versions don't understand, and it refuses keys from 1.5 and earlier, because those travelled over the network in clear text.
192.0.2.10 on the LAN or 100.64.0.10 on Tailscale. A host name such as office-mac.local
works as well.v2: followed by 64 hex characters; keys from
LangSync before 1.6 are not accepted. The menu never shows the key itself, only a
12-character fingerprint next to Ключ (for example 3f9c7a-21bd05) — it must be the same on
all Macs. The copied key is cleared from the clipboard after 60 seconds.A Mac can be in both roles at once: keep This Mac is controlled ticked and add the Macs it controls. Example:
flowchart LR
home["home-macbook<br/>controls office-mac"] -->|Screen Sharing| office["office-mac<br/>is controlled · controls server-mac"]
office -->|Screen Sharing| server["server-mac<br/>is controlled"]
| Mac | This Mac is controlled | Macs in its list |
|---|---|---|
| home-macbook | off | office-mac (100.64.0.10) |
| office-mac | on | server-mac (192.0.2.20) |
| server-mac | on | — |
| Mac | Permission | Used for |
|---|---|---|
| Controlling | Accessibility | Intercepting ⌘Space and the dictation ⌘V; reading Screen Sharing window titles when you control several Macs |
| Controlling | Input Monitoring | The keyboard event tap for the hotkey and paste interception |
| Controlled | Accessibility | Pressing ⌘V to paste dictated text |
| Both | Local Network (if macOS asks) | Talking to the other Mac |
Both are in System Settings → Privacy & Security. Layout sync itself works without Accessibility and Input Monitoring; without them the keystroke right after ⌘Space can still get lost, and dictation falls back to Screen Sharing's own paste.
If a permission toggle looks on but LangSync still reports it missing (this can happen after switching from a differently signed build), remove LangSync from the list with − and add it again. Updates between official releases keep the permissions.
LangSync can make the controlled Mac paste text and press ⌘V, so it is worth being precise about what protects it and what doesn't. This describes version 1.6 and later.
The key
v2: followed by 64 hex characters (256 random bits). LangSync
creates it on first launch in ~/.config/langsync/token (file mode 0600); the
LANGSYNC_TOKEN environment variable, if set, takes precedence. The key itself never travels
over the network.On the wire
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, link-local 169.254.0.0/16 and
100.64.0.0/10 (which includes Tailscale), and on IPv6 ::1, fe80::/10 and fc00::/7. It
allows at most 4 connections per address (per /64 on IPv6) and 16 in total, and drops a
connection that hasn't sent an authentic header within 2 seconds. Controlling Macs connect over
IPv4.What is not protected
Recommendations
~/.config/langsync/token, open LangSync again (it creates a new random key), then
Copy key there and Paste key from clipboard on every other Mac. Check that the
fingerprints match.Found a vulnerability? Please report it privately through GitHub's security advisories instead of a public issue. If that isn't available, open an issue asking for a contact, without details.
The log is at ~/Library/Logs/LangSyncApp.log (menu → Open log, Відкрити журнал). To write
the current menu state into it — handy over SSH — run:
pkill -USR1 -f LangSync.app/Contents/MacOS/LangSync
tail -40 ~/Library/Logs/LangSyncApp.log
| Log line | What it means |
|---|---|
working on <name> (<address>) | The focused Screen Sharing window was recognised as a Mac in your list. If it never appears, the window title doesn't match: add the Mac by the address you use in Screen Sharing, or grant Accessibility (needed with several remotes). |
remote <address> is known as: <names> | That Mac answered and reported its names — network path and key are fine. |
event tap refused (accessibility false, input monitoring false); hotkeys pass through to remote | Accessibility / Input Monitoring are missing on the controlling Mac. LangSync retries every 5 s after you grant them. If the toggles already look on, remove LangSync with − and add it again. |
pasted on remote: text N chars in 0.0x s | Dictation worked. The remote logs clipboard text received: N chars. |
remote stored … but can't paste (grant it Accessibility) | Give the controlled Mac Accessibility. |
dictation ⌘V left to Screen Sharing: … | The focused Screen Sharing window isn't a Mac LangSync controls, so the ⌘V went through Screen Sharing. Check the window and the working on line. |
remote didn't take the paste (…); forwarding ⌘V, leaving dictation ⌘V alone for 30 s | The remote didn't answer or refused; LangSync fell back to Screen Sharing for 30 s. |
rejected N … message(s): wrong key, clocks more than 2 min apart, a replay, or not from a local network | The Macs have different keys (compare the fingerprints in the menu), one of them still runs 1.5 or earlier, a clock is more than 2 minutes off (layout messages only), or the sender's address isn't on a local network or VPN range. Update every Mac, copy the key again, turn on automatic time. |
the old key (sent in clear text before 1.6) was replaced; copy the new one to the other Macs | This Mac had a key from 1.5 or earlier and made a new one. Copy it to the other Macs — see Upgrading from 1.5 or earlier. |
send failed (startup): No route to host | Right after launch macOS checks Local Network access; LangSync retries by itself. If it persists, allow LangSync in . |
The menu also warns when port 47811 or 47812 is taken by another app.
You need the Xcode command line tools (xcode-select --install). There is no Xcode project;
build.sh compiles with swiftc.
git clone https://github.com/developerscompany/langsync.git
cd langsync
LANGSYNC_LOCAL=1 ./build.sh # local build, no Apple Developer account needed
open build/LangSync.app
A local build produces build/LangSync.app, build/LangSync-<version>-local.dmg and the
command-line ./langsync. It is signed with your Apple Development identity if you have one,
ad hoc otherwise, so Gatekeeper blocks it on other Macs, and ad-hoc builds may need the
permissions granted again after each rebuild.
Distribution build — what the Releases are made with:
xcrun notarytool store-credentials langsync-notary --apple-id <apple-id> --team-id <TEAM_ID>
LANGSYNC_TEAM_ID=<TEAM_ID> ./build.sh
It needs a Developer ID Application certificate in the login keychain and the notarytool
keychain profile above (LANGSYNC_NOTARY_PROFILE picks another profile name). It builds a
universal binary (arm64 + x86_64), signs with the hardened runtime, notarizes and staples both
the app and the DMG, and checks them with Gatekeeper. If the certificate or profile is missing,
it stops with an error instead of producing an un-notarized build. The version is ver= in
build.sh.
./deploy.sh <ssh-host> installs the newest build/LangSync-*.dmg on another Mac over SSH
(./deploy.sh local on this one): it checks Gatekeeper on a quarantined copy first, replaces
/Applications/LangSync.app keeping its settings, restarts it and prints the log and menu.
Sources/Core.swift core: layouts, layout sync, hotkey event tap, clipboard, wire protocol
Sources/app/main.swift the menu-bar app (LangSync.app), including its UI strings
Sources/cli/main.swift legacy command-line agent (langsync send <host> | recv | list | current)
Tests/wire/main.swift wire-protocol tests: crypto checks and a local clipboard round trip
test.sh builds and runs those tests
build.sh build, sign with Developer ID, notarize, staple, make the DMG
deploy.sh install the latest DMG on a Mac over SSH, keeping its settings
install.sh legacy installer of the command-line agent as a LaunchAgent
make-icon.swift draws the app icon
Як встановити.txt short install guide placed inside the DMG (Ukrainian)
docs/ landing page (GitHub Pages)
Does it work over Tailscale?
Yes. Add the controlled Mac by its Tailscale address (e.g. 100.64.0.10) or MagicDNS name;
Tailscale's 100.64.0.0/10 range counts as a local network. If you use Tailscale ACLs, allow
47811/udp and 47812/tcp to that Mac.
Can I use it over the Internet without a VPN? No. The controlled Mac accepts connections only from local network and VPN addresses, so it won't answer a public address even if the ports are forwarded. Use a VPN such as Tailscale.
How do I check that the Macs have the same key?
Compare the 12-character fingerprint next to Ключ in the menu; it must be the same on every
Mac. Pasting a key also shows its fingerprint. The fingerprint is safe to show — the key can't be
recovered from it. A key itself looks like v2: followed by 64 hex characters.
I updated from 1.5 and the Macs stopped talking to each other. That's expected: 1.6 uses a new protocol and refuses old keys. Update every Mac, then copy the new key from one Mac to the others — see Upgrading from 1.5 or earlier.
Does the controlled Mac accept pastes when nobody is connected through Screen Sharing? Yes. While This Mac is controlled is on, it pastes for anyone on a local network who has the key. Keep the key private, and turn the option off on Macs you don't need to control.
Does it work with Screen Sharing started through an Apple ID, without a network path between the Macs? No. LangSync talks to the other Mac directly, so the controlled Mac must be reachable from the controlling one — on the same LAN or through a VPN. Screen Sharing sessions relayed by Apple alone don't give LangSync a path.
Does it change or patch Screen Sharing? No. Screen Sharing is untouched. LangSync watches which app and window are in front, reads the window title, and intercepts only ⌘Space, the input-source shortcuts and the dictation ⌘V while a Screen Sharing window to one of your Macs is focused. Everything else goes through Screen Sharing as usual.
Does it work with other remote-desktop apps? No, only with Apple's Screen Sharing.
Do I need it on both Macs? Yes — on the Mac you sit at and on every Mac you control.
Does it send my clipboard all the time? No. Text is sent only for a dictation-style ⌘V inside a Screen Sharing window; images only when you enter that window and only if you copied one since you left it. An ordinary ⌘V uses Screen Sharing's own clipboard sync, so copies made on the remote keep their formatting.
Which dictation apps work? Superwhisper, and any tool that puts the text on the clipboard and immediately sends ⌘V.
The Macs have different layouts installed. If the exact layout is missing on the other Mac, LangSync picks one for the same language.
Issues and pull requests are welcome.
Sources/app/main.swift.
An English UI (and a proper localization setup) would be a great first contribution.build.sh.LANGSYNC_LOCAL=1 ./build.sh succeeds, run ./test.sh
(it uses TCP port 47812, so turn off This Mac is controlled on that Mac first) and test with
two Macs.~/Library/Logs/LangSyncApp.log. The log contains addresses and computer names — redact them
if you like. Never post your key (the fingerprint is fine).MIT © 2026 Nick Lishchenko.
LangSync is not affiliated with or endorsed by Apple. macOS and Screen Sharing are trademarks of Apple Inc.; Superwhisper is a trademark of its owner.
no input source matching <id> / <language> | The other Mac has no layout for that language. Add it in System Settings → Keyboard → Input Sources. |
peer is on <id>; ignored, Screen Sharing not frontmost | Expected: changes from the remote are applied only while you work in its window. |