English | 繁體中文(台灣) | 日本語 | ภาษาไทย
Claude Code skills for working with a personal LINE account and the media people send you. Status: v0.1.2 (early software) - reading, local sync/archive and sending a text message were tested live on Windows, media digestion on synthetic media; sending fails only for some peers with old Letter Sealing keys. Details under Status.
- Unofficial project. It is not affiliated with, endorsed by, or sponsored by LINE Corporation / LY Corporation. "LINE" is a trademark of its owner and is used here only to describe what the software works with.
- It relies on the unofficial kongesque/line-cli client, which talks to LINE outside the official apps. Using it may put your LINE account at risk of suspension. Use at your own risk, preferably with an account you can afford to lose.
- Archived chats are private conversations. Keep the archive outside this repository and never commit or publish it.
Two independent Claude Code plugins:
- line-cli - read and search your personal LINE chats, groups and contacts, download attachments, and (with explicit confirmation every time) send, react to or unsend messages, through the kongesque/line-cli client.
- Guided first-time setup in plain language: installs
linefor you after you agree (pinned release, checksum-verified, no admin rights), then walks you through login. - Safe by design: Claude shows the chat, the exact text and the action and waits for your "yes". Writes are never retried automatically. Sends require end-to-end encryption by default: if a chat has none, nothing is sent unless you explicitly agree to a send without it.
- Chat names are resolved to IDs; ambiguous names are put to you, never guessed.
- Local archive:
sync.pysaves each chat's messages (a.jsonlrecord plus a readable.md) in a folder on your machine and downloads new attachments right away, so Claude can tell you what is new. A sync pages back through the history LINE still serves until it reaches what you already have, so messages missed between syncs are filled in automatically, and your history is kept from the day you start syncing; a first sync reads the latest 100 unless you ask for--backfill. - Who replied or reacted:
thread.pylists the replies and reactions to one archived message, andemoji.pykeeps short labels for the LINE emoji reactions that sync caches once per emoji (shared across chats). - Broadcast, live archive and VIP alerts:
broadcast.pysends one message to many chats (dry run first, sends only after your yes, stops at the first failure, never retries);watch.pykeeps the archive of the chats you chose live in the background (other chats are ignored), catches up after missed events and shows a Windows notification for new messages in your VIP chats; a sync reports agaponly when it stopped before reaching your archive (for example it hit the page limit); sync again with a higher--max-pagesto fill it.
- Guided first-time setup in plain language: installs
- media-digest - turn videos and audio into keyframes plus a timestamped transcript Claude can read. Works with any local file, not only LINE.
- Videos: keyframes by scene detection (with timestamps) and a transcript, merged into one
digest.mdtimeline. - Audio and voice messages: transcript with timestamps.
- Pluggable speech-to-text: local
faster-whisperandwhisper.cpp, any OpenAI-compatible service (OpenAI, Groq, vLLM, Speaches), or your own program. Local first; a cloud service is only used if you configure it.
- Videos: keyframes by scene detection (with timestamps) and a transcript, merged into one
- Images and PDFs need no processing; Claude reads them directly.
line-cli does not depend on media-digest. If both are installed, Claude uses media-digest for LINE videos and voice messages.
- Claude Code, and Python 3.11 or newer on your PATH (Windows, macOS or Linux).
line-cliplugin: thelineprogram. You do not install it by hand; Claude offers to do it.media-digestplugin (all optional, Claude offers to help install each when needed):ffmpegfor video and audio,uvplus a speech-to-text engine for transcripts (a local model download of about 1.6 GB by default).
Option A (recommended): inside Claude Code. Open Claude Code (the terminal app, or the Code tab of the Claude desktop app) and type these into its chat box, one line at a time, pressing Enter after each:
/plugin marketplace add timliudev/line-cli-skills
/plugin install line-cli@line-cli-skills
/plugin install media-digest@line-cli-skills
Then start a new Claude Code session so the plugins load.
Option B: from a terminal. If the claude command is installed, open PowerShell, Terminal or bash and run:
claude plugin marketplace add timliudev/line-cli-skills
claude plugin install line-cli@line-cli-skills
claude plugin install media-digest@line-cli-skillsImportant: lines that start with / are not terminal commands. Typing them into PowerShell, Terminal or bash gives "'/plugin' is not recognized". They only work inside Claude Code. In a terminal, use the claude plugin ... form of Option B.
Option C: other agents (Codex, Gemini CLI, Cursor, Copilot, OpenCode…). Both skills follow the open Agent Skills format, so any agent that supports it can use them. In a terminal (needs Node.js):
npx skills add timliudev/line-cli-skills- It finds both skills (
line-cli,media-digest), asks which agents to install for, and installs them under.agents/skills/(with links into each agent's own skills folder, for Claude Code.claude/skills/). - Scope: by default the skills go into the current project folder only; add
-g(npx skills add -g timliudev/line-cli-skills) to install for all your projects (~/.agents/skills/). - Update later with
npx skills update. - Do not install the same skill both ways on one machine. If you used Option A or B and also Option C, Claude Code sees two
line-cliskills. Pick one route; to switch, remove the other first (claude plugin uninstall line-cli@line-cli-skills, ornpx skills remove line-cli).
- In Claude Code say, for example: "Check my LINE group Family for new messages."
- The first time, Claude checks for
line, explains in plain words what it would install, and asks for your OK. Then it asks to log you in: a new terminal window opens where you scan a QR code with your phone. Logging in signs the LINE Chrome extension out. - After that, ask normally: read a chat, find a contact, "what was the video Anna sent about?" (needs
media-digest), or "reply OK to Anna". Anything that sends, reacts or unsends is confirmed with you first, every time.
See the user guide for details, configuration and troubleshooting.
v0.1.2 is early software. How far each part has been tested:
- Tested live (a real LINE account, Windows only): guided install, login, chat-name resolution, sync and archive, attachment downloads, group names.
- macOS and Linux: unit tests only. These have not been tried on a real macOS or Linux machine yet.
- Sending works (verified live on Windows with line-cli v0.4.0: a text message to a direct chat was delivered, end-to-end encrypted; re-verified on v0.5.0 in a group chat, including @mentions, @All and a reply to an older message). It failed only for some peers whose Letter Sealing key is an old version (LINE rejects it with TalkException 86; upstream does not fall back); that failure has not been re-tested on v0.5.0, which is now the pinned release. Then nothing is delivered, Claude tells you the message was not sent, and you send it from the LINE app. Replying (
--reply-to) uses the same send path but was not separately verified live. Reacting and unsending are implemented (confirmed every time) but have not been tried live. Since v0.5.0,linefalls back to HTTPS/TLS (no end-to-end encryption, LINE can read the content) when LINE reports that a chat has no E2EE; the skill blocks this by default (--require-e2ee): such a send fails withencryption_required, nothing is sent, and Claude only sends without E2EE if you explicitly agree. - media-digest: keyframe extraction was tested on synthetic media made with ffmpeg, not on real recordings. The speech-to-text adapters (faster-whisper, whisper.cpp, OpenAI-compatible, custom command) have not been run against a real engine or service yet; their unit tests use fakes.
- Evals: the 7 plugin evals (docs/EVALS.md) were run once each (3 runs per case) and all 7 passed. They check skill triggering and ask-before-writing behavior, not LINE itself.
- Known limit: if upstream
chats --searchfails, name search covers active chats only (the user guide's troubleshooting table has this and two other fixes). - @mentions: real mentions are possible: Claude looks the member up with
line membersand builds the mention (@All works in groups). Typing "@name" as plain text alone still does not notify anyone. - Known limit: one device at a time. LINE allows only one Chrome-style session per account, so logging in with line-cli on a second computer logs the first one out (it then fails with "LINE session was invalidated or replaced by another client"). Claude asks before logging in again, because that signs the other device out.
See the user guide and the changelog.
Built on top of kongesque/line-cli (MIT). This repo ships no upstream code; you install line yourself.
MIT - see LICENSE.