Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generate comprehensive documentation for undocumented or poorly documented codebases. Use when a user asks to document code, add JSDoc/docstrings, create README files, generate architecture docs, explain what a codebase does, produce onboarding guides, or document internal APIs. Works with any language.
.claude/skills/terminalskills-code-documenter/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 53% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 72% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 172% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 38% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 157% | 0% |
Analyzes source code to generate accurate, context-aware documentation at multiple levels: inline comments for complex logic, function/class docstrings, module-level overviews, architecture documents, and onboarding guides. Understands control flow, data transformations, side effects, and cross-module dependencies.
When asked to document code:
@param, @returns, @throws, @example@param, @return, @throws/// doc comments with # Examples sectionsfoo, bar, test123Input:
pythondef process_payment(user_id, amount, currency, idempotency_key=None): user = db.users.find(user_id) if not user: raise ValueError("User not found") if user.balance < amount and not user.credit_enabled: return {"status": "declined", "reason": "insufficient_funds"} charge = stripe.charges.create( amount=int(amount * 100), currency=currency, customer=user.stripe_id, idempotency_key=idempotency_key ) db.transactions.insert({ "user_id": user_id, "amount": amount, "stripe_charge_id": charge.id, "created_at": datetime.utcnow() }) if user.balance < amount: user.balance = user.balance - amount db.users.update(user) return {"status": "success", "charge_id": charge.id}
Output:
pythondef process_payment(user_id, amount, currency, idempotency_key=None): """Process a payment by charging the user's Stripe account. Validates the user's balance (unless credit is enabled), creates a Stripe charge, records the transaction, and deducts from the user's internal balance if applicable. Args: user_id: Internal user identifier (e.g., "usr_8f2k3j"). amount: Charge amount in major currency units (e.g., 49.99). currency: ISO 4217 currency code (e.g., "usd", "eur"). idempotency_key: Optional key to prevent duplicate charges on retry. Recommended for all production calls. Returns: dict: {"status": "success", "charge_id": "ch_..."} on success, {"status": "declined", "reason": "insufficient_funds"} if balance is too low and credit is not enabled. Raises: ValueError: If user_id does not match any user in the database. stripe.error.CardError: If the card is declined by Stripe. stripe.error.InvalidRequestError: If Stripe parameters are invalid. Side Effects: - Creates a Stripe charge (external API call) - Inserts a row into the transactions table - May update the user's balance Example: >>> result = process_payment("usr_8f2k3j", 49.99, "usd", idempotency_key="pay_retry_001") >>> result {"status": "success", "charge_id": "ch_3Kx9mPqR2s"} Note: ⚠ Potential bug: balance deduction only happens when balance < amount, but the charge always goes through. If balance >= amount, the user is charged via Stripe but their internal balance is not deducted. """
Input:
Document the architecture of our notification service in src/services/notifications/Output:
markdown# Notification Service — Architecture ## Purpose Delivers user notifications across email, push, and in-app channels. Handles template rendering, delivery scheduling, preference checking, and delivery status tracking. ## Module Map notifications/ ├── router.ts — HTTP endpoints for notification preferences and history ├── service.ts — Core orchestration: resolves channel, renders template, dispatches ├── channels/ │ ├── email.ts — SendGrid integration (SMTP fallback) │ ├── push.ts — Firebase Cloud Messaging │ └── in-app.ts — WebSocket broadcast + database persistence ├── templates/ │ ├── renderer.ts — Handlebars template engine with i18n support │ └── templates/ — .hbs files organized by notification type ├── preferences.ts — User channel preferences (opt-in/opt-out per type) └── queue.ts — Bull queue consumer for async delivery ## Key Data Flow: Sending a Notification 1. API call or internal event → service.send(userId, type, data) 2. service.ts checks user preferences → skips opted-out channels 3. renderer.ts renders template with user's locale 4. Dispatch queued via Bull (Redis-backed) for reliability 5. Channel adapter delivers and records status in notifications table ## External Dependencies - SendGrid API (email delivery) - Firebase Cloud Messaging (push notifications) - Redis (Bull queue backing store) - PostgreSQL (notification history, preferences, templates metadata) ## Environment Variables SENDGRID_API_KEY, FCM_SERVER_KEY, REDIS_URL, NOTIFICATION_FROM_EMAIL
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 13,740 | 11,013 | -20% | 1 | 1 | 0% | 2,915 | 4,468 | +53% | 0 | 0 | — |
case-02 | fail→pass | 11,135 | 10,649 | -4% | 1 | 1 | 0% | 2,452 | 4,211 | +72% | 0 | 0 | — |
case-03 | pass→pass | 9,293 | 11,986 | +29% | 1 | 1 | 0% | 1,679 | 4,319 | +157% | 0 | 0 | — |
case-04 | pass→pass | 11,707 | 16,221 | +39% | 1 | 1 | 0% | 2,404 | 5,357 | +123% | 0 | 0 | — |
case-05 | pass→pass | 5,515 | 8,047 | +46% | 1 | 1 | 0% | 1,087 | 3,445 | +217% | 0 | 0 | — |
case-06 | fail→pass | 6,257 | 8,610 | +38% | 1 | 1 | 0% | 1,272 | 3,461 | +172% | 0 | 0 | — |
case-07 | pass→pass | 8,245 | 9,530 | +16% | 1 | 1 | 0% | 1,553 | 3,593 | +131% | 0 | 0 | — |
case-08 | pass→pass | 8,483 | 6,591 | -22% | 1 | 1 | 0% | 1,628 | 3,145 | +93% | 0 | 0 | — |
case-14 | pass→pass | 11,417 | 9,741 | -15% | 1 | 1 | 0% | 2,241 | 3,895 | +74% | 0 | 0 | — |
case-09 | pass→pass | 7,819 | 8,398 | +7% | 1 | 1 | 0% | 1,408 | 3,607 | +156% | 0 | 0 | — |
case-10 | pass→pass | 10,046 | 10,426 | +4% | 1 | 1 | 0% | 1,729 | 3,847 | +122% | 0 | 0 | — |
case-11 | fail→pass | 18,646 | 21,169 | +14% | 1 | 1 | 0% | 3,390 | 4,675 | +38% | 0 | 0 | — |
case-12 | pass→pass | 16,414 | 12,186 | -26% | 1 | 1 | 0% | 3,113 | 4,228 | +36% | 0 | 0 | — |
case-13 | pass→pass | 16,210 | 15,241 | -6% | 1 | 1 | 0% | 2,988 | 4,770 | +60% | 0 | 0 | — |
case-15 | fail→fail | 21,491 | 13,194 | -39% | 1 | 1 | 0% | 3,864 | 4,338 | +12% | 0 | 0 | — |
case-16 | pass→pass | 7,378 | 6,254 | -15% | 1 | 1 | 0% | 1,414 | 2,972 | +110% | 0 | 0 | — |
case-17 | pass→pass | 8,682 | 7,683 | -12% | 1 | 1 | 0% | 1,787 | 3,384 | +89% | 0 | 0 | — |
case-18 | pass→pass | 6,980 | 7,788 | +12% | 1 | 1 | 0% | 1,315 | 3,336 | +154% | 0 | 0 | — |
case-19 | pass→pass | 22,169 | 27,406 | +24% | 1 | 1 | 0% | 3,716 | 5,337 | +44% | 0 | 0 | — |
case-20 | pass→pass | 26,594 | 8,756 | -67% | 1 | 1 | 0% | 1,973 | 3,453 | +75% | 0 | 0 | — |
case-21 | pass→pass | 6,791 | 7,320 | +8% | 1 | 1 | 0% | 1,126 | 3,096 | +175% | 0 | 0 | — |
case-22 | pass→pass | 8,491 | 12,204 | +44% | 1 | 1 | 0% | 1,820 | 4,183 | +130% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +18 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.