diff --git a/HOW_TO_USE_EMAIL_REPLY.md b/HOW_TO_USE_EMAIL_REPLY.md deleted file mode 100644 index 2b0d7fc..0000000 --- a/HOW_TO_USE_EMAIL_REPLY.md +++ /dev/null @@ -1,156 +0,0 @@ -# TaskPing Email Reply Feature Guide - -**English** | [中文](./HOW_TO_USE_EMAIL_REPLY_ZH.md) - -## 📋 Complete Usage Workflow - -### Step 1: Start Email Listening Service -Run in Terminal 1: -```bash -cd /Users/jessytsui/dev/TaskPing -npm run relay:pty -``` - -This will start the email listening service, monitoring replies to `noreply@example.com`. - -### Step 2: Start Claude Code and Integrate TaskPing -Run in Terminal 2: -```bash -# Start Claude Code -claude - -# Use TaskPing in Claude Code to send email notifications -# Example: Email notifications will be sent automatically when tasks complete -``` - -### Step 3: Configure Claude Code Hooks (if not configured) -Run in Claude Code: -```bash -# View current hook configuration -cat ~/.config/claude-code/settings/hooks.json - -# If not configured, set up TaskPing hooks -# Copy TaskPing's hook configuration file -``` - -## 📧 Email Reply Test Workflow - -### Method 1: Manual Email Test -```bash -# Run in TaskPing directory -node test-smtp-token.js -``` - -This will send a test email to `user@example.com` with a subject containing Token format: -`[TaskPing #XXXXXXXX] Claude Code Task Completed - TaskPing-Token-Test` - -### Method 2: Integration Test -1. Execute a task in Claude Code -2. After task completion, TaskPing will automatically send email notification -3. Email will be sent to configured mailbox (`user@example.com`) - -## 💌 How to Reply to Send Commands - -### After Receiving Email: -1. Receive email at `user@example.com` with subject like: - ``` - [TaskPing #A53PXR7F] Claude Code Task Completed - Project Name - ``` - -2. **Reply directly to the email** with commands in the body: - ``` - Continue optimizing code - ``` - or - ``` - Generate unit tests - ``` - or - ``` - Explain the purpose of this function - ``` - -3. After sending reply, the email listening service will: - - Receive the reply email - - Extract the Token (A53PXR7F) - - Find corresponding PTY session - - Inject command into Claude Code CLI - -## 🔧 Configuration File Description - -### .env Configuration -```env -# Outgoing Mail Configuration (Feishu Email) -SMTP_HOST=smtp.feishu.cn -SMTP_USER=noreply@example.com -SMTP_PASS=your-smtp-password - -# Incoming Mail Configuration (Feishu Email) -IMAP_HOST=imap.feishu.cn -IMAP_USER=noreply@example.com -IMAP_PASS=your-imap-password - -# User Notification Email -EMAIL_TO=user@example.com - -# Allowed Command Senders (Security Whitelist) -ALLOWED_SENDERS=user@example.com -``` - -## 🐛 Troubleshooting - -### 1. Not Receiving Email Replies -Check: -- Email listening service is running (`npm run relay:pty`) -- Reply is sent from whitelisted email (`user@example.com`) -- Email subject contains correct Token format - -### 2. Commands Not Injected into Claude Code -Check: -- Claude Code is still running -- PTY session is still valid (Token not expired) -- Check service log output - -### 3. View Debug Logs -```bash -# View detailed email listening logs -DEBUG=true npm run relay:pty -``` - -## 📱 Supported Email Clients - -Users can reply from any email to `noreply@example.com`: -- ✅ Gmail Web/Client -- ✅ Mobile Gmail App -- ✅ Apple Mail -- ✅ Outlook -- ✅ QQ Mail -- ✅ 163 Mail -- ✅ Any SMTP-supported email - -## 🔒 Security Features - -1. **Token Verification**: Each session has unique Token to prevent misoperation -2. **Sender Whitelist**: Only authorized emails can send commands -3. **Session Expiry**: Token valid for 24 hours -4. **Command Filtering**: Automatically filters potentially dangerous commands - -## 🎯 Real-world Use Cases - -### Scenario 1: Long Build Process -``` -1. Start project build in Claude Code -2. Leave computer, receive build completion email on phone -3. Reply directly from phone: "Continue deployment to production" -4. Deployment completed when returning to computer -``` - -### Scenario 2: Code Review -``` -1. Claude Code completes code generation -2. Receive email notification -3. Reply: "Please add unit tests and documentation" -4. Claude automatically generates tests and docs -``` - -This enables true remote control of Claude Code! \ No newline at end of file diff --git a/HOW_TO_USE_EMAIL_REPLY_ZH.md b/HOW_TO_USE_EMAIL_REPLY_ZH.md deleted file mode 100644 index 05b4b69..0000000 --- a/HOW_TO_USE_EMAIL_REPLY_ZH.md +++ /dev/null @@ -1,156 +0,0 @@ -# TaskPing 邮件回复功能使用指南 - -[English](./HOW_TO_USE_EMAIL_REPLY.md) | **中文** - -## 📋 完整使用流程 - -### 步骤1:启动邮件监听服务 -在终端1中运行: -```bash -cd /Users/jessytsui/dev/TaskPing -npm run relay:pty -``` - -这会启动邮件监听服务,监听 `noreply@example.com` 收到的回复邮件。 - -### 步骤2:启动Claude Code并集成TaskPing -在终端2中运行: -```bash -# 启动Claude Code -claude - -# 在Claude Code中使用TaskPing发送邮件通知 -# 例如:当任务完成时会自动发送邮件 -``` - -### 步骤3:配置Claude Code钩子(如果还没配置) -在Claude Code中运行: -```bash -# 查看当前钩子配置 -cat ~/.config/claude-code/settings/hooks.json - -# 如果没有配置,需要设置TaskPing钩子 -# 复制TaskPing的钩子配置文件 -``` - -## 📧 邮件回复测试流程 - -### 方法1:手动测试发送邮件 -```bash -# 在TaskPing目录中运行 -node test-smtp-token.js -``` - -这会发送一封测试邮件到 `user@example.com`,邮件主题包含Token格式: -`[TaskPing #XXXXXXXX] Claude Code 任务完成 - TaskPing-Token-Test` - -### 方法2:实际集成测试 -1. 在Claude Code中执行一个任务 -2. 任务完成后,TaskPing会自动发送邮件通知 -3. 邮件会发送到配置的邮箱(`user@example.com`) - -## 💌 如何回复邮件发送命令 - -### 收到邮件后: -1. 在 `user@example.com` 收到邮件,主题如: - ``` - [TaskPing #A53PXR7F] Claude Code 任务完成 - 项目名 - ``` - -2. **直接回复邮件**,在正文中输入命令: - ``` - 继续优化代码 - ``` - 或 - ``` - 生成单元测试 - ``` - 或 - ``` - 解释这个函数的作用 - ``` - -3. 发送回复后,邮件监听服务会: - - 收到回复邮件 - - 提取Token(A53PXR7F) - - 找到对应的PTY会话 - - 将命令注入到Claude Code CLI - -## 🔧 配置文件说明 - -### .env 配置 -```env -# 发件配置(飞书邮箱) -SMTP_HOST=smtp.feishu.cn -SMTP_USER=noreply@example.com -SMTP_PASS=kKgS3tNReRTL3RQC - -# 收件配置(飞书邮箱) -IMAP_HOST=imap.feishu.cn -IMAP_USER=noreply@example.com -IMAP_PASS=kKgS3tNReRTL3RQC - -# 用户通知邮箱 -EMAIL_TO=user@example.com - -# 允许发送命令的邮箱(安全白名单) -ALLOWED_SENDERS=user@example.com -``` - -## 🐛 故障排除 - -### 1. 收不到邮件回复 -检查: -- 邮件监听服务是否正在运行(`npm run relay:pty`) -- 是否从白名单邮箱(`user@example.com`)发送回复 -- 邮件主题是否包含正确的Token格式 - -### 2. 命令没有注入到Claude Code -检查: -- Claude Code是否还在运行 -- PTY会话是否还有效(Token未过期) -- 检查服务日志输出 - -### 3. 查看调试日志 -```bash -# 查看详细的邮件监听日志 -DEBUG=true npm run relay:pty -``` - -## 📱 支持的邮件客户端 - -用户可以从任意邮箱回复到 `noreply@example.com`: -- ✅ Gmail 网页版/客户端 -- ✅ 手机Gmail APP -- ✅ Apple Mail -- ✅ Outlook -- ✅ QQ邮箱 -- ✅ 163邮箱 -- ✅ 任何支持SMTP的邮箱 - -## 🔒 安全特性 - -1. **Token验证**:每个会话有唯一Token,防止误操作 -2. **发件人白名单**:只有授权邮箱可以发送命令 -3. **会话过期**:Token有24小时有效期 -4. **命令过滤**:自动过滤潜在危险命令 - -## 🎯 实际使用场景 - -### 场景1:长时间构建 -``` -1. 在Claude Code中启动项目构建 -2. 离开电脑,在手机收到构建完成邮件 -3. 手机直接回复:"继续部署到生产环境" -4. 回到电脑时部署已完成 -``` - -### 场景2:代码审查 -``` -1. Claude Code完成代码生成 -2. 收到邮件通知 -3. 回复:"请添加单元测试和文档" -4. Claude自动生成测试和文档 -``` - -这样就可以实现真正的远程控制Claude Code了! \ No newline at end of file diff --git a/README.md b/README.md index 65e6c4b..4be36b3 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Control [Claude Code](https://claude.ai/code) remotely via email. Start tasks lo ### 🎥 Watch Demo Video - Claude Code Remote Demo + Claude Code Remote Demo
Watch on YouTube
@@ -18,15 +18,48 @@ Control [Claude Code](https://claude.ai/code) remotely via email. Start tasks lo ## ✨ Features -- **📧 Email Notifications**: Get notified when Claude completes tasks +- **📧 Email Notifications**: Get notified when Claude completes tasks ![](./assets/email_demo.png) - **🔄 Email Control**: Reply to emails to send new commands to Claude - **📱 Remote Access**: Control Claude from anywhere with just email - **🔒 Secure**: Whitelist-based sender verification - **📋 Multi-line Support**: Send complex commands with formatting -## 🚀 Quick Start -### 1. Install +## 📅 Changelog + +### January 2025 +- **2025-01-15**: Implement terminal-style UI for email notifications ([#8](https://github.com/JessyTsui/Claude-Code-Remote/pull/8) by [@vaclisinc](https://github.com/vaclisinc)) +- **2025-01-15**: Fix working directory issue - enable claude-remote to run from any directory ([#7](https://github.com/JessyTsui/Claude-Code-Remote/pull/7) by [@vaclisinc](https://github.com/vaclisinc)) +- **2025-01-14**: Fix self-reply loop issue when using same email for send/receive ([#4](https://github.com/JessyTsui/Claude-Code-Remote/pull/4) by [@vaclisinc](https://github.com/vaclisinc)) + +### July 2025 +- **2025-07-28**: Remove hardcoded values and implement environment-based configuration ([#2](https://github.com/JessyTsui/Claude-Code-Remote/pull/2) by [@kevinsslin](https://github.com/kevinsslin)) + +## 📋 TODO List + +### Notification Channels +- [ ] **Discord & Telegram**: Bot integration for messaging platforms +- [ ] **Slack Workflow**: Native Slack app with slash commands + +### Developer Tools +- [ ] **AI Tools**: Support for Gemini CLI, Cursor, and other AI tools +- [ ] **Git Automation**: Auto-commit, PR creation, branch management + +### Usage Analytics +- [ ] **Cost Tracking**: Token usage and estimated costs +- [ ] **Performance Metrics**: Execution time and resource usage +- [ ] **Scheduled Reports**: Daily/weekly usage summaries via email + +### Native Apps +- [ ] **Mobile Apps**: iOS and Android applications +- [ ] **Desktop Apps**: macOS and Windows native clients + + +## 🚀 Setup Guide + +Follow these steps to get Claude Code Remote running: + +### Step 1: Clone and Install Dependencies ```bash git clone https://github.com/JessyTsui/Claude-Code-Remote.git @@ -34,32 +67,52 @@ cd Claude-Code-Remote npm install ``` -### 2. Configure Email +### Step 2: Configure Email Settings ```bash -# Copy example config +# Copy the example configuration cp .env.example .env -# Edit with your email credentials -nano .env +# Open .env in your editor +nano .env # or use vim, code, etc. ``` -**Required settings:** +Edit the `.env` file with your email credentials: + ```env +# Email account for sending notifications SMTP_USER=your-email@gmail.com -SMTP_PASS=your-app-password +SMTP_PASS=your-app-password # Gmail: use App Password, not regular password + +# Email account for receiving replies (can be same as SMTP) IMAP_USER=your-email@gmail.com IMAP_PASS=your-app-password + +# Where to send notifications EMAIL_TO=your-notification-email@gmail.com + +# Who can send commands (security whitelist) ALLOWED_SENDERS=your-notification-email@gmail.com -SESSION_MAP_PATH=/your/path/to/Claude-Code-Remote/src/data/session-map.json + +# Path to session data (use absolute path) +SESSION_MAP_PATH=/your/absolute/path/to/Claude-Code-Remote/src/data/session-map.json ``` -📌 **Gmail users**: Use [App Passwords](https://myaccount.google.com/security), not your regular password. +📌 **Gmail users**: Create an [App Password](https://myaccount.google.com/security) instead of using your regular password. -### 3. Configure Claude Code Hooks +### Step 3: Set Up Claude Code Hooks -Add to `~/.claude/settings.json`: +Open Claude's settings file: + +```bash +# Create the directory if it doesn't exist +mkdir -p ~/.claude + +# Edit settings.json +nano ~/.claude/settings.json +``` + +Add this configuration (replace `/your/absolute/path/` with your actual path): ```json { @@ -68,7 +121,7 @@ Add to `~/.claude/settings.json`: "matcher": "*", "hooks": [{ "type": "command", - "command": "node /your/path/to/Claude-Code-Remote/claude-remote.js notify --type completed", + "command": "node /your/absolute/path/to/Claude-Code-Remote/claude-remote.js notify --type completed", "timeout": 5 }] }], @@ -76,7 +129,7 @@ Add to `~/.claude/settings.json`: "matcher": "*", "hooks": [{ "type": "command", - "command": "node /your/path/to/Claude-Code-Remote/claude-remote.js notify --type waiting", + "command": "node /your/absolute/path/to/Claude-Code-Remote/claude-remote.js notify --type waiting", "timeout": 5 }] }] @@ -84,86 +137,149 @@ Add to `~/.claude/settings.json`: } ``` -### 4. Start +### Step 4: Test Your Setup ```bash -# Start email monitoring -npm run relay:pty +# Test email configuration +node claude-remote.js test +``` -# In another terminal, start Claude Code -tmux new-session -d -s my-project -tmux attach -t my-project +You should receive a test email. If not, check your email settings. + +### Step 5: Start Claude Code Remote + +**Terminal 1 - Start email monitoring:** +```bash +npm run relay:pty +``` + +Keep this running. You should see: +``` +🚀 Claude Code Remote is running! +📧 Monitoring emails... +``` + +**Terminal 2 - Start Claude in tmux:** +```bash +# Create a new tmux session +tmux new-session -s my-project + +# Inside tmux, start Claude claude ``` -## 🎮 How It Works +### Step 6: You're Ready! -1. **Use Claude normally** in tmux session -2. **Get email notifications** when Claude completes tasks -3. **Reply to emails** with new commands -4. **Commands execute automatically** in Claude +1. Use Claude normally in the tmux session +2. When Claude completes a task, you'll receive an email +3. Reply to the email with new commands +4. Your commands will execute automatically in Claude -📖 **Detailed Email Reply Guide**: [English](./HOW_TO_USE_EMAIL_REPLY.md) | [中文](./HOW_TO_USE_EMAIL_REPLY_ZH.md) +### Verify Everything Works -### Example Email Flow +In Claude, type: +``` +What is 2+2? +``` + +Wait for Claude to respond, then check your email. You should receive a notification! + +## 📖 How to Use + +### Email Notifications +When Claude completes a task, you'll receive an email notification: -**📩 Notification received:** ``` Subject: Claude Code Remote Task Complete [#ABC123] -Claude completed: "Analyze the code structure" -[Claude's full response...] +Claude completed: "analyze the code structure" -Reply to send new commands. +[Claude's full response here...] + +Reply to this email to send new commands. ``` -**📨 Your reply:** +### Sending Commands via Email Reply + +1. **Direct Reply**: Simply reply to the notification email +2. **Write Command**: Type your command in the email body: + ``` + Please refactor the main function and add error handling + ``` +3. **Send**: Your command will automatically execute in Claude! + +### Advanced Email Features + +**Multi-line Commands** ``` -Please optimize the performance and fix any bugs you find. +First analyze the current code structure. +Then create a comprehensive test suite. +Finally, update the documentation. ``` -**⚡ Result:** Your command automatically executes in Claude! +**Complex Instructions** +``` +Refactor the authentication module with these requirements: +- Use JWT tokens instead of sessions +- Add rate limiting +- Implement refresh token logic +- Update all related tests +``` -## 💡 Use Cases +### Email Reply Workflow -- **Remote Code Reviews**: Start reviews at office, continue from home via email -- **Long-running Tasks**: Monitor progress and guide next steps remotely -- **Multi-location Development**: Control Claude from anywhere without VPN +1. **Receive Notification** → You get an email when Claude completes a task +2. **Reply with Command** → Send your next instruction via email reply +3. **Automatic Execution** → The system extracts your command and injects it into Claude +4. **Get Results** → Receive another email when the new task completes -## 🔧 Commands +### Supported Email Clients + +Works with any email client that supports standard reply functionality: +- ✅ Gmail (Web/Mobile) +- ✅ Apple Mail +- ✅ Outlook +- ✅ Any SMTP-compatible email client + +## 💡 Common Use Cases + +- **Remote Development**: Start coding at the office, continue from home via email +- **Long Tasks**: Let Claude work while you're in meetings, check results via email +- **Team Collaboration**: Share Claude sessions by forwarding notification emails + +## 🔧 Useful Commands ```bash -# Test functionality +# Test email setup node claude-remote.js test -# Check status +# Check system status node claude-remote.js status -# View pending commands -node claude-remote.js commands list - -# Manage sessions +# View tmux sessions tmux list-sessions -tmux attach -t session-name +tmux attach -t my-project + +# Stop email monitoring +# Press Ctrl+C in the terminal running npm run relay:pty ``` ## 🔍 Troubleshooting -**Email not working?** -```bash -node claude-remote.js test # Test email setup -``` +**Not receiving emails?** +- Run `node claude-remote.js test` to test email setup +- Check spam folder +- Verify SMTP settings in `.env` +- For Gmail: ensure you're using App Password -**Commands not injecting?** -```bash -tmux list-sessions # Check if session exists -grep ALLOWED_SENDERS .env # Verify sender whitelist -``` +**Commands not executing?** +- Ensure tmux session is running: `tmux list-sessions` +- Check sender email matches `ALLOWED_SENDERS` in `.env` +- Verify Claude is running inside tmux -**Hooks not triggering?** -```bash -node claude-remote.js notify --type completed # Test manually -``` +**Need help?** +- Check [Issues](https://github.com/JessyTsui/Claude-Code-Remote/issues) +- Follow [@Jiaxi_Cui](https://x.com/Jiaxi_Cui) for updates ## 🛡️ Security diff --git a/CCRemote_demo.png b/assets/CCRemote_demo.png similarity index 100% rename from CCRemote_demo.png rename to assets/CCRemote_demo.png diff --git a/assets/email_demo.png b/assets/email_demo.png new file mode 100644 index 0000000..5ab2223 Binary files /dev/null and b/assets/email_demo.png differ diff --git a/src/data/processed-messages.json b/src/data/processed-messages.json index 02ff827..5c0b24a 100644 --- a/src/data/processed-messages.json +++ b/src/data/processed-messages.json @@ -1,42 +1,46 @@ [ { "id": 1312, - "timestamp": 1754021490457 + "timestamp": 1754022727524 }, { "id": 1315, - "timestamp": 1754021490457 + "timestamp": 1754022727524 }, { "id": 1310, - "timestamp": 1754021490457 + "timestamp": 1754022727524 }, { "id": 1323, - "timestamp": 1754021490457 + "timestamp": 1754022727524 }, { "id": 1331, - "timestamp": 1754021490457 + "timestamp": 1754022727524 }, { "id": 1334, - "timestamp": 1754021490457 + "timestamp": 1754022727524 }, { "id": 1342, - "timestamp": 1754021490457 + "timestamp": 1754022727524 }, { "id": 1346, - "timestamp": 1754021490457 + "timestamp": 1754022727524 }, { "id": 1348, - "timestamp": 1754021490457 + "timestamp": 1754022727524 }, { "id": 180, - "timestamp": 1754021490457 + "timestamp": 1754022727524 + }, + { + "id": 1691, + "timestamp": 1754022727524 } ] \ No newline at end of file diff --git a/src/data/sent-messages.json b/src/data/sent-messages.json index 5099b92..077538b 100644 --- a/src/data/sent-messages.json +++ b/src/data/sent-messages.json @@ -41,6 +41,97 @@ "token": "L4KQ8DVJ", "type": "notification", "sentAt": "2025-08-01T04:12:15.795Z" + }, + { + "messageId": "", + "sessionId": "e3392712-9a5b-4c96-a23c-5d97c226b415", + "token": "7ZFMSK5P", + "type": "notification", + "sentAt": "2025-08-01T04:30:41.978Z" + }, + { + "messageId": "<5d19da23-5c9d-4855-824e-fbd09a0d986c-1754022731688@claude-code-remote>", + "sessionId": "5d19da23-5c9d-4855-824e-fbd09a0d986c", + "token": "PJOE746Q", + "type": "notification", + "sentAt": "2025-08-01T04:32:13.100Z" + }, + { + "messageId": "", + "sessionId": "ed814c4b-0b97-4e10-8ad1-dae1a7cb7ef9", + "token": "C9I24JHD", + "type": "notification", + "sentAt": "2025-08-01T04:35:28.987Z" + }, + { + "messageId": "<46ae2185-2f70-4355-a3b8-9fc04fa01181-1754023256348@claude-code-remote>", + "sessionId": "46ae2185-2f70-4355-a3b8-9fc04fa01181", + "token": "GGBKJ2DV", + "type": "notification", + "sentAt": "2025-08-01T04:40:58.066Z" + }, + { + "messageId": "<49c51c77-8ecc-4a04-a7a8-5955f89411b1-1754023825872@claude-code-remote>", + "sessionId": "49c51c77-8ecc-4a04-a7a8-5955f89411b1", + "token": "DQH198YY", + "type": "notification", + "sentAt": "2025-08-01T04:50:27.443Z" + }, + { + "messageId": "", + "sessionId": "cc5a1eba-7e04-44e6-919f-0395ddf2ee08", + "token": "GQE6LLIF", + "type": "notification", + "sentAt": "2025-08-01T04:54:16.491Z" + }, + { + "messageId": "<63198b90-3b9d-4448-a932-7c39c771554a-1754024273245@claude-code-remote>", + "sessionId": "63198b90-3b9d-4448-a932-7c39c771554a", + "token": "WYKEGTXV", + "type": "notification", + "sentAt": "2025-08-01T04:57:54.938Z" + }, + { + "messageId": "", + "sessionId": "bfd8b8d0-bcc4-4336-a6eb-8ca3f8b6c96e", + "token": "ATUBLIN1", + "type": "notification", + "sentAt": "2025-08-01T05:19:18.866Z" + }, + { + "messageId": "", + "sessionId": "cdbfc3f9-e27e-47d9-82b9-9058f0180fff", + "token": "2W24RZTM", + "type": "notification", + "sentAt": "2025-08-01T05:20:35.851Z" + }, + { + "messageId": "", + "sessionId": "cf18cb3b-bc72-46ea-985f-2b7f29f0993f", + "token": "PHAVU604", + "type": "notification", + "sentAt": "2025-08-01T05:24:16.539Z" + }, + { + "messageId": "<6da5d6f6-7e68-47eb-8676-175d77f0ddbc-1754026029245@claude-code-remote>", + "sessionId": "6da5d6f6-7e68-47eb-8676-175d77f0ddbc", + "token": "C2APCY3V", + "type": "notification", + "sentAt": "2025-08-01T05:27:10.601Z" + }, + { + "messageId": "<9143d717-be05-4869-b40a-2c775addcfc4-1754026119754@claude-code-remote>", + "sessionId": "9143d717-be05-4869-b40a-2c775addcfc4", + "token": "N5P4GUG3", + "type": "notification", + "sentAt": "2025-08-01T05:28:41.439Z" + }, + { + "messageId": "<6fb2932d-d4ac-427b-8b7d-54af44fee1f2-1754026220881@claude-code-remote>", + "sessionId": "6fb2932d-d4ac-427b-8b7d-54af44fee1f2", + "token": "CZIKHCFO", + "type": "notification", + "sentAt": "2025-08-01T05:30:22.303Z" } ] } \ No newline at end of file diff --git a/src/data/session-map.json b/src/data/session-map.json index 2b79bdb..bfe17e4 100644 --- a/src/data/session-map.json +++ b/src/data/session-map.json @@ -610,5 +610,122 @@ "sessionId": "2b30b1f7-b9c3-4cb4-b889-11c58009bd07", "tmuxSession": "test-session", "description": "completed - Claude-Code-Remote-Test" + }, + "7ZFMSK5P": { + "type": "pty", + "createdAt": 1754022640, + "expiresAt": 1754109040, + "cwd": "/Users/jessytsui/dev/Claude-Code-Remote", + "sessionId": "e3392712-9a5b-4c96-a23c-5d97c226b415", + "tmuxSession": "a", + "description": "completed - Claude-Code-Remote" + }, + "PJOE746Q": { + "type": "pty", + "createdAt": 1754022731, + "expiresAt": 1754109131, + "cwd": "/Users/jessytsui/dev/Claude-Code-Remote", + "sessionId": "5d19da23-5c9d-4855-824e-fbd09a0d986c", + "tmuxSession": "a", + "description": "completed - Claude-Code-Remote" + }, + "C9I24JHD": { + "type": "pty", + "createdAt": 1754022927, + "expiresAt": 1754109327, + "cwd": "/Users/jessytsui/dev/Claude-Code-Remote", + "sessionId": "ed814c4b-0b97-4e10-8ad1-dae1a7cb7ef9", + "tmuxSession": "a", + "description": "completed - Claude-Code-Remote" + }, + "GGBKJ2DV": { + "type": "pty", + "createdAt": 1754023256, + "expiresAt": 1754109656, + "cwd": "/Users/jessytsui/dev/Claude-Code-Remote", + "sessionId": "46ae2185-2f70-4355-a3b8-9fc04fa01181", + "tmuxSession": "a", + "description": "completed - Claude-Code-Remote" + }, + "DQH198YY": { + "type": "pty", + "createdAt": 1754023825, + "expiresAt": 1754110225, + "cwd": "/Users/jessytsui/dev/Claude-Code-Remote", + "sessionId": "49c51c77-8ecc-4a04-a7a8-5955f89411b1", + "tmuxSession": "a", + "description": "completed - Claude-Code-Remote" + }, + "GQE6LLIF": { + "type": "pty", + "createdAt": 1754024054, + "expiresAt": 1754110454, + "cwd": "/Users/jessytsui/dev/Claude-Code-Remote", + "sessionId": "cc5a1eba-7e04-44e6-919f-0395ddf2ee08", + "tmuxSession": "a", + "description": "completed - Claude-Code-Remote" + }, + "WYKEGTXV": { + "type": "pty", + "createdAt": 1754024273, + "expiresAt": 1754110673, + "cwd": "/Users/jessytsui/dev/Claude-Code-Remote", + "sessionId": "63198b90-3b9d-4448-a932-7c39c771554a", + "tmuxSession": "a", + "description": "completed - Claude-Code-Remote" + }, + "ATUBLIN1": { + "type": "pty", + "createdAt": 1754025557, + "expiresAt": 1754111957, + "cwd": "/Users/jessytsui/dev/Claude-Code-Remote", + "sessionId": "bfd8b8d0-bcc4-4336-a6eb-8ca3f8b6c96e", + "tmuxSession": "a", + "description": "completed - Claude-Code-Remote" + }, + "2W24RZTM": { + "type": "pty", + "createdAt": 1754025634, + "expiresAt": 1754112034, + "cwd": "/Users/jessytsui/dev/Claude-Code-Remote", + "sessionId": "cdbfc3f9-e27e-47d9-82b9-9058f0180fff", + "tmuxSession": "a", + "description": "completed - Claude-Code-Remote" + }, + "PHAVU604": { + "type": "pty", + "createdAt": 1754025855, + "expiresAt": 1754112255, + "cwd": "/Users/jessytsui/dev/Claude-Code-Remote", + "sessionId": "cf18cb3b-bc72-46ea-985f-2b7f29f0993f", + "tmuxSession": "a", + "description": "completed - Claude-Code-Remote" + }, + "C2APCY3V": { + "type": "pty", + "createdAt": 1754026029, + "expiresAt": 1754112429, + "cwd": "/Users/jessytsui/dev/Claude-Code-Remote", + "sessionId": "6da5d6f6-7e68-47eb-8676-175d77f0ddbc", + "tmuxSession": "a", + "description": "completed - Claude-Code-Remote" + }, + "N5P4GUG3": { + "type": "pty", + "createdAt": 1754026119, + "expiresAt": 1754112519, + "cwd": "/Users/jessytsui/dev/Claude-Code-Remote", + "sessionId": "9143d717-be05-4869-b40a-2c775addcfc4", + "tmuxSession": "a", + "description": "completed - Claude-Code-Remote" + }, + "CZIKHCFO": { + "type": "pty", + "createdAt": 1754026220, + "expiresAt": 1754112620, + "cwd": "/Users/jessytsui/dev/Claude-Code-Remote", + "sessionId": "6fb2932d-d4ac-427b-8b7d-54af44fee1f2", + "tmuxSession": "a", + "description": "completed - Claude-Code-Remote" } } \ No newline at end of file