Skip to content
agentic-pipelines

Install on Linux

On Linux the engine schedules pipelines with systemd user timers (systemctl --user): no root, and nothing written under /etc.

Install, in this order

On a clean Debian or Ubuntu machine:

bash
sudo apt install unzip# the Bun installer needs itcurl -fsSL https://bun.sh/install | bash# installs Bun in ~/.bun# open a new shell (or `source ~/.bashrc`) so that `bun` is on the PATHgit clone https://github.com/startcat/agentic-pipelines.gitcd agentic-pipelinesbun installbun link# puts `pipelines` on the PATHsudo timedatectl set-timezone <your timezone># e.g. Europe/Madridsudo loginctl enable-linger $USER

You also need git, a compatible Node on the PATH, and whatever binaries your pipelines declare (the starter uses jq; its README installs unzip git jq in one apt line). Pipelines with agent steps need an Anthropic API key in the data repo's .env, exactly as on macOS.

The four things that differ from macOS

Time zone

triggers.cron schedules are read in the machine's local time, and servers usually come set to UTC. Without the timedatectl line above, a pipeline meant for 03:00 would run at 03:00 UTC. doctor and install show the zone they see, and on UTC doctor warns that schedules will be read in UTC.

Linger

Without enable-linger, systemd doesn't keep your user session around once you close SSH, and user timers don't fire. pipelines doctor shows this check in red when it's missing, without failing (platform checks are informational). pipelines install refuses to install without linger unless you pass --force; --dry-run shows it but doesn't stop.

Bash

On Linux, shell steps and shell: guards run with bash --posix instead of sh: Ubuntu's /bin/sh is dash, which doesn't support set -o pipefail. bash --posix reproduces the semantics of macOS's sh. bash must be installed (it is on any standard Debian or Ubuntu); doctor checks it, and install checks that it resolves on the job's PATH.

Notifications

Channel scripts belong to the data repo, not the engine. A server has no desktop notifications, so use a channel that goes out over the network: for example, a script that posts to ntfy with the topic in the data repo's .env (NTFY_TOPIC=a-long-hard-to-guess-name). The topic works like a secret: don't put it in the YAML or in a repo. See Notifications.

The dashboard from your laptop

pipelines web listens only on 127.0.0.1. To see it from your laptop, open an SSH tunnel and browse to http://127.0.0.1:7717:

bash
ssh -L 7717:127.0.0.1:7717 <server># from your laptoppipelines web# on the server, inside the data repo

Scheduling on Linux

From here, pipelines install <name> works just as on macOS (see Scheduling), and writes two units to ~/.config/systemd/user/ instead of a plist: cat.start.pipelines.<name>.service and cat.start.pipelines.<name>.timer.

If systemctl --user says it can't connect to the bus, open a real session (SSH as that user, not su or sudo -u) or set XDG_RUNTIME_DIR=/run/user/$(id -u).

Written from agentic-pipelines at b8b4db7: README.md, docs/reference.md; pipelines-starter at 0b4f303: README.md.