Skip to main content
Tascarrel is alpha software and may break. We’re looking for your feedback — share it on GitHub.
Documentation

Configure Remote Access

Tascarrel’s host daemon (hostd) can remain bound to loopback while an SSH reverse tunnel and Nginx publish its UI and HTTP routes. Browser access always requires a persistent session created with a short-lived pairing key.

This guide uses tascarrel.example.com for the UI and <route>.tascarrel.example.com for published HTTP routes.

Tascarrel automatically presents its mobile task client on phones and touch-oriented tablets. The mobile client supports starting tasks, interacting with chats, resolving requests, approving repository publications, starting and stopping task pods, and reviewing individual changed-file diffs. Use the desktop workbench for code editing, terminals, full file browsing, and workspace administration. Within a workspace, open a task pod to choose or start a chat.

Configure the Public Origin

Create $TASCARREL_HOME/config/server.toml with the externally visible HTTPS origin:

[remote-access]
public-origin = "https://tascarrel.example.com"

Hostd derives the route suffix from the public-origin hostname. One TLS certificate can then cover tascarrel.example.com and *.tascarrel.example.com without a nested wildcard. Hostd continues to recognize <route>.tascarrel.localhost for desktop and loopback development workflows.

The public suffix identifies routes but is not exposed to routed services. Hostd presents localhost for <route>.tascarrel.example.com and <prefix>.tascarrel.localhost for <prefix>.<route>.tascarrel.example.com. It applies the same mapping to Host, same-origin Origin, and same-origin Referer values. This gives services the same loopback origin locally and through remote access.

Hostd generates a private authentication key below $TASCARREL_HOME/state/auth/. Supply an externally managed 32-byte raw key with an optional server setting:

[authentication]
secret-file = "/run/secrets/tascarrel-auth"

Relative key paths resolve beside server.toml. The file must not grant group or other permissions. Stop hostd before backing up or migrating the key and sessions.sqlite3; the two files belong together. Restart hostd after changing server.toml.

Create the Reverse Tunnel

Keep this tunnel connected from the machine running Tascarrel:

ssh -N -R 127.0.0.1:8272:127.0.0.1:8272 user@server

The explicit remote bind address keeps the forwarded port private to the server. Nginx is the only public listener.

Terminate TLS with Nginx

Proxy both the base hostname and its wildcard routes to the tunnel:

map $http_upgrade $tascarrel_connection {
    default upgrade;
    ''      close;
}

server {
    listen 443 ssl http2;
    server_name tascarrel.example.com *.tascarrel.example.com;

    ssl_certificate     /etc/letsencrypt/live/tascarrel/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/tascarrel/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8272;
        proxy_http_version 1.1;
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $tascarrel_connection;
        proxy_read_timeout 3600s;
    }
}

Preserve the original Host header. Hostd uses it to distinguish the UI from published routes and to scope route credentials.

Pair and Revoke Browsers

Create a single-use pairing key through hostd’s private control socket:

tascarrelctl auth pair --label "Remote laptop"

Open the public UI and enter the printed key. Pairing keys expire after ten minutes. Browser sessions expire after 30 idle days or 180 total days.

Inspect or revoke sessions from Settings → Remote Access or from the host:

tascarrelctl auth sessions
tascarrelctl auth revoke browser_session_...

Revocation closes the browser control connection and invalidates every HTTP route grant derived from that session.

Add Tascarrel to an iPhone Home Screen

Pair the iPhone and open the Tascarrel UI in Safari. Tap Share, choose Add to Home Screen, enable Open as Web App, and tap Add. The Home Screen app uses Tascarrel’s icon and opens the mobile task client in a standalone window.

Understand Route Authentication

Every published HTTP route requires authentication. The UI issues a 60-second, single-use ticket in the URL fragment. Fragments do not reach Nginx, hostd’s HTTP logs, or the routed application. The route exchanges the ticket for a host-only HttpOnly cookie and redirects to the clean target.

Embedded previews use their ticket only to bootstrap the frame. Opening a route in a new tab from a preview or the network settings issues a fresh ticket instead of reusing the frame’s consumed ticket.

Hostd removes only its reserved route credential before proxying. Cookies owned by the routed application continue to work. A route trusted as a Tascarrel frontend also receives a same-origin API bridge below /.tascarrel/; trust does not make the route public.