yee88 CLI Tool
⚠️ Important: Must Execute Real Commands
When users request the following features, you must execute the corresponding yee88 commands in Bash, do not just reply verbally!
💬 Keep Responses Concise
Do not disclose internal implementation details! Users don't need to know:
- Technical details like "one-time task", "auto-clean after execution"
- Command parameter meanings (e.g., , )
- Internal scheduling mechanisms
| User Says | Correct Response ✅ | Wrong Response ❌ |
|---|
| "Remind me to drink water in 1 minute" | "Got it, I'll remind you to drink water in 1 minute" | "Created a one-time scheduled task that will trigger in 1 minute and auto-clean after execution..." |
| "Remind me to stand up for the daily meeting at 9 every day" | "Got it, I'll remind you to stand up for the daily meeting at 9 AM every day" | "Added a cron task with schedule 0 9 * * * and project..." |
| "Cancel that reminder" | "Cancelled" | "Executed yee88 cron remove xxx --force, task has been removed from the list..." |
🚨 Key Distinction: Setting Reminders vs Executing Tasks
When setting reminders, you only need to create scheduled tasks, do not execute the tasks themselves!
| Scenario | Correct Practice | Wrong Practice |
|---|
| "Remind me to check the weather in 1 minute" | Only execute to create the reminder | ❌ Immediately check the weather and write the result into the message |
| "Remind me to attend a meeting in 30 minutes" | Only execute to create the reminder | ❌ Immediately perform any operations related to "attending a meeting" |
| "Remind me to send an email in 2 hours" | Only execute to create the reminder | ❌ Immediately send the email |
The message parameter should be the user's original words or a brief description, not the execution result!
⛔ Do NOT Pass --project By Default! Only If The User Explicitly Requests It
🧠 COT: Determine If --project Is Needed
When receiving a scheduled task request, go through this decision process in your mind:
1. Did the user mention a specific project name?
- "Under the takopi project..." → Need --project
- "Help me in the work project..." → Need --project
- "Remind me to drink water" → No need for --project
- "Remind me to stand up for the meeting at 9 every day" → No need for --project
2. Did the user say "run under a certain project"?
- "Execute under xxx..." → Need --project
- "Switch to xxx project..." → Need --project
- No project context mentioned → No need for --project
3. Is this task a general reminder or project-related?
- Drinking water, resting, attending meetings → General, no need for --project
- Code review, deployment, PR → May need, but do not pass unless the user specifies the project name
Conclusion: 99% of cases do not require --project. Only pass it when the user explicitly mentions the project name.
Decision Table
| User Says | Need --project? | Command |
|---|
| "Remind me to drink water in 1 minute" | ❌ No | yee88 cron add reminder "+1m" "Drink water" -o
|
| "Remind me to stand up for the meeting at 9 every day" | ❌ No | yee88 cron add standup "0 9 * * *" "Standup time"
|
| "Remind me to rest in 30 minutes" | ❌ No | yee88 cron add break "+30m" "Take a break" -o
|
| "Run tests at 9 every day under the takopi project" | ✅ Yes | yee88 cron add test "0 9 * * *" "Run tests" --project takopi
|
| "Help me set a reminder in the work project" | ✅ Yes | yee88 cron add reminder "+1h" "..." --project work -o
|
⚠️ --project only accepts project aliases, not paths!
| Correct ✅ | Wrong ❌ |
|---|
| Do not pass (default) | --project /Users/yee.wang/Code/github/takopi
|
| --project ~/dev/work-project
|
| --project /Users/yee.wang/.yee88
|
| |
How to get project aliases (only when requested by users):
bash
yee88 config list | grep projects
🎯 Quick Trigger List (Execute Immediately)
| User Says | Command Must Execute |
|---|
| "Remind me... in 5 minutes" | yee88 cron add reminder "+5m" "Reminder content" -o
|
| "Remind me... in 30 minutes" | yee88 cron add reminder "+30m" "Reminder content" -o
|
| "Remind me... in 2 hours" | yee88 cron add reminder "+2h" "Reminder content" -o
|
| "Remind me... tomorrow" | yee88 cron add reminder "+1d" "Reminder content" -o
|
| "Remind me... at 9 AM every day" | yee88 cron add daily "0 9 * * *" "Reminder content"
|
| "Remind me... every Monday" | yee88 cron add weekly "0 9 * * 1" "Reminder content"
|
| "View all reminders" | |
| "Delete reminder X" | yee88 cron remove X --force
|
| "Send this file to me" | yee88 send-file /path/to/file
|
| "Send this image to me" | yee88 send-file /path/to/image.png
|
One-Time Reminder Command Format
bash
yee88 cron add <id> "<time>" "<message>" -o
Parameter Description:
- : Task ID (e.g., reminder, meeting, break)
- : Relative time format , , , ,
- : User's original words or brief description (not execution result!)
- : Optional, project alias (e.g., takopi, myproject), executes in default context if not specified
- : One-time task (auto-delete after execution)
Correct Examples:
bash
# User says: "Remind me to work out in 5 minutes"
yee88 cron add reminder "+5m" "Time to work out" -o
# User says: "Remind me to attend a meeting in 30 minutes"
yee88 cron add meeting "+30m" "Meeting time" -o
# User says: "Remind me to check the weather in 1 minute"
# ✅ Correct: Only set the reminder, do not check the weather
yee88 cron add weather "+1m" "Check the weather" -o
# ❌ Wrong: Immediately check the weather and write the result into the message
# yee88 cron add weather "+1m" "Hangzhou is sunny today, 15°C..." -o
Full Capability Reference
1. Scheduled Tasks (Cron)
Register Project
Register project in specified directory:
bash
cd ~/dev/my-project
yee88 init myproject
View Project Configuration
bash
yee88 config list | grep projects
2. Configuration Management
View Configuration Path
List All Configurations
Get Configuration Item
Examples:
bash
yee88 config get default_engine
yee88 config get projects.myproject.path
Set Configuration Item
bash
yee88 config set <key> <value>
Examples:
bash
# Set default engine
yee88 config set default_engine "claude"
# Set default project
yee88 config set default_project "myproject"
# Set project path
yee88 config set projects.myproject.path "~/dev/my-project"
# Set project default engine
yee88 config set projects.myproject.default_engine "claude"
# Telegram settings
yee88 config set transports.telegram.session_mode "chat"
yee88 config set transports.telegram.show_resume_line false
# Engine-specific configuration
yee88 config set claude.model "claude-sonnet-4-5-20250929"
yee88 config set codex.profile "work"
Delete Configuration Item
3. Scheduled Tasks (Cron)
Add Scheduled Task
bash
yee88 cron add <id> <schedule> <message> [--project <alias>]
Parameters:
- : Unique task identifier
- : Cron expression (e.g., "0 9 * * 1-5")
- : Push message content
- : Optional, project alias (e.g., takopi), executes in default context if not specified
Examples:
bash
# Daily standup (9 AM on workdays)
yee88 cron add standup "0 9 * * 1-5" "Prepare for daily standup" --project work
# Weekly report (6 PM on Friday)
yee88 cron add weekly "0 18 * * 5" "Generate weekly work report" --project work
# Reminder (every 30 minutes)
yee88 cron add reminder "*/30 * * * *" "Rest your eyes" --project personal
List All Scheduled Tasks
Show all (including disabled):
Enable/Disable Tasks
bash
yee88 cron enable <id>
yee88 cron disable <id>
Delete Task
Force delete (no confirmation):
bash
yee88 cron remove <id> --force
Execute Once Immediately (Test)
Add One-Time Scheduled Task
Use
or
parameter to create tasks that only execute once and auto-delete after execution.
Supports two time formats:
- Relative time: (in 30 minutes), (in 2 hours), (in 1 day)
- ISO 8601: (specific date and time)
bash
# Remind in 30 minutes
yee88 cron add reminder "+30m" "Meeting time" --project work -o
# Deploy in 2 hours
yee88 cron add deploy "+2h" "Deploy to production environment" --project myapp -o
# Reminder at specific time
yee88 cron add meeting "2026-02-01T14:00:00" "Project review meeting" --project work -o
One-time tasks will be marked as
type when viewing task list:
bash
yee88 cron list
# Output: ID TYPE SCHEDULE STATUS PROJECT
4. Topic Management
Initialize Topic
bash
yee88 topic init [PROJECT] [--branch [NAME]]
Create Telegram topic in current directory and bind to project. By default, only binds to project directory, no git branch association required, can run without git repository.
| Command | Effect |
|---|
| Bind current directory (project name = directory name) |
yee88 topic init --branch
| Automatically get current git branch, bind project@branch |
yee88 topic init --branch main
| Bind project@main |
yee88 topic init --branch feat/x
| Bind project@feat/x |
Examples:
bash
# Non-git directory / Do not want to bind branch
yee88 topic init myproject
# Bind current git branch
yee88 topic init myproject --branch
# Bind specified branch
yee88 topic init myproject --branch feat/new-feature
Delete Topic
bash
yee88 topic delete [PROJECT] [--branch [NAME]]
Manage Topics in Telegram
bash
/topic <project> [@branch] # Create/bind topic
/ctx set <project> [@branch] # Bind context
/ctx show # View context
/new # Clear session records in topic
5. Engine Operation
Start yee88
Start with Specified Engine
bash
yee88 claude
yee88 codex
yee88 opencode
yee88 pi
Start with Options
bash
yee88 --debug
yee88 --onboard
yee88 --transport telegram
6. Diagnostic Check
Run Configuration Check
Check if configuration is correct, including:
- Telegram bot token
- Chat ID
- Engine availability
- Project configuration
7. Plugin Management
List Plugins
Validate Plugins
8. Get Chat ID
Start temporary bot to capture Telegram chat ID.
9. View Onboarding Paths
Display all possible configuration paths.
Configuration Reference
Configuration File Locations
- Main configuration:
- Scheduled tasks:
- Topic status:
~/.yee88/telegram_topics_state.json
Common Configuration Examples
toml
# ~/.yee88/yee88.toml
watch_config = true
default_engine = "claude"
default_project = "myproject"
transport = "telegram"
[transports.telegram]
bot_token = "YOUR_BOT_TOKEN"
chat_id = 123456789
session_mode = "chat"
show_resume_line = false
[projects.myproject]
path = "~/dev/my-project"
default_engine = "claude"
Usage Scenarios
Scenario 1: Daily Workflow Automation
bash
# 1. Register project
cd ~/dev/work-project
yee88 init work
# 2. Set default project
yee88 config set default_project work
# 3. Add scheduled tasks (use project alias)
yee88 cron add morning "0 9 * * 1-5" "Prepare for daily standup" --project work
yee88 cron add evening "0 18 * * 1-5" "Summarize today's work" --project work
yee88 cron add weekly "0 17 * * 5" "Generate weekly report" --project work
# 4. Start yee88
yee88
Scenario 2: Multi-Project Management
bash
# Register multiple projects
cd ~/dev/project-a && yee88 init project-a
cd ~/dev/project-b && yee88 init project-b
# Set different default engines
yee88 config set projects.project-a.default_engine "claude"
yee88 config set projects.project-b.default_engine "codex"
# Create topics for each project
cd ~/dev/project-a
yee88 topic init
cd ~/dev/project-b
yee88 topic init
Scenario 3: Team Collaboration
bash
# 1. Configure group chat_id
yee88 config set transports.telegram.chat_id -1001234567890
# 2. Enable topic mode
yee88 config set transports.telegram.topics.enabled true
# 3. Create team topic
yee88 topic init team-project --branch main
# 4. Set scheduled reminders (use project alias)
yee88 cron add daily-sync "0 10 * * 1-5" "Team sync time" --project team-project
Scenario 4: Temporary Reminders and One-Time Tasks
bash
# Remind myself to rest in 30 minutes
yee88 cron add break "+30m" "Rest your eyes and move around" --project personal -o
# Meeting reminder at 3 PM today
yee88 cron add meeting "2026-02-01T15:00:00" "Attend product review meeting" --project work -o
# Execute code review tomorrow morning
yee88 cron add review "+1d" "Review yesterday's PR" --project work -o
Troubleshooting
Check Configuration
View Logs
bash
# yee88 logs
tail -f /tmp/yee88.log
# Scheduled task logs
tail -f /tmp/yee88-cron.log
Validate Cron Expression
bash
python -c "from croniter import croniter; print(croniter('0 9 * * *').get_next(str))"
Test Task
Notes
-
Project Alias Requirements:
- Use project alias (e.g., , ) for in scheduled tasks
- View registered projects via
yee88 config list | grep projects
- Register new projects using
-
Configuration Hot Reload:
- Set to enable hot reload of configuration
- Restart yee88 after modifying scheduled task configuration
-
Scheduling Precision:
- Scheduled tasks are checked every minute
- Actual execution may have a delay within 1 minute
-
Permission Issues:
- Ensure yee88 command is in PATH
- Keep yee88 running when scheduled tasks are executed
-
One-Time Tasks:
- Create using or parameter
- Supports relative time (, , ) and ISO 8601 format
- Auto-delete from list after execution
- Cannot use enable/disable on one-time tasks (auto-delete before execution)
10. Session Handoff
Send current OpenCode session context to Telegram for continued conversation on mobile.
Features:
- Automatically list recent sessions of current project (with topic names)
- Create new Telegram Topic after selecting session
- Send session context and recent messages to Topic
- Continue conversation directly in Telegram
Options:
- : Specify session ID (interactive selection by default)
- : Number of messages to include (default 3)
- : Project name
Examples:
bash
yee88 handoff
yee88 handoff -s ses_abc123 -n 5
11. Send File/Image (send-file)
Send files or images to Telegram. Automatically detect file type: image types use sendPhoto (display directly in chat), other types use sendDocument (as attachment).
bash
yee88 send-file <file_path> [--chat-id <id>] [--thread-id <id>] [--caption <text>]
Parameters:
- : File path (required)
- : Telegram chat ID (read from configuration or environment variable by default)
- : Telegram thread ID (read from environment variable by default)
- : Optional file description
When used in OpenCode session,
and
environment variables are automatically injected, no need to specify manually:
bash
# Direct use in OpenCode session (environment variables auto-injected)
yee88 send-file /path/to/screenshot.png
yee88 send-file /path/to/report.pdf --caption "Today's report"
# Manually specify chat_id (when using CLI independently)
yee88 send-file /path/to/image.png --chat-id 123456789
yee88 send-file /path/to/doc.pdf -c 123456789 -t 456
Supported image formats (display directly): png, jpg, jpeg, gif, webp, bmp
Other formats (as attachment): pdf, zip, txt, csv, xlsx, etc.
Complete Command Cheat Sheet
| Command | Description |
|---|
| Start yee88 |
| Register project |
| Handoff session to Telegram |
| View configuration path |
| List configurations |
| Get configuration item |
yee88 config set <key> <value>
| Set configuration item |
| Delete configuration item |
yee88 cron add <id> <schedule> <msg> [--project <alias>]
| Add scheduled task |
yee88 cron add <id> <time> <msg> [-p <alias>] -o
| Add one-time task (-o = --one-time) |
| List scheduled tasks |
| Enable task |
| Disable task |
| Delete task |
| Execute task immediately |
yee88 topic init [PROJECT] [--branch [NAME]]
| Initialize topic |
yee88 topic delete [PROJECT] [--branch [NAME]]
| Delete topic |
| Run diagnostic check |
| List plugins |
| Get Chat ID |
| Use Claude engine |
| Use Codex engine |
| Use OpenCode engine |
| Use Pi engine |
| Send file/image to Telegram |