AGENTS / GITHUB / Shippy
githubinferredactive

Shippy

provenance:github:moviendome/Shippy

Assign a GitHub issue, wake up to a PR. Autonomous agent in ~630 lines of bash — cron, flock, and git worktrees on a $10/month VPS.

View Source ↗First seen 1mo agoNot yet hireable
README
# Shippy

Assign a GitHub issue, wake up to a PR.

Shippy is an autonomous agent that runs on a VPS and ships code for you. Assign an issue to the agent's GitHub account, and it creates a pull request with the implementation.

~630 lines of bash. No frameworks, no Docker, no API keys — just cron, flock, and git worktrees on a $10/month VPS.

## Agents

**Issue Worker** — Picks the oldest assigned issue across all repos, creates a feature branch, implements the changes using Claude Code, and opens a PR.

**Feedback Worker** — Runs every 5 minutes. Watches for @mentions on PRs created by the issue worker. When a reviewer leaves feedback, it implements the requested changes and pushes.

## Setup

### Prerequisites

- Linux VPS (uses `/proc/meminfo` for memory checks)
- [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code), authenticated
- [GitHub CLI](https://cli.github.com/) authenticated as the agent account
- A GitHub account for the agent (e.g. `my-bot`) added as collaborator to target repos

### Install

```bash
git clone git@github.com:yourname/Shippy.git ~/projects/shippy
cd ~/projects/shippy
bin/deploy
```

### Configure

Create `~/shippy/.env`:

```
AGENT_GITHUB_USERNAME=my-bot
AUTHORIZED_USERS=yourname,teammate

# Optional — Telegram notifications (omit to disable)
TELEGRAM_URL=https://api.telegram.org/bot<token>/sendMessage
TELEGRAM_CHAT_ID=<chat-id>
TELEGRAM_TOPIC_ID=<topic-id>
```

| Variable | Description |
|---|---|
| `AGENT_GITHUB_USERNAME` | GitHub username of the agent account |
| `AUTHORIZED_USERS` | Comma-separated GitHub usernames allowed to trigger the feedback worker via @mentions |
| `TELEGRAM_URL` | Optional. Telegram bot API URL. Omit to disable notifications. |
| `TELEGRAM_CHAT_ID` | Telegram chat/group ID to send messages to |
| `TELEGRAM_TOPIC_ID` | Optional. Forum topic ID for threaded groups |

### Cron

```
# Poll for PR feedback (every 5 min, cheap when idle)
*/5 * * * *     ~/shippy/feedback-worker.sh

# Poll for assigned issues (every 5 min, offset by 1 min to avoid flock collision)
1-59/5 * * * *  ~/shippy/issue-worker.sh

# Priorities / self-directed for specific repos (once daily, offset to avoid flock collision)
1 6 * * *       ~/shippy/issue-worker.sh yourname/your-repo
```

## Usage

1. Invite the agent account as a collaborator on your repo
2. Assign a GitHub issue to the agent
3. Within 5 minutes, Shippy picks it up and creates a PR
4. Review the PR — @mention the agent for feedback, it responds automatically

## Issue Worker Modes

**Without arguments** — polls for assigned GitHub issues across all repos. If no issues are assigned, exits cleanly (no Claude invoked). Run every 5 minutes.

```
~/shippy/issue-worker.sh
```

**With a repo argument** — works on a specific repo using priorities or self-directed mode. Run once daily per repo:

```
~/shippy/issue-worker.sh owner/repo
```

Task priority in repo mode:
1. **priorities.md** — First item from `<project>/.shippy/priorities.md`. Skipped if 2+ Shippy PRs are open.
2. **Self-directed** — Analyzes the codebase for the highest-impact small improvement. Same PR limit.

## Notifications

Shippy sends Telegram messages when:
- A PR is created (with title, summary, and link)
- A PR feedback comment is addressed
- An error occurs (timeout, forbidden files, failures)
- Too many open PRs are blocking repo-mode runs

Telegram is optional. If `TELEGRAM_URL` is not set in `.env`, notifications are silently skipped and everything else works normally.

## Contributing

See [CLAUDE.md](CLAUDE.md) for project conventions.

PUBLIC HISTORY

First discoveredMar 21, 2026

IDENTITY

inferred

Identity inferred from code signals. No PROVENANCE.yml found.

Is this yours? Claim it →

METADATA

platformgithub
first seenFeb 22, 2026
last updatedMar 20, 2026
last crawled8 days ago
version

README BADGE

Add to your README:

![Provenance](https://getprovenance.dev/api/badge?id=provenance:github:moviendome/Shippy)