Skip to main content

Run commands with Reminder monitoring and expose their status to the Android app.

Project description

Reminder

Reminder is a minimal prototype for monitoring Linux command runs from an Android app.

The first version has two parts:

  • remindrun: a Python command wrapper. Put remindrun before a command to record its status, output tail, exit code, and timestamps.
  • Android app: a small native app that polls the remindrun HTTP API, lists runs, and posts a local notification when a run changes from running to finished.

Python monitor

Install the local package in a virtual environment:

python3 -m venv .venv
.venv/bin/python -m pip install -e .

Or install the built wheel:

.venv/bin/python -m pip install dist/remindrun-0.7.1-py3-none-any.whl

Start the status server on the Linux machine:

remindrun server --host 0.0.0.0 --port 8765 --token change-this-token

Run commands through Reminder:

remindrun sleep 5
remindrun run -- bash -lc 'echo hello && sleep 2 && echo done'
remindrun status

You can use the shorter rrun command for the same actions:

rrun sleep 5
rrun ngrok --domain <YOUR_DEV_DOMAIN>.ngrok-free.dev

The server exposes:

  • GET /health
  • GET /api/runs?limit=50
  • GET /api/runs/{id}
  • GET /api/events?since=<updatedAt>

By default the SQLite database lives at ~/.reminder/reminder.db. Set REMINDER_HOME=/path/to/dir to change that location.

Public access

If you do not have a public IP, use a Cloudflare quick tunnel:

remindrun public

This starts the local server and runs cloudflared tunnel --url http://127.0.0.1:8765. It prints a public https://*.trycloudflare.com URL and a token. Enter both in the Android app:

Server: https://example.trycloudflare.com
Token:  generated-token

If cloudflared is missing, install it first:

brew install cloudflared

Cloudflare quick tunnel URLs are random. If you need the same URL every time and do not own a domain, use ngrok's free Dev Domain:

brew install ngrok/ngrok/ngrok
ngrok config add-authtoken <YOUR_NGROK_AUTHTOKEN>
remindrun ngrok --domain <YOUR_DEV_DOMAIN>.ngrok-free.dev

In the Android app:

Server: https://<YOUR_DEV_DOMAIN>.ngrok-free.dev
Token:  generated-token

If the Android app needs to connect to a server that already has a public IP or a public domain:

remindrun server --host 0.0.0.0 --port 8765 --token a-long-random-token

Then open TCP port 8765 in the cloud security group or firewall.

In the Android app:

Server: http://<public-ip>:8765
Token:  a-long-random-token

For real public use, prefer HTTPS through a reverse proxy or tunnel. Plain http://<public-ip>:8765 works for testing, but the token can be observed on an untrusted network.

Android app

Open the android/ directory in Android Studio.

For an emulator, the default server URL is:

http://10.0.2.2:8765

For a physical phone, start the server with --host 0.0.0.0, put the phone on the same network, then set the app server URL to:

http://<linux-machine-ip>:8765

If the server was started with --token, enter the same token in the app's Token field.

Tap Save to lock the Server and Token fields. Tap Unlock before editing them again.

Tap Delete on a run in the history list to delete it from the server.

Tap a run, or tap Console, to open the run's terminal output. Use Back to return to the main list.

This prototype polls every 5 seconds while the app process is alive. A later version should move polling into a foreground service or push channel if you want reliable notifications while the app is fully backgrounded.

Project details


Download files

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

Source Distribution

remindrun-0.7.1.tar.gz (10.6 kB view details)

Uploaded Source

Built Distribution

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

remindrun-0.7.1-py3-none-any.whl (9.9 kB view details)

Uploaded Python 3

File details

Details for the file remindrun-0.7.1.tar.gz.

File metadata

  • Download URL: remindrun-0.7.1.tar.gz
  • Upload date:
  • Size: 10.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for remindrun-0.7.1.tar.gz
Algorithm Hash digest
SHA256 5fb4cbc3931374822442012936a06ad02c2a2fbfcd59e7a52261ff609962e758
MD5 7cb8a0fc3c4147eed20e9ae01fdb8f00
BLAKE2b-256 458ce3c8ec17b45497627842083acad0caf86d298aa0cd54bfb40586a42bb8da

See more details on using hashes here.

File details

Details for the file remindrun-0.7.1-py3-none-any.whl.

File metadata

  • Download URL: remindrun-0.7.1-py3-none-any.whl
  • Upload date:
  • Size: 9.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for remindrun-0.7.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cb8763658ebfc0ff0a5309cadc58de75e13fe95696911f62390bffeffef9a4ca
MD5 4ce3b6da20d3e5a7c6b9e842f4c63290
BLAKE2b-256 408270f9885d3d7935077212ee748ad5f26a5ae4c3cfeeb3842543f0e1fe1e93

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page