Tools
Claude Plugins
A plugin marketplace for Claude Code that turns it into an OpenClaw version built into your Claude Code.
Configuration Example
---
schedule: "*/10 7-21 * * *"
type: "weather-report"
---
Check the current weather and report it to the user on Telegram.
README
# christian-drescher-claude-plugins
A plugin marketplace for [Claude Code](https://code.claude.com) that turns it into a **personal assistant that never sleeps**.
## Overview
This marketplace provides the building blocks to assemble a highly-customizable personal assistant from scratch, with minimal dependencies. Think of it as an extremely bare OpenClaw variant built directly into Claude Code.
**Key properties:**
- **Always-on** — run Claude Code in a terminal multiplexer (`screen`, `tmux`) and it stays active 24/7, executing tasks on a schedule and responding to messages.
- **No API pricing** — uses your existing Claude Code subscription directly. No Agents SDK, no separate billing.
- **Built-in memory** — leverages Claude Code's auto-memory and `CLAUDE.md` for persistent context across sessions.
- **Identity & personality** — populate `CLAUDE.md` to give the assistant a name, tone, and behavioral guidelines.
- **Modular** — each plugin works independently or in combination. Install only what you need.
- **Extensible** — integrate with any other skill that works with Claude Code.
## How it works
| Layer | Plugin | Role |
|-------|--------|------|
| Proactive | **scheduler-channel** | Fires recurring jobs on cron schedules — heartbeats, reminders, data pulls, integrations. |
| Interactive | **telegram-channel** | Receives and replies to Telegram messages — lets you talk to your assistant from anywhere. |
Combined, the two channels form a full-loop assistant: it acts on its own schedule *and* responds to you on demand.
### Giving the assistant an identity
Create or edit `CLAUDE.md` in your project root:
```markdown
You are Jarvis, a calm and concise personal assistant.
Respond in English. Keep messages short unless asked for detail.
When reporting weather, include a one-word emoji summary.
```
### Defining recurring jobs
Drop `.md` files into the `jobs/` directory. Each file specifies a cron schedule in YAML frontmatter and a task description in the body:
```yaml
---
schedule: "*/10 7-21 * * *"
type: "weather-report"
---
Check the current weather and report it to the user on Telegram.
```
### Running permanently
Start the assistant inside a terminal multiplexer so it survives disconnects:
```bash
screen -S assistant
claude --dangerously-load-development-channels \
plugin:scheduler-channel@christian-drescher-claude-plugins \
--dangerously-load-development-channels \
plugin:telegram-channel@christian-drescher-claude-plugins
```
Detach with `Ctrl-a d`. Reattach anytime with `screen -r assistant`.
## Plugins
| Plugin | Description |
|--------|-------------|
| **scheduler-channel** | A one-way MCP channel that pushes scheduled job notifications into a Claude Code session. Jobs are markdown files with cron schedules defined in YAML frontmatter. |
| **telegram-channel** | Fork of [Claude's official Telegram plugin](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/telegram) that bridges a Telegram bot to Claude Code. Forwards messages as channel notifications and exposes reply, react, and edit tools. Includes pairing-based access control. |
## Installation
Add this marketplace:
```bash
claude plugin marketplace add christian-drescher/claude-plugins --scope local
```
Each plugin can be installed and used independently — see the sections below. Use both if you want the full-loop assistant.
## scheduler-channel plugin
Create a `jobs/` directory in your project home. This is where the `scheduler-channel` will pick up your scheduled tasks:
```bash
mkdir jobs
```
Install the plugin:
```bash
claude plugin install scheduler-channel@christian-drescher-claude-plugins --scope local
```
Start Claude Code with the development channel flag (required during the research preview for custom channels), if you want :
```bash
claude --dangerously-load-development-channels plugin:scheduler-channel@christian-drescher-claude-plugin
```
### Usage
Drop `.md` files into the `jobs/` directory. Each file needs YAML frontmatter with a `schedule` field (cron expression) and an optional `type` field:
```yaml
---
schedule: "*/30 * * * *"
type: "heartbeat"
---
Your task description here. This body is delivered to Claude as the notification content.
```
If `type` is omitted it defaults to the filename without the `.md` extension.
Events arrive in Claude's context as:
```xml
<channel source="scheduler" type="heartbeat">
Your task description here.
</channel>
```
### Example
This requests the current time.
```yaml
---
schedule: "*/15 * * * *"
type: "heartbeat"
---
Send the current time formatted as HH:MM to the user.
```
## telegram-channel plugin
### 1. Create a Telegram bot
Open [@BotFather](https://t.me/BotFather) on Telegram, send `/newbot`, and follow the prompts. Copy the token (looks like `123456789:AAH...`).
### 2. Install the plugin
```bash
claude plugin install telegram-channel@christian-drescher-claude-plugins --scope local
```
### 3. Save the token
```bash
/telegram-channel:configure 123456789:AAHfiqksKZ8...
```
This writes `TELEGRAM_BOT_TOKEN=...` to `.telegram/.env` in your project root. Restart claude.
### 4. Launch with the channel
```bash
claude --dangerously-load-development-channels plugin:telegram-channel@christian-drescher-claude-plugins
```
Or combined with other channels:
```bash
claude --dangerously-load-development-channels plugin:scheduler-channel@christian-drescher-claude-plugins --dangerously-load-development-channels plugin:telegram-channel@christian-drescher-claude-plugins
```
### 5. Pair
DM your bot on Telegram — it replies with a 6-character code. In your Claude Code session:
```bash
/telegram-channel:access pair <code>
```
### 6. Lock down
Once paired, switch to allowlist mode so strangers can't trigger pairing codes:
```bash
/telegram-channel:access policy allowlist
```
## Recommended but dangerous settings
Add the following settings to `.claude/settings.local.json` if you trust the system and you do not want to approve every single command.
```json
{
"skipDangerousModePermissionPrompt": true,
"permissions": {
"defaultMode": "bypassPermissions"
}
}
```
tools
Comments
Sign in to leave a comment