DeepSeek Harness Remote
DeepSeek Harness Remote 可将手机或另一台电脑与你运行 DeepSeek Harness 的电脑安全连接,随时随地继续你的工作,方便随时查看进度并继续工作。
AI 翻译
Moshe: my writing app over a folder of plain Markdown files. Self-hosted, with Mac and Android apps you build yourself.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗I like writing apps that work a certain way: the library on the left, the sheets in the middle, a plain editor where the Markdown stays visible but greyed out, goals that fill up as I write. The trouble is where they keep the writing. Most keep the texts in a library of their own, which only that app opens, often only on Apple devices, and my phone is Android and all my other notes live in Obsidian.
So I built Moshe. The difference is underneath: the library is a folder of Markdown files. Groups are folders and sheets are .md files, which means Obsidian, Syncthing or any text editor can read and change them, and nothing Moshe knows about my writing lives anywhere else.
I also wanted translation in the same place. Moshe has a translation mode: the original and the translation side by side, paragraph beside paragraph, with Hebrew running right to left. Basically, instead of a writing app on one side and a translation tool on the other, I have ONE app where I write, translate and edit, and the files are always mine.
::, ++, ||, (fn), (tbl)) typed as you go become the Markdown that Obsidian reads, or CriticMarkup where Markdown has nothing.==mark==, comments are %%comment%%, footnotes are ^[inline], and the rest is CriticMarkup. A sheet's keywords and goal sit in its front matter, and a folder's order and colours in a small .moshe.json beside it.Translation mode: the Hebrew original beside the English, paragraph beside paragraph, with a note on "firmament".
The dashboard: the goal ring, keywords, the outline, the footnotes and the notes attached to the sheet.
Export: a whole project as a PDF in the Essay style, with the preview as it will print.
Three of Moshe's own themes: Classic, Solarized in the dark, and Blue Pencil.
Translation mode in the dark.
A project's statistics, with an "every day" goal and the words written each day.
Revision mode: annotations, comments and highlighted text, listed in the dashboard.
Glued sheets: two sheets that read as one text in the editor.
A filter that gathers every sheet with the keyword Draft.
Focus mode, with the current paragraph bright and the rest faded.
Grammar as you type: a click on the underline shows what's wrong and the fix.
Open Quickly (⌘O): every sheet with "frost" in it.
Settings › Markup: each tag's colours, light and dark, and the themes.
A new project, from the Translation template.
Browse Backups: any sheet as it was, with Restore a Copy.
Moshe is a hobby project that I built for my own writing, so please treat it like one. It's been careful with my files so far, and the server keeps backups, but your writing is worth more than any app. Try it on a COPY of your folder first, keep the folder in a backup of your own, and if something looks wrong, stop and let me know.
Moshe is a web app first: open your server's address in any browser and sign in with the password. In Safari on the Mac, File › Add to Dock makes it an app of its own, and on a phone, Add to Home Screen does the same. The full steps are in Install.
brew install --cask franz-rosenzweig/tap/moshe installs it, and brew upgrade keeps it up to date. Each release is also a zip on the Releases page. To build it yourself instead, build the web app, then mac/build.sh makes Moshe.app in about ten seconds. It needs macOS 14, the Command Line Tools, XcodeGen and Node. See The Mac app and mac/README.md.
Each release has a signed APK on the Releases page, and Obtainium pointed at this repository installs it and keeps it up to date. To build it yourself instead, build the web app, then android/release.sh makes a signed APK with your own key (or ./gradlew assembleDebug a test build), which you install with adb install. It needs JDK 17, the Android SDK and Node. Out of the box both apps point at my own server when you choose the server, so type your own server's address there. See The Android app and android/README.md.
The server is one Docker container with no dependencies beyond Node. Point it at the folder that holds your library, set a password, and you're done. See Your own server.
The docs explain every part of Moshe the way I'd explain it sitting next to you.
Start with Getting started.
engine/, which runs the same in the page, in Node and in the native apps..moshe.json in each folder, and no database. Syncthing or the built-in WebDAV sync carries it between devices.frontend/public/hwr), which reads English handwriting, with the reader for it from FineNotes, GPL-3.0-or-later.Copyright © 2026 the Moshe authors.
Moshe is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version (GPL-3.0-or-later). It comes with no warranty of any kind, as sections 15 and 16 of the LICENSE say.
Basically, you can use it, change it, and pass it on, as long as what you pass on stays under the same license and comes with its source. The Hebrew dictionary inside it is under the AGPL-3.0, which section 13 of the GPL allows alongside it, and everything else it's built on is listed under Credits, each under its own license.
One exception, for the Android app. The Android app reads Hebrew handwriting with Google's ML Kit, which isn't free software. So, as an additional permission under section 7 of the GNU GPL version 3, the copyright holders of Moshe give you permission to combine Moshe's Android app with Google's ML Kit Digital Ink Recognition library (com.google.mlkit:digital-ink-recognition) and to convey the result. The GPL still applies to all of Moshe's own code, and the permission covers nothing else. If you change Moshe, you may keep this permission for your version or drop it; to leave the library out, remove it from android/app/build.gradle along with InkReader.java.