Diagram Design
cathrynlavery/diagram-design
Creates branded diagrams, from architecture, flowchart and sequence to charts and maps, as self-contained HTML with inline SVG, with import from draw.io, Mermaid and Excalidraw.
Commenting and documentation guidelines. An agent skill from rishighan/threetwo.
$ npx skills add rishighan/threetwo --skill jsdoc -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install rishighan/threetwo jsdoc --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/rishighan/threetwo.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/jsdoc .claude/skills/jsdoc && rm -rf skills-srcUse ~/.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/
Install the "jsdoc" agent skill from https://github.com/rishighan/threetwo/tree/main/.claude/skills/jsdoc into .claude/skills/jsdoc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jsdoc", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/rishighan/threetwo/tree/main/.claude/skills/jsdocType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add rishighan/threetwo --skill jsdoc -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install rishighan/threetwo jsdoc --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rishighan/threetwo.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/jsdoc .agents/skills/jsdoc && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "jsdoc" agent skill from https://github.com/rishighan/threetwo/tree/main/.claude/skills/jsdoc into .agents/skills/jsdoc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jsdoc", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rishighan/threetwo --skill jsdoc -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install rishighan/threetwo jsdoc --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rishighan/threetwo.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/jsdoc .cursor/skills/jsdoc && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "jsdoc" agent skill from https://github.com/rishighan/threetwo/tree/main/.claude/skills/jsdoc into .cursor/skills/jsdoc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jsdoc", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/rishighan/threetwo.git --path .claude/skills/jsdoc--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add rishighan/threetwo --skill jsdoc -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install rishighan/threetwo jsdoc --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rishighan/threetwo.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/jsdoc .gemini/skills/jsdoc && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "jsdoc" agent skill from https://github.com/rishighan/threetwo/tree/main/.claude/skills/jsdoc into .gemini/skills/jsdoc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jsdoc", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install rishighan/threetwo jsdocInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add rishighan/threetwo --skill jsdoc -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/rishighan/threetwo.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/jsdoc .github/skills/jsdoc && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "jsdoc" agent skill from https://github.com/rishighan/threetwo/tree/main/.claude/skills/jsdoc into .github/skills/jsdoc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jsdoc", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rishighan/threetwo --skill jsdoc -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install rishighan/threetwo jsdoc --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rishighan/threetwo.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/jsdoc .opencode/skills/jsdoc && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "jsdoc" agent skill from https://github.com/rishighan/threetwo/tree/main/.claude/skills/jsdoc into .opencode/skills/jsdoc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jsdoc", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
jsdocCommenting and documentation guidelines. An agent skill from rishighan/threetwo.
Jsdoc is an agent skill from rishighan/threetwo. Commenting and documentation guidelines. Auto-activate when the user discusses comments, documentation, docstrings, code clarity, API docs, JSDoc, or asks about commenting strategies.
Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Technical documentation. The repository describes itself as: A good comic book curation app. The licence is MIT.
Read from SKILL.md and the folder at commit 5211137. It shows what the files ask for, not the result of running them.
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.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Jsdoc loads about 2.7k tokens when it runs. Until then it costs about 47 tokens; SKILL.md has 1,303 words of instructions outside code blocks.
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.
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.
The full file from rishighan/threetwo at commit 5211137, republished under its MIT licence (© rishighan). 1,303 words, ~2,726 tokens.
.claude/skills/jsdoc/SKILL.md (or your agent's skills folder).Auto-activate when: User discusses comments, documentation, docstrings, code clarity, code quality, API docs, JSDoc, Python docstrings, or asks about commenting strategies. Core Principle
Write code that speaks for itself. Comment only when necessary to explain WHY, not WHAT.
Most code does not need comments. Well-written code with clear naming and structure is self-documenting.
The best comment is the one you don't need to write because the code is already obvious. The Commenting Philosophy When to Comment
✅ DO comment when explaining:
WHY something is done (business logic, design decisions)
Complex algorithms and their reasoning
Non-obvious trade-offs or constraints
Workarounds for bugs or limitations
API contracts and public interfaces
Regex patterns and what they match
Performance considerations or optimizations
Constants and magic numbers
Gotchas or surprising behaviors❌ DON'T comment when:
The code is obvious and self-explanatory
The comment repeats the code (redundant)
Better naming would eliminate the need
The comment would become outdated quickly
It's decorative or organizational noise
It states what a standard language construct doesComment Anti-Patterns ❌ 1. Obvious Comments
BAD:
counter = 0 # Initialize counter to zero counter += 1 # Increment counter by one user_name = input("Enter name: ") # Get user name from input
Better: No comment needed - the code is self-explanatory. ❌ 2. Redundant Comments
BAD:
def get_user_name(user): return user.name # Return the user's name
def calculate_total(items): # Loop through items and sum the prices total = 0 for item in items: total += item.price return total
Better:
def get_user_name(user): return user.name
def calculate_total(items): return sum(item.price for item in items)
❌ 3. Outdated Comments
BAD:
tax = price * 0.08 # Actually 8%, comment is wrong
def old_function(): # Still being used, comment is misleading pass
Better: Keep comments in sync with code, or remove them entirely. ❌ 4. Noise Comments
BAD:
def calculate(): # Declare variable result = 0 # Return result return result
Better: Remove all of these comments. ❌ 5. Dead Code & Changelog Comments
BAD:
Better: Delete the code. Git has the history. Good Comment Examples ✅ Complex Business Logic
def calculate_progressive_tax(income): if income <= 10000: return income * 0.10 else: return 1000 + (income - 10000) * 0.20
✅ Non-obvious Algorithms
for k in range(vertices): for i in range(vertices): for j in range(vertices): dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])
✅ Regex Patterns
email_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$'
✅ API Constraints or Gotchas
await rate_limiter.wait() response = await fetch(github_api_url)
✅ Workarounds for Bugs
if library_version == "2.1.0": apply_workaround()
Decision Framework
Before writing a comment, ask yourself: Step 1: Is the code self-explanatory?
If YES → No comment needed
If NO → Continue to step 2Step 2: Would a better variable/function name eliminate the need?
If YES → Refactor the code instead
If NO → Continue to step 3Step 3: Does this explain WHY, not WHAT?
If explaining WHAT → Refactor code to be clearer
If explaining WHY → Good comment candidateStep 4: Will this help future maintainers?
If YES → Write the comment
If NO → Skip itSpecial Cases for Comments Public APIs and Docstrings Python Docstrings
def calculate_compound_interest( principal: float, rate: float, time: int, compound_frequency: int = 1 ) -> float: """ Calculate compound interest using the standard formula.
Args:
principal: Initial amount invested
rate: Annual interest rate as decimal (e.g., 0.05 for 5%)
time: Time period in years
compound_frequency: Times per year interest compounds (default: 1)
Returns:
Final amount after compound interest
Raises:
ValueError: If any parameter is negative
Example:
>>> calculate_compound_interest(1000, 0.05, 10)
1628.89
"""
if principal < 0 or rate < 0 or time < 0:
raise ValueError("Parameters must be non-negative")
# Compound interest formula: A = P(1 + r/n)^(nt)
return principal * (1 + rate / compound_frequency) ** (compound_frequency * time)JavaScript/TypeScript JSDoc
/**
<User>} User object with requested fieldsConstants and Configuration
MAX_RETRIES = 3
API_TIMEOUT = 10000 # milliseconds
CACHE_TTL = 300 # 5 minutes
Annotations for TODOs and Warnings
def temporary_auth(user): return True
def sort_in_place(arr): arr.sort() return arr
def get_connection(): return create_connection()
def expensive_calculation(data): return complex_algorithm(data)
def build_query(user_input): sanitized = escape_sql(user_input) return f"SELECT * FROM users WHERE name = '{sanitized}'"
Common Annotation Keywords
TODO: - Work that needs to be done
FIXME: - Known bugs that need fixing
HACK: - Temporary workarounds
NOTE: - Important information or context
WARNING: - Critical information about usage
PERF: - Performance considerations
SECURITY: - Security-related notes
BUG: - Known bug documentation
REFACTOR: - Code that needs refactoring
DEPRECATED: - Soon-to-be-removed codeRefactoring Over Commenting Instead of Commenting Complex Code...
BAD: Complex code with comment
if user.role == "admin" or (user.permissions and "special" in user.permissions): grant_access()
...Extract to Named Function
GOOD: Self-explanatory through naming
def user_has_admin_access(user): return user.role == "admin" or has_special_permission(user)
def has_special_permission(user): return user.permissions and "special" in user.permissions
if user_has_admin_access(user): grant_access()
Language-Specific Examples JavaScript
// Good: Explains WHY we debounce // Debounce search to reduce API calls (500ms wait after last keystroke) const debouncedSearch = debounce(searchAPI, 500);
// Bad: Obvious let count = 0; // Initialize count to zero count++; // Increment count
// Good: Explains algorithm choice // Using Set for O(1) lookup instead of Array.includes() which is O(n) const seen = new Set(ids);
Python
index = bisect.bisect_left(sorted_list, target)
def get_total(items): return sum(items) # Return the sum of items
def validate_user(user): if not user or not user.id: raise ValueError("Invalid user") return user
TypeScript
// Good: Explains the type assertion // TypeScript can't infer this is never null after the check const element = document.getElementById('app') as HTMLElement;
// Bad: Obvious const sum = a + b; // Add a and b
// Good: Explains non-obvious behavior // spread operator creates shallow copy; use JSON for deep copy const newConfig = { ...config };
Comment Quality Checklist
Before committing, ensure your comments:
Explain WHY, not WHAT
Are grammatically correct and clear
Will remain accurate as code evolves
Add genuine value to code understanding
Are placed appropriately (above the code they describe)
Use proper spelling and professional language
Follow team conventions for annotation keywords
Could not be replaced by better naming or structure
Are not obvious statements about language features
Reference tickets/issues when applicableSummary
Priority order:
Clear code - Self-explanatory through naming and structure
Good comments - Explain WHY when necessary
Documentation - API docs, docstrings for public interfaces
No comments - Better than bad comments that lie or clutterRemember: Comments are a failure to make the code self-explanatory. Use them sparingly and wisely. Key Takeaways Goal Approach Reduce comments Improve naming, extract functions, simplify logic Improve clarity Use self-explanatory code structure, clear variable names Document APIs Use docstrings/JSDoc for public interfaces Explain WHY Comment only business logic, algorithms, workarounds Maintain accuracy Update comments when code changes, or remove them
© rishighan, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/jsdoc of rishighan/threetwo.
Open the folder on GitHubat commit 5211137
Jsdoc 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Jsdoc this skillrishighan/threetwo | 110 | — | ~2.7k | Automated safety check: Pass | MIT | |
| Diagram Designcathrynlavery/diagram-design | 45k | 1 repos | ~7.5k | Automated safety check: Pass | MIT | |
| Simple Englishmoeru-ai/airi | 50k | 2 repos | ~4.6k | Automated safety check: Pass | MIT | |
| Get API Docs with chubandrewyng/context-hub | 14k | 2 repos | ~775 | Automated safety check: Pass | MIT | |
| Doc SyncJetBrains/ideavim | 10k | 2 repos | ~2.6k | Automated safety check: Pass | MIT | |
| Mailspring App ScreenshotsFoundry376/Mailspring | 18k | — | ~1.5k | Automated safety check: Pass | GPL-3.0 |
cathrynlavery/diagram-design
Creates branded diagrams, from architecture, flowchart and sequence to charts and maps, as self-contained HTML with inline SVG, with import from draw.io, Mermaid and Excalidraw.
moeru-ai/airi
Write or rewrite technical text with the rules of ASD-STE100 Simplified Technical English so it is clear, unambiguous, and free of AI slop.
andrewyng/context-hub
Fetches current documentation for third-party APIs and SDKs with the chub CLI before the agent writes code against them, instead of relying on remembered API shapes.
JetBrains/ideavim
Keeps IdeaVim documentation in sync with code changes. An agent skill from JetBrains/ideavim.
Foundry376/Mailspring
Captures screenshots of the running Mailspring dev app for docs, PRs or visual checks by launching it with a debugging port, driving the UI and clipping to an element.
Agents365-ai/drawio-skill
Creates and edits editable draw.io diagrams from descriptions, code, infrastructure files, SQL and API schemas, with sync, review, test and export tools.
rishighan/threetwo
TypeScript engineering guidelines based on Google's style guide.
Categories
Commenting and documentation guidelines. An agent skill from rishighan/threetwo. Jsdoc is an agent skill from rishighan/threetwo. Commenting and documentation guidelines.
Jsdoc fits situations like: discusses comments; asks about commenting strategies.
Run `npx skills add rishighan/threetwo --skill jsdoc -a claude-code`. Or copy the skill folder (.claude/skills/jsdoc in rishighan/threetwo) into .claude/skills/jsdoc in your project. Claude Code loads it when a task matches its description.
Run `npx skills add rishighan/threetwo --skill jsdoc -a codex`. Or copy the skill folder (.claude/skills/jsdoc in rishighan/threetwo) into .agents/skills/jsdoc in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add rishighan/threetwo --skill jsdoc -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/jsdoc, .gemini/skills/jsdoc, .github/skills/jsdoc and .opencode/skills/jsdoc in your project.
SKILL.md names no scripts, command-line tools or credentials: Jsdoc is instructions for the agent only. Our summary lists: Python 3.
SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.
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.
Jsdoc is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Jsdoc: Diagram Design (cathrynlavery/diagram-design, 45k stars), Simple English (moeru-ai/airi, 50k stars), Get API Docs with chub (andrewyng/context-hub, 14k stars) and Doc Sync (JetBrains/ideavim, 10k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
rishighan (a GitHub user) maintains it in rishighan/threetwo, which has 110 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 6, 2026.
Source: rishighan/threetwo on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.