Rails-native operations for Kamal

The Night’s Watch

See the health of your Kamal server inside the Rails app you already run, with signed host metrics, protected access, and no Docker socket mounted into your application.

The Night's Watch dashboard showing CPU, memory, disk, and load metrics for a healthy server

Implementation

From Rails app to live server health

Choose manual or agent-guided setup, review the protected engine configuration, then connect the standalone Linux host collector.

  1. 01

    Choose your installation method

    Both options install the same published gem and generate the same engine files.

    Option 1

    Manual installation

    Add the gem and run the generator yourself. Review the generated files before migrating.

    bundle add tnw && bin/rails generate tnw:install
    View the package on RubyGems

    Option 2

    LLM installation

    Ask Codex, Claude, Cursor, or another coding agent to follow the installation guide.

    Read https://tnw.catalinionescu.dev/llms-install.md and install The Night's Watch in this Rails app.
    Read the LLM installation guide
  2. 02

    Review configuration and migrate

    Register the server, generate its ingestion secret, confirm authentication and sampling, and schedule retention through the app’s existing Active Job backend.

    Tnw.configure do |config|
      config.metrics_sample_interval = 5.seconds
      config.metrics_retention = 7.days
      config.metrics_ingestion_token = ENV["TNW_METRICS_INGESTION_TOKEN"]
      config.metrics_accepted_clock_skew = 30.seconds
    end
    bin/rails db:migrate
  3. 03

    Install the host pusher

    Run this on the Linux host. It installs only the collector, protected configuration, and a systemd timer or cron fallback.

    curl -fsSL https://tnw.catalinionescu.dev/install.sh | sudo bash
    Inspect the script before running it
InspectableThe host installer is public and never modifies the Rails application.
Rails-owned accessUse your existing admin authentication or explicit basic auth.
Read-only firstHost metrics arrive as signed JSON; the app does not mount the Docker socket.