Apps / AI / :3100
Paperclip
Run a company of AI agents and watch their work.
No MiniControl yet? Download MiniControl, then install Paperclip from its catalog.
Paperclip organises AI coding agents into a company: an org chart, goals, budgets and a board of tasks they work through on their own. You approve hires and plans, and follow every run from a web dashboard. It's open source and keeps its data on the machine.
Why on a Mac: Agents work for hours at a time, and a Mac mini runs all day for a few watts.
After the install: Open it to set up your first company.
Free, like the whole catalog.
What MiniControl installs
- Packages
brew install node- Web page
- Port 3100
- Keeps running
- As LaunchAgent
ing.paperclip.paperclipai, also after a restart - Its data
~/.paperclip- Memory
- 300–600 MB, plus the agents it runs
- Licence
- MIT
The install script
What MiniControl runs on your server, word for word. The app shows the same script before it installs.
#!/bin/bash
# Generated by MiniControl for Paperclip. Runs on the machine.
set -euo pipefail
export HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_NO_ENV_HINTS=1 NONINTERACTIVE=1
export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:$PATH"
step() { echo "STEP|$1|$2"; }
fail() { echo "ERR|$1"; exit 1; }
U=$(id -u)
BREW=$(command -v brew || true)
[ -n "$BREW" ] || fail "Homebrew isn't installed. Server Setup → Homebrew installs it."
BP=$("$BREW" --prefix)
step 1 "Checking the machine"
for f in "$HOME"/Library/LaunchAgents/*.plist; do
if grep -qsF -- 'paperclipai' "$f"; then fail "Paperclip is already set up here, as $(basename "$f" .plist)."; fi
done
if lsof -nP -iTCP:3100 -sTCP:LISTEN >/dev/null 2>&1; then
fail "Something else already uses port 3100: $(lsof -nP -iTCP:3100 -sTCP:LISTEN | awk 'NR == 2 {print $1}')."
fi
step 2 "Installing with Homebrew"
"$BREW" list --formula node >/dev/null 2>&1 || "$BREW" install node
step 3 "Setting it up"
mkdir -p "$HOME/services/paperclip/log" "$HOME/Library/LaunchAgents"
step 4 "Starting Paperclip"
PC="$HOME/.local/bin/paperclipai"
[ -x "$PC" ] || npx -y paperclipai install --yes
[ -x "$PC" ] || PC=$(command -v paperclipai)
# Reachable over Tailscale when it's up, else over the home network.
BIND=lan
for t in "$BP/bin/tailscale" /usr/local/bin/tailscale; do
if [ -x "$t" ] && "$t" status >/dev/null 2>&1; then BIND=tailnet; break; fi
done
"$PC" onboard --yes --bind "$BIND" --install-service
step 5 "Waiting for it to answer"
# Localhost, and the Tailscale IP for apps that bind only to it.
# `|| true`: with set -e, a failed substitution in an assignment would end the script.
HOSTS="127.0.0.1 $(for t in "$BP/bin/tailscale" /usr/local/bin/tailscale; do [ -x "$t" ] && "$t" ip -4 2>/dev/null && break; done | head -1 || true)"
ok=0
for i in $(seq 1 45); do
for h in $HOSTS; do
if curl -fsS -m 3 -o /dev/null "http://$h:3100/api/health" 2>/dev/null; then ok=1; break 2; fi
done
sleep 2
done
[ "$ok" = 1 ] || echo "WARN|It started, but isn't answering on port 3100 yet. Big apps can take a minute on first start."
echo "DONE"
MiniControl isn’t affiliated with Paperclip. Questions about Paperclip itself go to its makers; about installing it, to hello@minicontrol.app.