{"id":50316436,"url":"https://github.com/msitarzewski/glas.sh","last_synced_at":"2026-05-29T00:03:17.730Z","repository":{"id":337122157,"uuid":"1052838223","full_name":"msitarzewski/glas.sh","owner":"msitarzewski","description":"glas.sh brings native terminal experiences to visionOS through multiple floating \"glass-style\" terminal windows, each connected to remote Linux hosts. ","archived":false,"fork":false,"pushed_at":"2026-05-17T05:20:03.000Z","size":1327,"stargazers_count":23,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-17T05:33:55.894Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/msitarzewski.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-09-08T16:07:33.000Z","updated_at":"2026-05-03T20:35:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/msitarzewski/glas.sh","commit_stats":null,"previous_names":["msitarzewski/glas.sh"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/msitarzewski/glas.sh","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msitarzewski%2Fglas.sh","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msitarzewski%2Fglas.sh/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msitarzewski%2Fglas.sh/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msitarzewski%2Fglas.sh/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/msitarzewski","download_url":"https://codeload.github.com/msitarzewski/glas.sh/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msitarzewski%2Fglas.sh/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33631002,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-28T02:00:06.440Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-29T00:03:17.000Z","updated_at":"2026-05-29T00:03:17.718Z","avatar_url":"https://github.com/msitarzewski.png","language":"Swift","funding_links":["https://github.com/sponsors/msitarzewski"],"categories":[],"sub_categories":[],"readme":"# glas.sh\n\n**The SSH terminal that Apple Vision Pro deserves.**\n\nA native visionOS terminal built from scratch for spatial computing. Float terminal windows in your space. AI runs privately on your device. Connect to your entire Tailscale network with one tap. Record sessions and get AI summaries. No cloud. No subscriptions. No compromises.\n\n**[glas.sh](https://glas.sh)** \u0026nbsp;|\u0026nbsp; **[GitHub Sponsors](https://github.com/sponsors/msitarzewski)** \u0026nbsp;|\u0026nbsp; **MIT Licensed**\n\n---\n\n\u003cp align=\"center\"\u003e\n\u003cem\u003eIf glas.sh saves you time or brings you joy, consider \u003ca href=\"https://github.com/sponsors/msitarzewski\"\u003esponsoring the project\u003c/a\u003e.\u003c/em\u003e\n\u003c/p\u003e\n\n---\n\n## Why glas.sh\n\nEvery other SSH client on visionOS is a port from iPad. glas.sh is purpose-built for spatial computing — designed for eye-and-hand interaction, glass-first UI, and features that only make sense when your terminal floats in 3D space.\n\n| | glas.sh | La Terminal | Prompt 3 | Termius |\n|---|:---:|:---:|:---:|:---:|\n| **Native visionOS** | **Yes** | Yes | No | No |\n| **On-device AI** | **Foundation Models** | Cloud API | No | No |\n| **Tailscale auto-discovery** | **Yes** | No | No | No |\n| **Immersive focus mode** | **Yes** | No | No | No |\n| **SharePlay terminal sharing** | **Yes** | No | No | No |\n| **Session recording + AI summary** | **Yes** | No | No | No |\n| **Spatial widgets** | **Yes** | No | No | No |\n| **SFTP with batch ops + search** | **Yes** | Basic | No | Yes |\n| **Remote + SOCKS forwarding** | **Yes** | No | No | Yes |\n| **Multi-hop jump hosts** | **Yes** | No | No | Yes |\n| **True Secure Enclave signing** | **Yes** | No | No | No |\n| **Open source** | **MIT** | No | No | No |\n\n---\n\n## Features\n\n### Terminal\n\nFull PTY interactive sessions with ANSI/truecolor rendering via SwiftTerm. Dynamic resize, cursor styles, visual + audio bell, in-terminal search, and command snippets with usage tracking. Per-session window overrides for opacity, glass material density, and color tint. Keyboard stays active — a focus maintenance system prevents visionOS from silently dropping input after idle.\n\n### AI — Private, On-Device\n\nPowered by Apple's Foundation Models framework. Everything runs on your Vision Pro. Nothing leaves your device.\n\n- **Command Assistant** — describe what you want in plain English, get a shell command with risk assessment (safe / moderate / destructive)\n- **Error Explainer** — automatically detects errors in terminal output and shows a floating card with diagnosis + suggested fix\n- **Session Summary** — AI-generated highlights of recorded terminal sessions\n\n### Tailscale Integration\n\nConnect your entire Tailscale network. Enter your API key or OAuth credentials once, and glas.sh discovers every device on your tailnet. Tap a device, enter SSH credentials, and you're in. Mobile devices (iOS, iPadOS, Android) are automatically filtered out.\n\n### Connections\n\nServer management with favorites, tags, search, and recent connections. Quick connect bar parses `user@host:port` on the fly. Host key verification with fingerprint display. Layout presets save and restore multi-server window arrangements — open your entire production stack with one tap.\n\n### Port Forwarding\n\n- **Local (-L)** — bind a local port, tunnel through SSH to a remote target\n- **Remote (-R)** — server listens on a remote port, forwards back through the tunnel\n- **Dynamic/SOCKS (-D)** — full SOCKS5 proxy with IPv4, domain name, and IPv6 address support\n\n### Jump Hosts\n\nSingle-hop or multi-hop chains. Configure A → B → C with a reorderable hop list. Cycle detection prevents infinite loops. Backward compatible with single-hop configurations.\n\n### SFTP File Browser\n\nFull directory browsing with breadcrumb navigation. Tap files to select, batch download or delete, pick your destination folder first then stream with progress. File info sheet shows permissions, uid/gid, timestamps, and raw listing. Show/hide hidden files. Client-side filter for the current directory, or press Return to run `find` on the server via SSH for deep recursive search.\n\n### Security\n\n- **True Secure Enclave signing** — P-256 keys generated inside the hardware chip. The private key never exists in memory. Signing happens in silicon.\n- **Optic ID** authentication before Secure Enclave key use\n- **Keychain** storage with shared access group for cross-app credential sharing\n- **Host key trust** with per-server fingerprint tracking\n- RSA SHA-2, Ed25519, and legacy wrapped SE key support\n\n### Spatial Features\n\n- **Immersive Focus Mode** — dims the passthrough for distraction-free terminal work. Digital Crown controls depth.\n- **Spatial Widgets** — server health widget (small + medium sizes) with tap-to-connect deep links via `glassh://` URL scheme\n- **SharePlay** — share your terminal session over FaceTime. Participant tracking with count badge.\n- **Notification Overlays** — in-window banners for connection events. Auto-dismiss after 4 seconds, max 3 visible.\n- **Glass Material** — choose from ultraThin, thin, regular, or thick material density. Per-session overrides.\n- **Color Tint** — preset swatches + full color picker for window tinting\n\n### Session Recording\n\nAsciicast v2 format (NDJSON) — compatible with [asciinema](https://asciinema.org). Records terminal input and output with timestamps. Typically 50KB–5MB per hour of session time. AI-powered session summaries via Foundation Models. Auto-record option in settings.\n\n### Auto-Reconnect\n\nExponential backoff (1s → 2s → 4s → 8s → 16s, up to 5 attempts). Cancel button in the connection label ornament. Keepalive timer with failure-based timeout detection — no more false disconnects from idle sessions.\n\n---\n\n## Architecture\n\n```\nglas.sh/                          Native visionOS 26 app\n├── Models.swift                  SSH sessions, connections, server config\n├── TerminalWindowView.swift      Terminal UI with glass ornaments\n├── ConnectionManagerView.swift   Server list, Tailscale, layouts\n├── AIAssistant.swift             Foundation Models (command, error, summary)\n├── SessionRecorder.swift         Asciicast v2 recording engine\n├── TailscaleClient.swift         Tailscale REST API v2 + OAuth\n├── SharePlayManager.swift        GroupActivity terminal sharing\n├── FocusEnvironmentView.swift    Immersive focus environment\n├── NotificationOverlay.swift     In-window notification banners\n├── SFTPBrowserView.swift         File browser with batch operations\n├── PortForwardManager.swift      Local / Remote / Dynamic (SOCKS5) tunnels\n├── SettingsManager.swift         App settings persistence\n├── ServerManager.swift           Server CRUD + shared App Group defaults\n├── SessionManager.swift          Session lifecycle management\n├── KeychainManager.swift         Secure credential storage\n└── TerminalAudioManager.swift    Terminal bell audio\n\nglasWidgets/                      WidgetKit extension\n├── ServerHealthWidget.swift      Timeline provider + widget views\n└── glasWidgets.swift             Widget bundle entry point\n\nPackages/\n├── RealityKitContent/            SwiftTerm host wrapper + terminal helpers\n├── Citadel/                      Vendored SSH client library\n└── swift-nio-ssh/                Vendored NIO SSH (patched for compatibility)\n```\n\n### Terminal Stack\n\n| Layer | Technology |\n|-------|-----------|\n| SSH protocol | Citadel + vendored swift-nio-ssh |\n| Terminal rendering | SwiftTerm `TerminalView` via `UIViewRepresentable` |\n| Input path | SwiftTerm delegate → raw bytes → SSH channel |\n| Output path | SSH channel → buffered chunks → SwiftTerm `feed(byteArray:)` |\n| Resize | SwiftTerm callback → `TerminalSession` → remote PTY resize |\n| AI | Foundation Models (`LanguageModelSession`, `@Generable` structs) |\n\n---\n\n## Requirements\n\n- **Xcode 26 beta** (Foundation Models + WidgetKit visionOS 26 APIs)\n- **visionOS 26 SDK**\n- **Apple Vision Pro** for Secure Enclave and on-device AI features\n\n## Build \u0026 Run\n\n```bash\ngit clone https://github.com/msitarzewski/glas.sh.git\ncd glas.sh\nopen glas.sh.xcodeproj\n\n# Select scheme: glas.sh (not glasWidgets)\n# Select destination: Apple Vision Pro\n# Build and run (⌘R)\n```\n\n## Project Site\n\n**[glas.sh](https://glas.sh)** — lightweight project site via GitHub Pages (`docs/`).\n\n---\n\n## Support the Project\n\nglas.sh is free, open source, and built by one person. If it's useful to you:\n\n- **[Sponsor on GitHub](https://github.com/sponsors/msitarzewski)** — recurring or one-time\n- **Star the repo** — helps with visibility\n- **File issues** — bug reports and feature requests are welcome\n- **Contribute** — PRs are open\n\n---\n\n## Known Limitations\n\n- SSH Agent auth path is present in UI but not yet wired to agent-based authentication\n- visionOS does not provide an API to spatialize short audio effects per-window — bell sound plays globally\n- visionOS does not provide an API for custom passthrough blur — only system Materials\n- Secure Enclave keys are device-bound and cannot be transferred to another device\n- SharePlay viewer mode is currently read-only (no remote input yet)\n- `SecureEnclave.isAvailable` returns false in the visionOS Simulator\n\n## License\n\nMIT License. Copyright 2026 Michael Sitarzewski.\n\n---\n\n\u003cp align=\"center\"\u003e\nBuilt with care for Apple Vision Pro.\u003cbr\u003e\nBuilt with \u003cstrong\u003e\u003ca href=\"https://github.com/msitarzewski/agency-agents\"\u003eAgency Agents\u003c/a\u003e\u003c/strong\u003e.\u003cbr\u003e\u003cbr\u003e\n\u003cstrong\u003e\u003ca href=\"https://github.com/sponsors/msitarzewski\"\u003eSponsor\u003c/a\u003e\u003c/strong\u003e \u0026nbsp;·\u0026nbsp; \u003cstrong\u003e\u003ca href=\"https://glas.sh\"\u003eWebsite\u003c/a\u003e\u003c/strong\u003e \u0026nbsp;·\u0026nbsp; \u003cstrong\u003e\u003ca href=\"https://github.com/msitarzewski/glas.sh/issues\"\u003eIssues\u003c/a\u003e\u003c/strong\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmsitarzewski%2Fglas.sh","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmsitarzewski%2Fglas.sh","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmsitarzewski%2Fglas.sh/lists"}