Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/javimosch-line-client
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: backend
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/line-client
What's inside
- Skill name
line-client- Description
- LINE messaging integration via Chrome extension gateway. Send/read LINE messages, manage contacts, groups, profile, and reactions. Authenticate with QR code login. Provides HMAC-signed API access through the Chrome extension gateway (line-chrome-gw.line-apps.com).
- License
- MIT
- Instructions
- 214 lines in SKILL.md · view on GitHub
Agent Skills spec issues
- name: "line-client" does not match folder "line-api"
Files (1)
- SKILL.md
SKILL.md (first lines)
# LINE Client Skill
Full LINE messaging client via the Chrome extension gateway JSON API.
## Repo & Files
- **Repo:** `/data/workspace/line-client` ([github.com/2manslkh/line-api](https://github.com/2manslkh/line-api))
- **Main client:** `src/chrome_client.py` → `LineChromeClient`
- **QR login:** `src/auth/qr_login.py` → `QRLogin`
- **HMAC signer:** `src/hmac/signer.js` (Node.js, auto-starts on port 18944)
- **Token storage:** `~/.line-client/tokens.json`
- **Certificate cache:** `~/.line-client/sqr_cert`
- **WASM files:** `lstm.wasm` + `lstmSandbox.js` (required, in repo root)
## Quick Start
```python
import json
from pathlib import Path
from src.chrome_client import LineChromeClient
tokens = json.loads((Path.home() / ".line-client" / "tokens.json").read_text())
client = LineChromeClient(auth_token=tokens["auth_token"])
# Send a message
client.send_message("U...", "Hello!")
# Get profile
profile = client.get_profile()
```
Tokens expire in ~7 days. If expired (`APIError(10051)`), re-run QR login.
## QR Login (Authentication)
QR login requires user interaction: scan QR on phone + enter PIN.
```python
from src.hmac import HmacSigner
from src.auth.qr_login import QRLogin
import qrcode
signer = HmacSigner(mode="server")
login = QRLogin(signer)
result = login.run(
on_qr=lambda url: send_qr_image_to_user(qrcode.make(url)),
on_pin=lambda pin: send_pin_to_user_IMMEDIATELY(pin), # TIME SENSITIVE!
on_status=lambda msg: print(msg),
)
# result.auth_token, result.mid, result.refresh_token
```
**Critical:** The PIN must reach the user within ~60 seconds. Send it the instant `on_pin` fires.
### QR Login State Machine
1. `createSession` → session ID
2. `createQrCode` → callback URL (append `?secret={curve25519_pubkey}&e2eeVersion=1`)
3. `checkQrCodeVerified` — poll until scan (uses `X-Line-Session-ID`, no `origin` header)
4. **`verifyCertificate`** — MUST be called even if it fails (required state transition!)
5. `createPinCode` → 6-digit PIN (skip if cert verified in step 4)
6. `checkPinCodeVerified` — poll until user enters PIN
7. `qrCodeLoginV2` → JWT token + certificate + refresh token
### Server-Side Login Script
```bash
python scripts/qr_login_server.py /tmp/qr.png
```
Emits JSON events on stdout: `{"event": "qr", "path": "...", "url": "..."}`, `{"event": "pin", "pin": "123456"}`, `{"event": "done", "mid": "U..."}`.
## All API Methods
### Contacts & Friends
| Method | Args | Description |
|--------|------|-------------|
| `get_profile()` | — | Get your own profile (displayName, mid, statusMessage, etc.) |
| `get_contact(mid)` | mid: str | Get a single contact's profile |
| `get_contacts(mids)` | mids: list[str] | Get multiple contacts |
| `get_all_contact_ids()` | — | List all friend MIDs |
| `find_contact_by_userid(userid)` | userid: str | Search by LINE ID |
| `find_and_add_contact_by_mid(mid)` | mid: str | Add friend by MID |
| `find_contacts_by_phone(phones)` | phones: list[str] | Search by phone numbers |
| `add_friend_by_mid(mid)` | mid: str | Add friend (RelationService) |
| `get_blocked_contact_ids()` | — | List blocked MIDs |
| `get_blocked_recommendation_ids()` | — | List blocked recommendations |
| `block_contact(mid)` | mid: str | Block a contact |
| `unblock_contact(mid)` | mid: str | Unblock a contact |
| `block_recommendation(mid)` | mid: str | Block a friend suggestion |
| `update_contact_setting(mid, flag, value)` | mid, flag: int, value: str | Update contact setting (e.g. mute) |
| `get_favorite_mids()` | — | List favorited contact MIDs |
| `get_recommendation_ids()` | — | List friend suggestions |
### Messages
| Method | Args | Description |
|--------|------|-------------|
| `send_message(to, text, ...)` | to: str, text: str, reply_to: str (opt) | Send a text message. Supports replies via `reply_to=message_id` |
| `unsend_message(message_id)` | message_id: str | Unsend/delete a sent message |
| `get_recent_messages(chat_id, count=50)` | chat_id: str | Get latest messages in a chat |
| `get_previous_messages(chat_id, end_seq, count=50)` | chat_id, end_seq: int | Paginated history (older messages) |
| `get_messages_by_ids(message_ids)` | message_ids: list[str] | Fetch specific messages |
| `get_message_boxes(count=50)` | — | Get chat list with last message (inbox view) |
| `get_message_boxes_by_ids(chat_ids)` | chat_ids: list[str] | Get specific chats with last message |
| `get_message_read_range(chat_ids)` | chat_ids: list[str] | Get read receipt info |
| `send_chat_checked(chat_id, last_message_id)` | chat_id, last_message_id: str | Mark messages as read |
| `send_chat_removed(chat_id, last_message_id)` | chat_id, last_message_id: str | Remove chat from inbox |
| `send_postback(to, postback_data)` | to, postback_data: str | Send postback (bot interactions) |
### Chats & Groups
| Method | Args | Description |
|--------|------|-------------|
| `get_chats(chat_ids, with_members=True, with_invitees=True)` | chat_ids: list[str] | Get chat/group details |
| `get_all_chat_mids()` | — | List all chat MIDs (groups + invites) |
| `create_chat(name, target_mids)` | name: str, target_mids: list[str] | Create a new group chat |
| `accept_chat_invitation(chat_id)` | chat_id: str | Accept group invite |
| `reject_chat_invitation(chat_id)` | chat_id: str | Reject group invite |
| `invite_into_chat(chat_id, mids)` | chat_id: str, mids: list[str] | Invite users to group |
| `cancel_chat_invitation(chat_id, mids)` | chat_id: str, mids: list[str] | Cancel pending invites |From javimosch/open-claw-skills, MIT.
More from javimosch/open-claw-skills
- 0.470score
highlevel
Ty Shane
Connect your AI assistant to GoHighLevel CRM via the official API v2.
SkillCFreshness: CClaude Code +9 - 0.454score
skill-refiner
javimosch
Audit and fix all skills in the workspace for compliance with skill-creator requirements.
SkillCFreshness: CClaude Code +9 - 0.454score
time-checker
javimosch
Check accurate current time, date, and timezone information for any location worldwide using time.is.
SkillCFreshness: CClaude Code +9 - 0.451score
mema
javimosch
Mema's personal brain - SQLite metadata index for documents and Redis short-term context buffer.
SkillCFreshness: CClaude Code +9 - 0.450score
system-architect
javimosch
Acts as a Senior System Architect to design robust, scalable, and maintainable software architectures.
SkillCFreshness: CClaude Code +9 - 0.450score
mermaid-architect
javimosch
Generate beautiful, hand-drawn Mermaid diagrams with robust syntax (quoted labels, ELK layout).
SkillCFreshness: CClaude Code +9 - 0.450score
node-red-manager
javimosch
Manage Node-RED instances via Admin API or CLI.
SkillCFreshness: CClaude Code +9 - 0.450score
stability-ai
javimosch
Generate high-quality images via Stability AI API (SDXL, SD3, Stable Image Core).
SkillCFreshness: CClaude Code +9 - 0.448score
search-cluster
javimosch
Aggregated search aggregator using Google CSE, GNews RSS, Wikipedia, Reddit, and Scrapling.
SkillCFreshness: CClaude Code +9 - 0.448score
byr-cli
javimosch
Use BYR CLI for auth, search, detail inspection, and safe torrent download planning with JSON envelopes.
SkillCFreshness: CClaude Code +9 - 0.447score
cloudflare-manager
javimosch
Manage Cloudflare DNS records, Tunnels (cloudflared), and Zero Trust policies.
SkillCFreshness: CClaude Code +9 - 0.447score
security-guardian
javimosch
Automated security auditing for OpenClaw projects.
SkillCFreshness: CClaude Code +9
Signals
- Stars
- 0
- Forks
- 1
- Open issues
- 1
- Last commit (this folder)
- Jun 6, 2026 (4 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/javimosch/open-claw-skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from javimosch
- 0.615score
7zip
javimosch
7-Zip archive utility
SkillAFreshness: A★ 56Claude Code +9 - 0.602score
100-exercises-to-learn-rust
javimosch
Use this skill when the user wants to use 100-exercises-to-learn-rust.
SkillAFreshness: A★ 56Claude Code +9 - 0.598score
App-Store-Connect-CLI
javimosch
Use this skill when the user wants to use App-Store-Connect-CLI.
SkillAFreshness: A★ 56Claude Code +9 - 0.596score
playwright-cli
javimosch
Automate browser interactions, test web pages and work with Playwright tests.
SkillBFreshness: B★ 56Claude Code +9 - 0.595score
53AIHub
javimosch
Use this skill when the user wants to use 53AIHub.
SkillAFreshness: A★ 56Claude Code +9 - 0.595score
AiToEarn
javimosch
Use this skill when the user wants to use AiToEarn.
SkillAFreshness: A★ 56Claude Code +9
Cite this page
line-client skill. Agent Mart. https://agentmart.dev/skills/javimosch-line-client (last updated 2026-10-24)