Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

Back to skills

V2ex

ASecurity

Interact with V2EX (v2ex.com) — browse hot and latest topics, read topic details and replies, search posts, create topics, reply to discussions, thank posts, favorite topics/nodes, follow members, daily check-in. Use this skill whenever the user mentions V2EX, v2ex.com, wants to browse tech forum topics, read V2EX discussions, search V2EX posts, check V2EX notifications, create or reply to V2EX topics, or look up V2EX users/nodes. Also trigger when the user pastes a V2EX URL (e.g. v2ex.com/t/...

293 stars
0 votes
0 copies
0 views
Added 9/20/2026
toolspythonbashnodedocker

Works with

cli

Security Analysis

A100/100

Scanned 9/20/2026

Install to Claude Code

$npx -y skills add sigcli/sigcli --skill v2ex --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of V2ex?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for V2ex
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/sigcli-v2ex/badge)](https://www.skillsdirectory.com/skills/sigcli-v2ex)

More formats (shields.io, HTML) on the badges page.

Download Zip
Files
SKILL.md
---
name: v2ex
description: 'Interact with V2EX (v2ex.com) — browse hot and latest topics, read topic details and replies, search posts, create topics, reply to discussions, thank posts, favorite topics/nodes, follow members, daily check-in. Use this skill whenever the user mentions V2EX, v2ex.com, wants to browse tech forum topics, read V2EX discussions, search V2EX posts, check V2EX notifications, create or reply to V2EX topics, or look up V2EX users/nodes. Also trigger when the user pastes a V2EX URL (e.g. v2ex.com/t/12345), mentions a V2EX node name, or asks about Chinese tech community discussions. Keywords: V2EX, v2ex, 论坛, 技术社区, 节点, 主题, 回复.'
---

# V2EX

Browse, search, read, and interact with V2EX — the creative workers' community.

## Skill Directory

`<SKILL_DIR>` is the directory containing this SKILL.md file. Determine it ONCE at the start and reuse it.

## Setup (run FIRST — every time, before any operation)

You MUST complete this setup before running any script. Do NOT skip this step.

```bash
sig status v2ex 2>&1
```

Check the JSON output fields `configured` and `valid`:

- **`configured: false`** → run Provider Setup below. Do NOT proceed without completing it.
- **`valid: false` (but configured: true)** → run `sig login v2ex`, then re-check.
- **`valid: true`** → detect proxy (see below), then execute the user's request.

### Provider Setup

1. Read `<SKILL_DIR>/references/provider-config.yaml`
2. Append the provider block to `~/.sig/config.yaml` under `providers:`
3. Ask the user: "Do you need a proxy to access this site?" — if yes, add `networkProxy: <url>` under the provider in config.yaml
4. Run `sig login v2ex` (with `--network-proxy <url>` if proxy was specified)
5. Verify: run `sig status v2ex` again — must show `valid: true` before proceeding

### Proxy Detection (after provider is valid)

```bash
grep -A15 "^\s*v2ex:" ~/.sig/config.yaml | grep networkProxy | awk '{print $2}'
```

If this outputs a URL, prefix ALL python3 commands with `HTTPS_PROXY=<url> HTTP_PROXY=<url>`.
If using socks5, convert to socks5h for python (e.g. `socks5://...` → `socks5h://...`).
If empty, no proxy needed.

## Running Scripts

All scripts require setup to be completed first (see above).

**Read operations** — use `sig run` to inject cookie (enables authenticated features):

```bash
sig run v2ex -- bash -c 'python3 <SKILL_DIR>/scripts/v2ex_hot.py --cookie "$SIG_V2EX_COOKIE"'
```

**Write operations** — require `sig run` (cookie is mandatory):

```bash
sig run v2ex -- bash -c 'python3 <SKILL_DIR>/scripts/v2ex_reply.py --cookie "$SIG_V2EX_COOKIE" --topic-id 12345 --content "Nice post!"'
```

Env var: `SIG_V2EX_COOKIE`

**On auth error (401/403):** run `sig login v2ex` automatically (no user prompt), then retry.

## Scripts Reference

All scripts are in this skill's `scripts/` directory. Run via Bash tool.

### Read Operations

| Script                  | Purpose                            | Auth     |
| ----------------------- | ---------------------------------- | -------- |
| `v2ex_hot.py`           | Hot topics of the day              | Optional |
| `v2ex_latest.py`        | Latest topics                      | Optional |
| `v2ex_topic.py`         | Topic detail + replies             | Optional |
| `v2ex_node.py`          | Node info + topics, list nodes     | Optional |
| `v2ex_member.py`        | Member profile + topics            | Optional |
| `v2ex_search.py`        | Full-text search via SOV2EX        | None     |
| `v2ex_notifications.py` | User notifications                 | Required |
| `v2ex_profile.py`       | Authenticated user profile/balance | Required |

### Write Operations

| Script             | Purpose                           | Auth     |
| ------------------ | --------------------------------- | -------- |
| `v2ex_create.py`   | Create a new topic                | Required |
| `v2ex_reply.py`    | Reply to a topic                  | Required |
| `v2ex_thank.py`    | Thank a topic or reply            | Required |
| `v2ex_favorite.py` | Favorite/unfavorite topic or node | Required |
| `v2ex_follow.py`   | Follow/unfollow/block/unblock     | Required |
| `v2ex_daily.py`    | Daily sign-in reward              | Required |
| `v2ex_append.py`   | Append supplement to own topic    | Required |

### v2ex_hot.py

```
--cookie COOKIE       V2EX session cookie (optional)
```

### v2ex_latest.py

```
--cookie COOKIE       V2EX session cookie (optional)
```

### v2ex_topic.py

```
--cookie COOKIE       V2EX session cookie (optional)
--id ID               Topic ID (required)
--page N              Reply page number (default: 1)
```

### v2ex_node.py

```
--cookie COOKIE       V2EX session cookie (optional)
--name NAME           Node name (e.g., "python", "apple")
--page N              Page number for topic listing (default: 1)
--list-all            List all available nodes (flag)
```

### v2ex_member.py

```
--cookie COOKIE       V2EX session cookie (optional)
--username NAME       Member username (required)
--include-topics      Also fetch member's recent topics (flag)
```

### v2ex_search.py

```
--query TEXT          Search query (required)
--size N             Max results (default: 20)
--sort FIELD         Sort by: "sumup" (relevance, default) or "created"
--node NAME          Filter by node name (optional)
--username NAME      Filter by author (optional)
```

### v2ex_notifications.py

```
--cookie COOKIE       V2EX session cookie (required)
--page N              Page number (default: 1)
```

### v2ex_profile.py

```
--cookie COOKIE       V2EX session cookie (required)
```

### v2ex_create.py

```
--cookie COOKIE       V2EX session cookie (required)
--node NAME           Target node name (required, e.g., "python")
--title TEXT          Topic title (required)
--content TEXT        Topic body content (required)
--syntax SYNTAX       Content syntax: "default" or "markdown" (default: "default")
```

### v2ex_reply.py

```
--cookie COOKIE       V2EX session cookie (required)
--topic-id ID         Topic ID to reply to (required)
--content TEXT        Reply content (required)
```

### v2ex_thank.py

```
--cookie COOKIE       V2EX session cookie (required)
--type TYPE           "topic" or "reply" (required)
--id ID               Topic ID or Reply ID (required)
```

### v2ex_favorite.py

```
--cookie COOKIE       V2EX session cookie (required)
--type TYPE           "topic" or "node" (required)
--id ID               Topic ID or Node ID (required)
--undo                Unfavorite instead (flag)
```

### v2ex_follow.py

```
--cookie COOKIE       V2EX session cookie (required)
--action ACTION       "follow", "unfollow", "block", or "unblock" (required)
--id ID               Member numeric ID (required)
```

### v2ex_daily.py

```
--cookie COOKIE       V2EX session cookie (required)
```

### v2ex_append.py

```
--cookie COOKIE       V2EX session cookie (required)
--topic-id ID         Topic ID to append to (required)
--content TEXT        Supplement content (required)
```

## Safety

**Always show the user the content (title, body, node) and get explicit confirmation before calling `v2ex_create.py`, `v2ex_reply.py`, or `v2ex_append.py`.** These actions post publicly and cannot be easily undone.

**`v2ex_thank.py` costs coins and is irreversible — confirm with the user first.**

## Key Concepts

**Nodes** — V2EX organizes topics into nodes (like subreddits). Examples: `python`, `apple`, `jobs`, `create`, `programmer`, `shanghai`. Use `v2ex_node.py --list-all` to see all.

**Once token** — V2EX uses a CSRF token called `once` for all write operations. The client extracts it automatically from HTML pages before each mutation.

**Topic IDs** — Numeric IDs (e.g., `12345`). Found in URLs like `v2ex.com/t/12345`. Get from hot/latest/search results, then use with `v2ex_topic.py`.

**Member IDs vs usernames** — Profiles use usernames, but follow/block actions require numeric member IDs. `v2ex_member.py` returns both.

**Daily check-in** — V2EX awards coins for daily sign-in. Use `v2ex_daily.py` to redeem.

**Search** — Uses the SOV2EX third-party search engine (sov2ex.com) which indexes V2EX content for full-text search.

## Error Handling

| Error            | Cause                        | Fix                                                 |
| ---------------- | ---------------------------- | --------------------------------------------------- |
| 403 Forbidden    | Session expired / no cookie  | Auto-run `sig login` (no user prompt needed), retry |
| 302 Redirect     | Not logged in                | Check cookie is valid                               |
| `ONCE_NOT_FOUND` | Failed to extract CSRF token | Session expired — auto-run `sig login`, retry       |
| `RATE_LIMITED`   | Too many requests            | Wait and retry                                      |
| `SEARCH_ERROR`   | SOV2EX service unavailable   | Try again later                                     |

## Workflow Examples

### Browse hot topics

1. `sig run v2ex -- bash -c 'python3 <SKILL_DIR>/scripts/v2ex_hot.py --cookie "$SIG_V2EX_COOKIE"'`

### Read a specific topic and its replies

1. `sig run v2ex -- bash -c 'python3 <SKILL_DIR>/scripts/v2ex_topic.py --cookie "$SIG_V2EX_COOKIE" --id 12345 --page 1'`

### Search for topics

1. `python3 <SKILL_DIR>/scripts/v2ex_search.py --query "Docker 部署" --size 10`

### Create a new topic

1. **Show title/body/node to user and get confirmation**
2. `sig run v2ex -- bash -c 'python3 <SKILL_DIR>/scripts/v2ex_create.py --cookie "$SIG_V2EX_COOKIE" --node python --title "Question about asyncio" --content "How do I..."'`

### Reply to a topic

1. Read the topic first: `sig run v2ex -- bash -c 'python3 <SKILL_DIR>/scripts/v2ex_topic.py --cookie "$SIG_V2EX_COOKIE" --id 12345'`
2. **Show reply to user and get confirmation**
3. `sig run v2ex -- bash -c 'python3 <SKILL_DIR>/scripts/v2ex_reply.py --cookie "$SIG_V2EX_COOKIE" --topic-id 12345 --content "I think you should..."'`

### Check notifications

1. `sig run v2ex -- bash -c 'python3 <SKILL_DIR>/scripts/v2ex_notifications.py --cookie "$SIG_V2EX_COOKIE"'`

### Daily check-in

1. `sig run v2ex -- bash -c 'python3 <SKILL_DIR>/scripts/v2ex_daily.py --cookie "$SIG_V2EX_COOKIE"'`

### Follow a member

1. Look up member: `sig run v2ex -- bash -c 'python3 <SKILL_DIR>/scripts/v2ex_member.py --cookie "$SIG_V2EX_COOKIE" --username livid'`
2. Follow: `sig run v2ex -- bash -c 'python3 <SKILL_DIR>/scripts/v2ex_follow.py --cookie "$SIG_V2EX_COOKIE" --action follow --id 1'`

Attribution

sigclisigcli
View sourceMore from sigcli →
SSkills DirectorySkills Directory

Know which skills are safe — weekly.

Best new skills + every skill we flagged as malicious. From the team that scanned 103,619.

Join free

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Know which skills are safe — weekly.

Best new skills + every skill we flagged as malicious. From the team that scanned 103,619.

Join free

Related Skills

ucoz-landing-skill

Playbook for creating and editing uCoz landing pages via MCP tools (`templates_tool`, `ftp_tool`, `modules_tool`). Use for tasks such as: "build a landing page", "update the homepage as a landing page", "create a promo page on the homepage", "add a lead form / menu / SEO to the homepage". Homepage: `page_list`, `page_get`; first publish — `page_update` with full `page_tmpl`; HTML edits after generation — `patch_template` (module_id=2, template_id=1), not `update_template`. Activate the mail f...

107 votes

Paperclip

Interact with the Paperclip control plane API for task coordination and governance. Use when checking assignments, updating issue status, posting comments, delegating work, managing routines, or calling Paperclip API endpoints.

805541 votes

Instantly Rdsthomas Mission Control

Instantly.ai cold email outreach API - manage campaigns, leads, accounts, and analytics. Use for cold email automation, lead management, campaign creation/monitoring, and email account warmup.

761 votes

Daw Music

Digital Audio Workstation usage, music composition, interactive music systems, and game audio implementation for immersive soundscapes.

761 votes

Caveman Compress

Compress natural language memory files (CLAUDE.md, todos, preferences) into caveman format to save input tokens. Preserves all technical substance, code, URLs, and structure. Compressed version overwrites the original file. Human-readable backup saved as FILE.original.md. Trigger: /caveman-compress FILEPATH or "compress memory file"

1023330 votes
View all in tools →