Skip to main content

fwd

Move your coding project and agent session to remote compute.

fwd provisions or connects to a remote target, synchronizes the current project, prepares its toolchain, and starts a persistent shell, command, Claude Code, or Codex session in tmux. Disconnect your laptop and return later: the session, durable tasks, and logs remain available.

laptop                                  remote SSH / RunPod / Lambda / Slurm
project  ───────────── sync ──────────▶  project checkout
agent context ──────── optional ──────▶  Claude or Codex state
                                         tmux session + durable task manager
terminal ◀────────── attach / stream ──  persistent work

Install

uv tool install fwdit

Or try it without installing:

uvx --from fwdit fwd --help

Requires Python 3.12+, ssh, and rsync locally. Run fwd doctor to check target-specific requirements.

Quick start

Run fwd from the project you want to move:

fwd                              # attach to this project's session, or create one interactively
fwd up runpod codex              # launch Codex on RunPod; auto-attach in a human terminal
fwd up --detach runpod codex     # launch Codex but stay in the local terminal
fwd up --target work             # use a configured SSH/cloud/HPC target
fwd up -- python train.py        # launch and stream a durable command
fwd ls                           # inspect sessions and live status
fwd attach SESSION               # reconnect from a human terminal

Bare fwd is the interactive reuse workflow. Agent launches auto-attach in a human terminal; pass --detach to stay local. Scripts and coding-agent environments remain non-attaching. Detach from tmux with Ctrl-B D.

Need a saved target first?

fwd targets add                  # interactive target setup (also spelled fwd setup)
fwd targets add ssh --host my-box --target-name work
fwd targets ls                   # saved targets, their backend, and the default
fwd config --example runpod      # current generated config reference

fwd targets manages saved targets — ls, add, info, update, rm — while fwd ls and fwd rm manage the sessions running on them. Removing a target only edits configuration; use fwd rm to destroy compute.

Read Getting started for the full first-session walkthrough.

Choose a target

  • SSH: an existing host, direct address, or OpenSSH alias.
  • RunPod: CPU or GPU Pods with per-session persistent network volumes by default.
  • Lambda Cloud: GPU instances with persistent filesystems and local-only API credentials.
  • Slurm: allocations launched through persistent login-node tmux on shared scratch.

See Configuration and backends for setup, storage, and lifecycle differences.

Common workflows

Run durable work

fwd send -- pytest -q
fwd send --detach -- python train.py
fwd send --ls --json
fwd send TASK_ID                 # reattach to its log
fwd send TASK_ID --stop          # cancel the task, not the session

Every command runs in remote tmux with a durable ID and log. Streaming returns the remote exit code; Ctrl-C cancels and Ctrl-B backgrounds the viewer.

Synchronize results

fwd diff                         # compare without changing either side
fwd push                         # mirror local synchronized files to remote
fwd pull outputs/                # additive download; never deletes local files

Sync honors .gitignore, .fwdignore, and configured exclusions. Upload includes .git/ for remote agent continuity; pull and diff exclude Git metadata.

Sync continuously

Opt in to keep both sides converged automatically while a session runs, using Mutagen:

fwd sync on                      # enable for this target and start it now
fwd sync status                  # live state and any conflicts
fwd sync off                     # stop syncing

Off by default and configurable per target. Toggling takes effect immediately, even mid-session. Conflicts are reported rather than resolved destructively, and .git is never continuously synced — keep using fwd push and fwd pull for repository state. See continuous synchronization.

Forward a service

fwd ports 3000                   # localhost:3000 to remote localhost:3000
fwd ports work 8080:3000
fwd ports --ls
fwd ports --close 3000

Forwards are loopback-only and persist through a managed SSH control connection.

Stop or destroy compute

fwd stop SESSION                 # stop compute and retain configured persistent storage
fwd rm SESSION                   # permanently destroy remote resources

Both commands protect a reachable dirty remote Git worktree. rm is irreversible; force flags explicitly accept possible loss. See Lifecycle safety before automating cleanup.

Coding-agent skill

fwd ships an Agent Skills-compatible workflow for Codex, Claude Code, and other supporting agents. The first interactive invocation offers to install the bundled skill. It can also be installed directly:

npx skills add Sid-MB/fwd --skill fwd -g -a codex -a claude-code

Invoke it as $fwd ... in Codex or /fwd ... in Claude Code. See Coding agents for behavior and credential guidance.

Documentation

User guide

The installed CLI is the authoritative option reference:

fwd --help
fwd COMMAND --help
fwd config --example
fwd config --schema

Unix package builds can install the generated fwd(1) manual; visible subcommands have separate pages such as fwd-up(1). See manual-page generation and packaging.

The first invocation after uv tool install fwdit or an upgrade silently installs or updates these pages in the user-local man directory, so man fwd and man fwd-up work without sudo.

Developer guide

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fwdit-0.1.12.tar.gz (411.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fwdit-0.1.12-py3-none-any.whl (377.2 kB view details)

Uploaded Python 3

File details

Details for the file fwdit-0.1.12.tar.gz.

File metadata

  • Download URL: fwdit-0.1.12.tar.gz
  • Upload date:
  • Size: 411.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for fwdit-0.1.12.tar.gz
Algorithm Hash digest
SHA256 eb4313079829f150e25d4b97561135a804d52b7fe8530f5b445dfe3d750d93e4
MD5 5f5e20cc81472630924a2d36db538627
BLAKE2b-256 ba05cade40a218f4c87f1f4bdcfec1e5a1cf6b760c2541e2d53829cd2e9dae99

See more details on using hashes here.

Provenance

The following attestation bundles were made for fwdit-0.1.12.tar.gz:

Publisher: publish.yml on Sid-MB/fwd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fwdit-0.1.12-py3-none-any.whl.

File metadata

  • Download URL: fwdit-0.1.12-py3-none-any.whl
  • Upload date:
  • Size: 377.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for fwdit-0.1.12-py3-none-any.whl
Algorithm Hash digest
SHA256 4c1cf33a07fc552b4b25e47c7d357290f6e8e53cbb361f3cb4f8c6ff2a1b6b6f
MD5 9e1e02e9abfbe3cf23798d110fc5ecaa
BLAKE2b-256 a59b4c630a93eca193294150a9aa0e2660ffd22415d01feb27d6a2484ca9e66b

See more details on using hashes here.

Provenance

The following attestation bundles were made for fwdit-0.1.12-py3-none-any.whl:

Publisher: publish.yml on Sid-MB/fwd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.1.15

2 files

0.1.14

2 files

This release

0.1.12 This release

2 files

0.1.11

2 files

0.1.10

2 files

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page