English | 中文
RemoteConn
RemoteConn is a production-oriented remote access workspace built around shell + chat. It targets Web, mobile app, and Mini Program entry points, so AI-assisted server work can start from a phone and stay attached to the right project context.
The project focuses on three practical problems:
- Keep an AI-capable shell available on mobile, not only on desktop IDEs.
- Use voice input to reduce typing cost on phones.
- Preserve task context, records, and server bindings so long-running work can continue without handoff friction.
Monorepo Structure
apps/web: Vue 3 + TypeScript + xterm.js frontendapps/gateway: Node.js gateway forWSS -> SSHpackages/shared: shared models, state machines, Codex orchestration, theme and security helperspackages/plugin-runtime: plugin runtime with validation, permission control, lifecycle hooks, isolation, and circuit breakingios/plugin/RemoteConnSSHPlugin: Capacitor iOS SSH plugin skeleton
Implemented Capabilities
- Server and credential management with restricted local storage
- Terminal session state machine for connect, reconnect, auth pending, and error states
- Bidirectional gateway forwarding for
init/stdin/stdout/stderr/resize/control - Codex launch orchestration with remote environment checks
- Session logging and redacted export
- Theme system with contrast tuning
- Plugin runtime foundation
Latest Status
Current README baseline: v3.0.1 on 2026-03-20.
Recent milestones:
v3.0.1: Mini Program manual was expanded with image-based guidance, theme presets were aligned with Web to21sets, and the project docs were synchronized.v3.0.0: Terminal interaction stability was improved during Codex output, including caret stability and keyboard-focus handling.- Cross-device sync currently covers
settings,servers, andrecords. Sensitive server fields remain encrypted assecret_blob.
Known limitations still tracked in the project docs:
- Some Mini Program terminal performance issues can still appear during long AI output sessions.
- Voice playback extraction and turn detection are not yet considered stable enough for default use.
For the full Chinese product narrative and detailed historical notes, see README_cn.md, CHANGELOG.md, and release.md.
Operation Guide
This guide reuses the five annotated screenshots from the project introduction and keeps the same visual grouping so the main workflow can be understood directly from the README.
For the narrow vertical mobile layout version, see Mobile Operation Guide.
1. Server List And Configuration
- The home page opens on the server list, which is the starting point of the product.
- The top toolbar is used to add, delete, select, and search servers.
- The main body of each server card opens the configuration page; the quick actions on the right can duplicate a profile, launch AI, or connect directly.
- The bottom navigation switches between terminal, logs, records, settings, and about pages.
- The configuration page is where you fill in the basic connection fields, authentication method, and project directory.
AI Working Directorydefines the default project context for AI startup and is a key part of the collaboration flow.- If the target host is reached through a jump host, complete the jump-host fields and its separate authentication settings on the same page.
- The recommended order is to save the profile first and then start the connection.
2. Terminal, AI, And Connection Diagnostics
- After entering the terminal, you can run shell commands directly or switch to an AI workflow such as
Codexfrom the top-left entry. - The top status bar continuously shows connection state, latency, and session overview, making it the primary feedback area for mobile troubleshooting.
- Tapping
Connectedopens the session detail panel with the target host, connection state, and working directory. - Tapping
Latencyopens the diagnostics panel so you can inspect gateway response and network latency trends and judge link quality.
3. Voice Input And Shortcut Panel
- The
voicebutton at the bottom of the terminal page opens the voice input panel, supporting a "speak first, decide later" input flow. - The voice draft can be sent to the terminal directly or saved as a record together with category tags.
- The
keyboardbutton at the bottom opens the shortcut panel to restore terminal control keys that are missing on mobile. - The right-side shortcut panel includes arrow keys,
Esc,Ctrl+C,Tab, and other high-frequency controls to reduce input friction on phones.
4. Settings Center
- The settings page is grouped into
UI / Terminal / Connection / Records, covering appearance, terminal behavior, connection policy, and data management. - The UI tab controls theme, colors, and language, which shape the overall experience.
- The terminal tab controls font family, font size, line height, and terminal palette, directly affecting readability and typing efficiency.
- The connection tab controls default authentication, reconnect strategy, background keepalive, sync switches, and AI defaults.
- The records tab controls record retention and category management so the information lifecycle stays structured.
5. Records And About
- The records page is used to capture issues, ideas, TODOs, and context fragments.
- The top area supports search and category filtering so content can be found quickly.
- Record cards support actions such as copy, mark, and delete.
- The bottom area provides pagination, add, and export operations.
- The about page centralizes the brand, version, and product information entry points.
- It collects the user guide, feedback channel, privacy policy, change log, and about content in one place.
- Its role is to act as the final landing page for product documentation inside the app, so users can find a consistent explanation without leaving the product.
Quick Start
npm install
npm run dev:gateway
npm run dev:web
Default endpoints:
- Web:
http://localhost:5173 - Gateway:
http://localhost:8787 - Gateway WS:
ws://localhost:8787/ws/terminal
Environment Variables
Gateway
cp apps/gateway/.env.example apps/gateway/.env
Recommended runtime config:
PORT=8787
HOST=0.0.0.0
GATEWAY_TOKEN=replace-with-strong-random-token
CORS_ORIGIN=https://your-domain.com
DEBUG_IO_HEX=0
ASR_INCLUDE_RAW_RESULT=0
ASR_EMPTY_TEXT_WARN_LIMIT=3
Web
cp apps/web/.env.example apps/web/.env
Build-time config:
VITE_GATEWAY_URL=wss://your-domain.com
VITE_GATEWAY_TOKEN=replace-with-strong-random-token
VITE_ENABLE_PLUGIN_RUNTIME=false
Notes:
VITE_GATEWAY_TOKENmust matchGATEWAY_TOKEN.VITE_ENABLE_PLUGIN_RUNTIME=falseis the recommended initial production posture if plugin support is not needed yet.- If you expose the service through Nginx or Caddy on
443/80, the internal gateway can still listen on8787.
Quality Commands
npm run typecheck
npm run lint
npm run test
Gateway Operations
Unified script: scripts/gatewayctl.sh
# First-time deployment
scripts/gatewayctl.sh ensure-env
scripts/gatewayctl.sh install-service $USER
scripts/gatewayctl.sh deploy
# Daily operations
scripts/gatewayctl.sh status
scripts/gatewayctl.sh logs 200
scripts/gatewayctl.sh logs-clear
scripts/gatewayctl.sh restart
scripts/gatewayctl.sh health
# Foreground local run
scripts/gatewayctl.sh run-local
- Linux uses
systemd. - macOS uses
launchdat~/Library/LaunchAgents/com.remoteconn.gateway.plist.
Logs
launchctl print gui/$(id -u)/com.remoteconn.gateway | rg -n "stdout path|stderr path"
tail -f /Users/gavin/Library/Logs/com.remoteconn.gateway.out.log
Benchmarks
Gateway SSH2 baseline:
npm --workspace @remoteconn/gateway run bench
Example with explicit parameters:
BENCH_SSH_HOST=127.0.0.1 \
BENCH_SSH_PORT=22 \
BENCH_SSH_USER="$USER" \
BENCH_PRIVATE_KEY=~/.ssh/id_ed25519 \
BENCH_ITERATIONS=30 \
BENCH_PAYLOAD_KB=1024 \
npm --workspace @remoteconn/gateway run bench
TTYD baseline:
ttyd -v
BENCH_SSH_HOST=127.0.0.1 \
BENCH_SSH_PORT=22 \
BENCH_SSH_USER="$USER" \
BENCH_SSH_IDENTITY=~/.ssh/id_ed25519 \
BENCH_ITERATIONS=30 \
BENCH_PAYLOAD_KB=1024 \
npm --workspace @remoteconn/gateway run bench:ttyd
Related Documents
docs/server-management-ux-iteration-2026-02-25.mddocs/terminal-voice-input-plan-2026-02-26.mddocs/web-storage-layering-guideline-2026-02-25.mddocs/touch-focus-state-machine-plan-2026-02-23.mdCHANGELOG.mdrelease.md





