Build a legible
development environment.

Install StackEnv, connect the tools you already use, and expose one secure command center to humans and coding agents.

Overview

StackEnv is a read-only inventory and command center for local or remote development machines. It discovers projects and Git worktrees, reads Portly process state, indexes screenshots, and serves the result through an authenticated dashboard.

Current boundary StackEnv observes your environment and does not mutate Git repositories. Skill synchronization currently uses the documented private Git worker rather than native CLI commands.

NEW GUIDESynchronize skills between your VPS and computer

Installation

Linux amd64

mkdir -p ~/.local/bin
curl -L https://github.com/Melvynx/stackenv/releases/latest/download/stackenv-linux-amd64 -o ~/.local/bin/stackenv
chmod +x ~/.local/bin/stackenv
stackenv version

Build from source

git clone https://github.com/Melvynx/stackenv.git
cd stackenv
corepack pnpm --dir internal/dashboard install --frozen-lockfile
corepack pnpm --dir internal/dashboard build
go build -o stackenv ./cmd/stackenv

Setup

The guided flow asks where projects and screenshots live, how Portly is configured, and where the dashboard stores its credentials.

stackenv setup
stackenv doctor
stackenv dashboard

Generate dedicated secrets instead of reusing a personal password:

openssl rand -base64 32 > dashboard-password
openssl rand -hex 32 > media-bypass-key
chmod 600 dashboard-password media-bypass-key

Commands

stackenv setupCreate or update the configuration.
stackenv scanRefresh the environment snapshot.
stackenv statusPrint the current state and health.
stackenv doctorCheck paths, credentials, and integrations.
stackenv dashboardRun the local command center.
stackenv cloudflareInspect the configured Tunnel integration.
stackenv versionPrint the installed release.

Projects and worktrees

Each configured root is scanned for repositories and nested applications. StackEnv calls git worktree list --porcelain for every repository, so linked checkouts are first-class projects rather than invisible copies.

The dashboard shows their branch, path, ahead/behind state, and modified, added, deleted, untracked, or conflicted file counts.

Screenshots and evidence

Visual artifacts are grouped by feature directory and ordered by recency. The authenticated gallery provides a human view; an optional media bypass URL lets Cursor or Codex render a specific image directly.

https://your-stackenv.example/media/SCREENSHOT_ID?bp=YOUR_MEDIA_KEY

Narrow permission The bypass applies only to GET and HEAD requests under /media. It never authenticates the dashboard or API.

Portly integration

Portly remains the process supervisor and prevents duplicate development servers. StackEnv reads its state to present application names, ports, commands, health, and memory alongside the repository that owns each process.

Cloudflare Tunnel

Keep the dashboard bound to 127.0.0.1, then route a hostname to it through Cloudflare Tunnel. This gives the command center HTTPS without publishing the local application port.

stackenv dashboard
# Tunnel origin example
http://127.0.0.1:7890

Security model

  • The dashboard listens on loopback by default.
  • Credentials are read from permission-restricted files, not committed config.
  • Successful sign-in creates an HTTP-only session cookie.
  • The JSON API always requires a valid session.
  • The media bypass is separately generated and scoped to image reads.
  • Cloudflare provides the public TLS boundary.

Configuration

The exact file is generated by stackenv setup. A typical installation defines project roots, screenshot roots, the Portly state source, dashboard address, and secret file paths.

{
  "version": 1,
  "environmentName": "dev-vps",
  "environmentType": "remote",
  "address": "127.0.0.1:7890",
  "projectsRoots": ["/root/projects"],
  "screenshotsRoot": "/root/screenshots",
  "dataDir": "/root/.local/share/stackenv",
  "portlyBinary": "portly",
  "auth": {
    "username": "stackenv",
    "passwordFile": "/root/.config/stackenv/dashboard-password",
    "bypassKeyFile": "/root/.config/stackenv/media-bypass-key"
  }
}

Need implementation details? Read the project README .