Skip to content

Commit e924fac

Browse files
author
itsdodobitch
committed
Prepare repo for public release
1 parent e0d41da commit e924fac

89 files changed

Lines changed: 34181 additions & 319 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,10 @@ DerivedData/
1515
.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
1616
.netrc
1717
.docs
18+
.env
19+
.env.*
20+
*.pem
21+
*.key
22+
*.p12
23+
*.cer
24+
*.crt

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2026 itsdodobitch
3+
Copyright (c) 2026 Hermes Desktop contributors
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

Package.resolved

Lines changed: 0 additions & 24 deletions
This file was deleted.

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ let package = Package(
1515
)
1616
],
1717
dependencies: [
18-
.package(url: "https://github.com/migueldeicaza/SwiftTerm.git", from: "1.0.0")
18+
.package(path: "Vendor/SwiftTerm")
1919
],
2020
targets: [
2121
.executableTarget(

README.md

Lines changed: 51 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@ Native macOS app for Hermes over SSH.
55
Hermes Desktop gives you the parts of Hermes that matter most on a Mac:
66
sessions, memories, and a real terminal. In one clean place.
77

8-
<img width="1301" height="802" alt="Screenshot 2026-04-09 alle 14 04 22" src="https://github.com/user-attachments/assets/42c91c5f-51f4-4c6d-b43b-61948ec552c1" />
9-
10-
118
It stays deliberately simple:
129

1310
- connects directly over SSH
@@ -41,13 +38,15 @@ Works with:
4138

4239
You need only a few things:
4340

41+
- an Apple Silicon Mac for the current public release build
4442
- macOS 14 or newer
45-
- SSH access that already works from Terminal
43+
- SSH access that already works from Terminal without password prompts
44+
- the SSH host key already accepted once in Terminal for that target
4645
- `python3` available on the Hermes host
4746
- Hermes data under the remote user's `~/.hermes`
4847

4948
Simple rule:
50-
if this works in Terminal, the app is usually ready to work too:
49+
if this works in Terminal without asking for a password, the app is usually ready to work too:
5150

5251
```bash
5352
ssh your-host
@@ -60,12 +59,15 @@ ssh your-host
6059
3. Drag `HermesDesktop.app` into `Applications`.
6160
4. Open it.
6261

62+
The current public build is Apple Silicon only and not notarized yet.
63+
6364
If macOS blocks the first launch, right click the app and choose `Open` once.
65+
If needed, use `Privacy & Security` -> `Open Anyway`.
6466

6567
## Connect Your Hermes Host
6668

6769
Open the app, go to `Connections`, create a profile, then click `Test` and
68-
`Connect`.
70+
`Use Host`.
6971

7072
You have two valid ways to fill the connection:
7173

@@ -128,10 +130,10 @@ Hermes Desktop still connects over SSH and never reads those files directly.
128130
It checks that:
129131

130132
- the SSH target is reachable
131-
- authentication works
133+
- authentication works without interactive prompts
132134
- `python3` is available in the remote SSH environment used by the app
133135

134-
If `Test` passes, `Connect` should be on solid ground.
136+
If `Test` passes, `Use Host` should be on solid ground.
135137

136138
## What You Will See In The App
137139

@@ -153,6 +155,40 @@ Hermes Desktop keeps that direct path visible and usable: real SSH, real
153155
terminal, real remote files. It does not try to hide Hermes behind a separate
154156
gateway layer or turn it into something else.
155157

158+
## FAQ
159+
160+
### Why can't I browse every file the agent creates on the host?
161+
162+
On purpose. Hermes Desktop is not trying to become a remote file manager or a
163+
full remote IDE. We wanted the app to stay focused on the Hermes flow that
164+
matters most on Mac: sessions, memories, and terminal work.
165+
166+
If you need full filesystem access, there are already better tools for it:
167+
your normal SSH shell, SFTP apps, or remote editors. Keeping the in-app file
168+
surface narrow also avoids encouraging people to casually open arbitrary
169+
agent-generated files they have not reviewed yet. It is a product choice first,
170+
and a safer default second, not a hard security boundary.
171+
172+
### Why do I still need SSH working in Terminal first?
173+
174+
Because the app does not replace SSH. It depends on the same connection path
175+
your Mac already uses. If Terminal still needs passwords, host key
176+
confirmation, or other interactive fixes, the app will usually hit the same
177+
wall.
178+
179+
### Why doesn't the app mirror Hermes files onto my Mac?
180+
181+
Because the remote Hermes host stays the source of truth. Once the app starts
182+
caching or syncing copies locally, you introduce stale state, conflict
183+
handling, and harder-to-explain behavior. The current design keeps reads and
184+
edits attached to the real remote files.
185+
186+
### Why are sessions read from `~/.hermes/state.db` first?
187+
188+
Because that is the canonical Hermes session store. Reading it gives the app
189+
the same view Hermes itself uses. `~/.hermes/sessions/*.jsonl` exists as a
190+
fallback only when the SQLite store is not available.
191+
156192
## Roadmap
157193

158194
This is the current direction for the next waves of work:
@@ -167,13 +203,16 @@ This is the current direction for the next waves of work:
167203

168204
## Build From Source
169205

170-
For local development:
206+
For local development, the supported path in this repo is to build the app
207+
bundle directly:
171208

172209
```bash
173-
swift run HermesDesktop
210+
./scripts/build-macos-app.sh
174211
```
175212

176-
To build the Mac app bundle:
213+
Then open `dist/HermesDesktop.app`.
214+
215+
To create the Mac app bundle again:
177216

178217
```bash
179218
./scripts/build-macos-app.sh
@@ -187,4 +226,4 @@ To create the GitHub Releases archive:
187226

188227
Release artifact:
189228

190-
- `dist/HermesDesktop.app.zip`
229+
- `dist/HermesDesktop.app.zip` for Apple Silicon Macs

Sources/HermesDesktop/App/AppState.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,6 @@ final class AppState: ObservableObject {
183183
isBusy = true
184184
overviewError = nil
185185
overview = try await remoteHermesService.discover(connection: profile)
186-
setStatusMessage("Discovery refreshed")
187186
isBusy = false
188187
} catch {
189188
isBusy = false

0 commit comments

Comments
 (0)