home / skills / htlin222 / dotfiles / makefile-for-telegram

makefile-for-telegram skill

/claude.symlink/skills/makefile-for-telegram

npx playbooks add skill htlin222/dotfiles --skill makefile-for-telegram

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
6.2 KB
---
name: makefile-for-telegram
description: Generate a Makefile for Telegram bot projects with LaunchAgent service management. Use when setting up a new Telegram bot project or adding service management to an existing one.
---

# Makefile for Telegram Bot

Generate a production-ready Makefile for Telegram bot projects running on macOS with LaunchAgent background service support.

## When to Use

- Setting up a new Telegram bot project
- Adding macOS LaunchAgent service management
- Need quick start/stop/restart commands for a bot
- Want to manage bot as a background service

## Features Generated

### Quick Start

| Command      | Description                                  |
| ------------ | -------------------------------------------- |
| `make setup` | First-time setup (install deps, create .env) |
| `make run`   | Run bot in foreground                        |
| `make dev`   | Run with auto-reload (watch mode)            |

### Background Service (macOS LaunchAgent)

| Command          | Description                          |
| ---------------- | ------------------------------------ |
| `make start`     | Install and start background service |
| `make stop`      | Stop background service              |
| `make restart`   | Restart background service           |
| `make status`    | Check if service is running          |
| `make logs`      | Tail stdout logs                     |
| `make logs-err`  | Tail stderr logs                     |
| `make uninstall` | Remove background service            |

### Development

| Command          | Description                |
| ---------------- | -------------------------- |
| `make install`   | Install dependencies       |
| `make test`      | Run tests                  |
| `make typecheck` | Run TypeScript type check  |
| `make clean`     | Remove temp files and logs |

## Requirements

Before generating, ensure the project has:

1. **LaunchAgent plist template** at `launchagent/com.{project-name}.plist.template`
2. **Environment file template** at `.env.example`
3. **Bun** as the runtime (or modify for npm/node)

## Instructions

### Step 1: Gather Project Info

Ask user for:

- Project name (for plist label, e.g., `claude-telegram-ts`)
- Runtime command (default: `bun run src/index.ts`)
- Log file paths (default: `/tmp/{project-name}.log`)

### Step 2: Generate Makefile

Create `Makefile` with:

```makefile
# {Project Name} - Makefile
# Usage: make <target>

SHELL := /bin/bash

PLIST_NAME := com.{project-name}
PLIST_PATH := ~/Library/LaunchAgents/$(PLIST_NAME).plist
PLIST_TEMPLATE := launchagent/$(PLIST_NAME).plist.template
LOG_FILE := /tmp/{project-name}.log
ERR_FILE := /tmp/{project-name}.err

.PHONY: help install setup run dev stop start restart status logs logs-err clean typecheck test uninstall

help:
	@echo "{Project Name}"
	@echo ""
	@echo "Quick start:"
	@echo "  make setup      - First-time setup (install deps, create .env)"
	@echo "  make run        - Run bot in foreground"
	@echo "  make dev        - Run with auto-reload (watch mode)"
	@echo ""
	@echo "Background service (macOS LaunchAgent):"
	@echo "  make start      - Install and start background service"
	@echo "  make stop       - Stop background service"
	@echo "  make restart    - Restart background service"
	@echo "  make status     - Check if service is running"
	@echo "  make logs       - Tail stdout logs"
	@echo "  make logs-err   - Tail stderr logs"
	@echo "  make uninstall  - Remove background service"
	@echo ""
	@echo "Development:"
	@echo "  make install    - Install dependencies"
	@echo "  make test       - Run tests"
	@echo "  make typecheck  - Run TypeScript type check"
	@echo "  make clean      - Remove temp files and logs"

install:
	bun install

setup: install
	@if [ ! -f .env ]; then \
		cp .env.example .env; \
		echo "Created .env from template"; \
		echo ">>> Edit .env with your credentials"; \
	else \
		echo ".env already exists"; \
	fi

run:
	bun run start

dev:
	bun run dev

test:
	bun test

typecheck:
	bun run typecheck

start:
	@if [ ! -f .env ]; then \
		echo "Error: .env not found. Run 'make setup' first."; \
		exit 1; \
	fi
	@echo "Installing LaunchAgent..."
	@mkdir -p ~/Library/LaunchAgents
	@export $$(grep -v '^#' .env | xargs) && \
	sed -e "s|/Users/USERNAME/.bun/bin/bun|$$(command -v bun)|g" \
	    -e "s|/Users/USERNAME/Dev/{project-path}|$$(pwd)|g" \
	    -e "s|USERNAME|$$(whoami)|g" \
	    -e "s|your-bot-token-here|$${TELEGRAM_BOT_TOKEN}|g" \
	    -e "s|<string>123456789</string>|<string>$${TELEGRAM_ALLOWED_USERS}</string>|g" \
	    $(PLIST_TEMPLATE) > $(PLIST_PATH)
	@echo "Created $(PLIST_PATH) with values from .env"
	@launchctl unload $(PLIST_PATH) 2>/dev/null || true
	@launchctl load $(PLIST_PATH)
	@echo "Service started. Check 'make logs' for output."

stop:
	@launchctl unload $(PLIST_PATH) 2>/dev/null || echo "Service not running"
	@echo "Service stopped"

restart:
	@launchctl kickstart -k gui/$$(id -u)/$(PLIST_NAME) 2>/dev/null || \
		(echo "Service not loaded. Run 'make start' first." && exit 1)
	@echo "Service restarted"

status:
	@if launchctl list | grep -q $(PLIST_NAME); then \
		echo "Service: RUNNING"; \
		launchctl list $(PLIST_NAME); \
	else \
		echo "Service: NOT RUNNING"; \
	fi

uninstall: stop
	@rm -f $(PLIST_PATH)
	@echo "Service uninstalled"

logs:
	@if [ -f $(LOG_FILE) ]; then \
		tail -f $(LOG_FILE); \
	else \
		echo "No log file yet. Start the service first."; \
	fi

logs-err:
	@if [ -f $(ERR_FILE) ]; then \
		tail -f $(ERR_FILE); \
	else \
		echo "No error log yet."; \
	fi

clean:
	rm -f $(LOG_FILE) $(ERR_FILE) 2>/dev/null || true
	@echo "Cleaned temp files"
```

### Step 3: Customize sed Replacements

The `start` target needs sed patterns matching the plist template. Common patterns:

- `your-bot-token-here` → `${TELEGRAM_BOT_TOKEN}`
- `123456789` → `${TELEGRAM_ALLOWED_USERS}`
- `/Users/USERNAME` → `$(whoami)` expanded path
- Add more `-e "s|pattern|replacement|g"` for other env vars

### Step 4: Verify

```bash
make help
make setup
make run  # Test in foreground first
make start  # Then as service
make status
```

## Example

**Input:** "Create a Makefile for my telegram bot project"

**Output:** Generate complete Makefile, ask for project-specific values (name, paths), and customize sed patterns based on their plist template.