Agent skill

Update Tags

by wislertt in wislertt/leetcode-py

Use ONLY when user explicitly requests "update tags" or "/update-tags", or after running .claude/.dev/updatetags.py and seeing "Missing" or "Removed" discrepancy lines.

Apache-2.0Auto-check passed

Install Update Tags

skills CLI
$ npx skills add wislertt/leetcode-py --skill update-tags -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install wislertt/leetcode-py update-tags --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/wislertt/leetcode-py.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/update-tags .claude/skills/update-tags && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
update-tags
GitHub stars
142
Token cost
~2.5k tokens
SKILL.md length
1,216 words
Files
1
Skills in repo
5
Repo updated
First seen
Licence
Apache-2.0

At a glance

Use ONLY when user explicitly requests "update tags" or "/update-tags", or after running .claude/.dev/updatetags.py and seeing "Missing" or "Removed" discrepancy lines.

  • Works in 6 steps: Run: uv run python… → If No changes found → done. Delete… → For each Missing line: add the listed… → …
  • Explicitly requests update tags
  • SKILL.md covers Overview, The Core Decision (read before…, The "Removed" Trap (where data… and Inheritance Asymmetry (expect…, plus 3 more sections
  • Calls uv

What it does

Update Tags is an agent skill from wislertt/leetcode-py. Use ONLY when user explicitly requests "update tags" or "/update-tags", or after running .claude/.dev/updatetags.py and seeing "Missing" or "Removed" discrepancy lines. Reconciles the tag sync between source lists and tags.json5.

Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

The repository describes itself as: Python LeetCode practice environment with automated problem generation, data structure visualizations, and comprehensive testing. Includes all Grind 75, partial Blind, Neetcode… The licence is Apache-2.0.

When your agent uses it

  • Explicitly requests update tags
  • After running .claude/.dev/updatetags.py and seeing Missing
  • Removed discrepancy lines

Example prompts

  • “update tags”
  • “/update-tags”
  • “Missing”
  • “/update-tags”

Requirements

  • Python 3

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. Run: uv run python .claude/.dev/update_tags.py
  2. If No changes found → done. Delete .claude/.dev/update_tags.json if it exists. Stop.
  3. For each Missing line: add the listed problem-name strings to that tag's array in tags.json5, in alphabetical order. Use Edit, not a full…
  4. For each Removed line: run the _tags.list decision from the trap above — before any edit. Add the tuple to source only if membership is…
  5. Re-run the script. Expect No changes found. Loop until clean. This is not cosmetic — a re-run that surfaces a new Removed/Missing on a tag…
  6. Cleanup: rm .claude/.dev/update_tags.json

What it can do on your machine

Read from SKILL.md and the folder at commit 9155db3. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • uv

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use uv, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Update Tags loads about 2.5k tokens when it runs. Until then it costs about 61 tokens; SKILL.md has 1,216 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~61
When it runs · the whole SKILL.md, loaded when a task matches
~2.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from wislertt/leetcode-py at commit 9155db3, republished under its Apache-2.0 licence (© wislertt). 1,216 words, ~2,451 tokens.

Download SKILL.mdSave it as .claude/skills/update-tags/SKILL.md (or your agent's skills folder).
name
update-tags
description
Use ONLY when user explicitly requests "update tags" or "/update-tags", or after running .claude/.dev/update_tags.py and seeing "Missing" or "Removed" discrepancy lines. Reconciles the tag sync between source lists and tags.json5.

Update Tags

Overview

Two layers, one direction of truth:

  • Source (input) — .claude/.dev/problem_lists/*.py. Each defines tag_name + problems_list of (problem_number, "Title") tuples. These are the canonical membership lists. __init__.py exposes them via available_lists.
  • Output (sink) — src/leetcode_py/cli/resources/leetcode/json/tags.json5. JSON5 with comments. Lists problem-name strings per tag, plus sub-tag references like { tag: "neetcode-150" }. Consumed by the CLI at runtime.

update_tags.py diffs the two and prints discrepancies. It never edits files — a human resolves each line at the correct layer.

The Core Decision (read before touching anything)

The script prints two kinds of lines. They have different fix locations:

Script lineMeaningWhere to fix
Missing N: [...]in source, not in tags.json5tags.json5 (add entries)
Removed N: [...] (not included in update)in tags.json5, not in sourceeither layer — decide via _tags.list (see trap)

Iron rule: Missing → edit tags.json5. Removed → check the problem's _tags.list first — fix source if membership confirmed, else delete from tags.json5. Never guess the direction. For batch-created problems, confirm with source-list membership by problem number (see circularity gotcha below).

The "Removed" Trap (where data gets lost)

A "Removed" line means tags.json5 lists a problem the source list doesn't. Do not reflexively add a tuple to source — a "Removed" line is two opposite cases, and you must decide which before touching anything:

CaseSignalFix
Source list lagging (problem genuinely belongs here)flagged tag IS in the problem JSON _tags.listsource — add (number, "Title") tuple
tags.json5 entry bogus (problem does not belong here)flagged tag NOT in _tags.listtags.json5 — delete the entry (confirm user)

Decide via the problem's own metadata. Read src/leetcode_py/cli/resources/leetcode/json/problems/<name>.json → the _tags.list array is the problem's self-declared roadmap membership. It is a stronger signal than the tags.json5 entry you're auditing — a problem knows which roadmaps claim it.

  • flagged tag ∈ _tags.list → the problem considers itself a member; the source list just hasn't caught up. Add the tuple to source.
  • flagged tag ∉ _tags.list → the tags.json5 entry was likely added by mistake. Do not propagate it to source. Confirm with the user, then delete the entry from that tag's array in tags.json5.

GOTCHA — _tags.list is circular for batch-created problems. The _tags.list field is written at creation time by whoever created the problem. If the stamp was wrong there, this check "confirms" the wrong membership and directs you to pollute the source list — which permanently cements the mistake (a later sync commit did exactly this and bogus tuples had to be reverted by hand). For problems created via the batch/problem-creation flow, ground truth is source-list membership by problem number, not _tags.list: grep (number, across .claude/.dev/problem_lists/*.py. Number present in that list's file → member; absent → not a member, regardless of what _tags.list claims. If the number is in NO source file except neetcode.py (the 943 all-queue), the problem is queue-only: _tags.list should be ["neetcode"] and the tags.json5 roadmap entries are the bug.

The script deliberately refuses to auto-delete ("not included in update") so a human makes this call. Both wrong directions are permanent: deleting a real entry hides it (source lacks it, so Missing never fires to restore); adding a bogus tuple to source cements a mistake the script can no longer flag. The _tags.list check is what tells you which direction is safe.

To get the number + exact title: same JSON → problem_number + problem_title (proper-cased, e.g. "Last Stone Weight II"). Note problem_name is the snake_case slug — do NOT use it as the title. Match the casing already used in that source file.

Inheritance Asymmetry (expect false positives)

tags.json5 inherits — { tag: "neetcode-150" } inside neetcode-250 recursively pulls in all of neetcode-150. Source lists do not inherit (neetcode_250.py does not auto-include neetcode_150.py).

Consequence: a "Removed" line on an inheriting tag (e.g. neetcode-250) is frequently a false positive — the problem enters existing only via the inherited sub-tag reference, and the source-side set has no matching inheritance. Example tell: a problem flagged "Removed" for neetcode-150 but not for neetcode-250 means its tuple is in neetcode_250.py but missing from neetcode_150.py.

Fix is still source-side: add the tuple to the source list(s) that should contain it. If the same problem is "Removed" across multiple tags, add the tuple to each relevant source file.

Show full SKILL.md (539 more words)Show less

Workflow

  1. Run: uv run python .claude/.dev/update_tags.py
  2. If No changes found → done. Delete .claude/.dev/update_tags.json if it exists. Stop.
  3. For each Missing line: add the listed problem-name strings to that tag's array in tags.json5, in alphabetical order. Use Edit, not a full rewrite — preserve the // comment above each tag block and the JSON5 formatting (quoted keys for hyphenated names like "neetcode-250", bare keys for grind; strings as "snake_case").
    • Find the right block first. Many tag arrays share identical entries (maximum_subarray appears in 4+ blocks; majority_element, minimum_path_sum, etc. repeat across roadmaps). A grep -n hit + the nearest "tag": [ header above it do not prove the line lives in that block — arrays can stretch 60+ lines and the header above may belong to a different tag. Before Edit, Read the target block's full [ ... ] span and copy 2–3 consecutive anchor lines from inside that block as old_string. Verify the anchor is unique to the target block by eyeballing the span, not by assumption.
  4. For each Removed line: run the _tags.list decision from the trap above — before any edit. Add the tuple to source only if membership is confirmed (_tags.list contains the flagged tag). Otherwise delete the entry from that tag's array in tags.json5, after confirming with the user. Keep the source file's existing ordering convention (neetcode_150.py is sorted by number; neetcode_250.py and grind.py are topical — append if unsure).
  5. Re-run the script. Expect No changes found. Loop until clean. This is not cosmetic — a re-run that surfaces a new Removed/Missing on a tag you did not intend to touch is the tell-tale sign of a wrong-block edit (step 3 trap). If that happens, your last edit landed in the wrong array: revert it and re-apply in the correct block.
  6. Cleanup: rm .claude/.dev/update_tags.json

Common Mistakes

  • Deleting "Removed" entries from tags.json5 without checking _tags.list — a real tracked problem vanishes permanently. But the opposite is equally bad…
  • Adding a source tuple without checking _tags.list — a "Removed" line is not a command to add. If the problem's own _tags metadata does not claim membership in the flagged roadmap, the tags.json5 entry is the bug, not the source list. Propagating a bogus entry to source cements the mistake (script can no longer flag it). Read _tags.list first; it tells you which direction is safe.
  • Full-rewrite of tags.json5 via json.dump — destroys the // comments and JSON5 formatting. Always surgical Edit.
  • Unsorted insertion into tags.json5 — each tag's array is alphabetical; keep it so.
  • Wrong title casing in source tuple — copy problem_title (proper-cased) from the JSON, not problem_name (snake_case slug). Match the file's existing entry style (e.g. "Smallest Range Covering Elements from K Lists").
  • Trusting one script run after edits — always re-run until No changes found; a single fix can surface/resolve related lines.
  • Editing the wrong tags.json5 block — entries like maximum_subarray, majority_element, minimum_path_sum recur across many tag arrays. Picking an Edit anchor from grep output without reading the target block's [ ... ] span easily lands the edit in a neighboring array (e.g. inserting into algo-master-75 when you meant neetcode-250). The re-run then shows a new discrepancy on the unintended tag. Read the block, anchor inside it, verify uniqueness by inspection.

Files

  • Script: .claude/.dev/update_tags.py
  • Source lists: .claude/.dev/problem_lists/*.py (+ __init__.py → available_lists)
  • Output: src/leetcode_py/cli/resources/leetcode/json/tags.json5
  • Problem metadata (number/title lookup): src/leetcode_py/cli/resources/leetcode/json/problems/<name>.json
  • Temp file (delete after): .claude/.dev/update_tags.json

© wislertt, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/update-tags of wislertt/leetcode-py.

Open the folder on GitHubat commit 9155db3

Compare with similar skills

Update Tags next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Update Tags compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Update Tags this skillwislertt/leetcode-py142—~2.5kAutomated safety check: PassApache-2.0
No Explicit Anythedaviddias/Front-End-Checklist74k—~565Automated safety check: PassMIT
Review Tagshashicorp/terraform-provider-aws11k—~462Automated safety check: PassMPL-2.0
Noscript Tagthedaviddias/Front-End-Checklist74k—~554Automated safety check: PassMIT
Og Tagsthedaviddias/Front-End-Checklist74k—~495Automated safety check: PassMIT
Tag Duplicate PRs Issuesopenclaw/openclaw392k—~4kAutomated safety check: PassMIT

Similar skills

  • No Explicit Any

    thedaviddias/Front-End-Checklist

    A skill your agent uses when reviewing TypeScript files for type safety regressions, during code review of functions that handle external data, or when the codebase has ESLint warnings for…

    74k GitHub stars~565 tokensUpdated 2 days ago
    DevelopmentAuto-check passed
  • Review Tags

    hashicorp/terraform-provider-aws

    Official

    Review Terraform AWS Provider tagging: the tags/tagsall schema attributes, the @Tags(identifierAttribute=...) annotation, and wiring input.Tags = getTagsIn(ctx) after flex.Expand.

    11k GitHub stars~462 tokensUpdated yesterday
    DevOps & CloudAuto-check passed
  • Noscript Tag

    thedaviddias/Front-End-Checklist

    A skill your agent uses when reviewing templates, rendered HTML, or shared components related to Provide noscript fallback content.

    74k GitHub stars~554 tokensUpdated 2 days ago
    Auto-check passed
  • Og Tags

    thedaviddias/Front-End-Checklist

    A skill your agent uses when auditing a web page's social sharing metadata.

    74k GitHub stars~495 tokensUpdated 2 days ago
    Auto-check passed
  • Tag Duplicate PRs Issues

    openclaw/openclaw

    Use gitcrawl to search duplicate OpenClaw PRs/issues, group related work in prtags, and sync duplicate state to GitHub.

    392k GitHub stars~4k tokensUpdated today
    Research & ScienceAuto-check passed
  • Tag Garden

    gnekt/My-Brain-Is-Full-Crew

    Analyze all vault tags: find unused, orphan, near-duplicate, over-used, and under-used tags.

    3.9k GitHub stars~2.1k tokensUpdated 3 mo ago
    Productivity & AutomationAuto-check passed

More from wislertt/leetcode-py

  • Leetcode Py

    wislertt/leetcode-py

    Generates Python LeetCode practice environments and manages a 307-problem catalog with the lcpy CLI.

    142 GitHub stars~1.4k tokensUpdated yesterday
    Auto-check passed
  • Test Quality Assurance

    wislertt/leetcode-py

    Test quality assurance workflow for LeetCode problems - verifies reproducibility, fixes linting issues, and ensures test structure matches JSON templates.

    142 GitHub stars~2.9k tokensUpdated yesterday
    Auto-check passed
  • Batch Problem Creation

    wislertt/leetcode-py

    Batch creation workflow for multiple LeetCode problems - loops through problem creation, solution implementation, and quality assurance for a specified count.

    142 GitHub stars~10k tokensUpdated yesterday
    Auto-check passed
  • Problem Creation

    wislertt/leetcode-py

    Guide for creating a single LeetCode problem scaffold - scrape, transform to JSON template, generate files, and verify.

    142 GitHub stars~9.9k tokensUpdated yesterday
    Auto-check passed

Questions about Update Tags

What does Update Tags do?

Use ONLY when user explicitly requests "update tags" or "/update-tags", or after running .claude/.dev/updatetags.py and seeing "Missing" or "Removed" discrepancy lines. Update Tags is an agent skill from wislertt/leetcode-py.py and seeing "Missing" or "Removed" discrepancy lines.

When should I use Update Tags?

Update Tags fits situations like: explicitly requests update tags; after running .claude/.dev/updatetags.py and seeing Missing; removed discrepancy lines.

How do I install Update Tags in Claude Code?

Run `npx skills add wislertt/leetcode-py --skill update-tags -a claude-code`. Or copy the skill folder (.claude/skills/update-tags in wislertt/leetcode-py) into .claude/skills/update-tags in your project. Claude Code loads it when a task matches its description.

How do I install Update Tags in Codex?

Run `npx skills add wislertt/leetcode-py --skill update-tags -a codex`. Or copy the skill folder (.claude/skills/update-tags in wislertt/leetcode-py) into .agents/skills/update-tags in your project. Codex loads it when a task matches its description.

Can I use Update Tags in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add wislertt/leetcode-py --skill update-tags -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/update-tags, .gemini/skills/update-tags, .github/skills/update-tags and .opencode/skills/update-tags in your project.

What does Update Tags need to run?

Going by SKILL.md and its folder, Update Tags needs the command-line tools its instructions call (uv). Our summary lists: Python 3.

Does Update Tags access the network?

SKILL.md contains no URLs. Its commands use uv, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Update Tags safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Update Tags use?

Update Tags is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Update Tags use?

About 2.5k tokens (SKILL.md is roughly 9.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Update Tags?

Skills that share tags, products or a category with Update Tags: No Explicit Any (thedaviddias/Front-End-Checklist, 74k stars), Review Tags (hashicorp/terraform-provider-aws, 11k stars), Noscript Tag (thedaviddias/Front-End-Checklist, 74k stars) and Og Tags (thedaviddias/Front-End-Checklist, 74k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Update Tags?

wislertt (a GitHub user) maintains it in wislertt/leetcode-py, which has 142 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 7, 2026.

Source: wislertt/leetcode-py on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.