Indian tax calc
Claude Code skill for Indian income tax & ITR filing - FY25-26 calculators + live e-filing portal verification (read-only Playwright over CDP). You drive, it verifies.
npx -y skills add kumarrahul85/tax-sarathi --skill indian-tax-calcAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 21 days oldThe repository was created 21 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Calculate Indian income tax, capital gains tax (STCG/LTCG), advance tax, and TDS for FY 2025-26 under old and new regimes; includes live ITR e-filing portal verification via Playwright-over-CDP
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
9.2 KB, ~2.7k tokens by cl100k_base, as published. Nobody here has run it
Indian Tax Calculator
Calculate Indian income tax liability, STCG/LTCG on equity and F&O trades, advance tax installments, and TDS for FY 2025-26 — under both old and new tax regimes.
When to Use
- User asks "how much tax do I owe on my salary / income?"
- User wants to calculate STCG or LTCG on stock or mutual fund gains
- User asks about tax on F&O profits
- User wants to compare old regime vs new regime tax
- User needs advance tax calculation or TDS estimation
- User is filling a return on the e-filing portal and wants Claude to verify screens live
How to Use
New regime tax slab (FY 2025-26)
function Get-TaxNewRegime {
param([double]$Income)
# FY 2025-26 new regime slabs (post Budget 2025)
$slabs = @(
@{UpTo=400000; Rate=0},
@{UpTo=800000; Rate=0.05},
@{UpTo=1200000; Rate=0.10},
@{UpTo=1600000; Rate=0.15},
@{UpTo=2000000; Rate=0.20},
@{UpTo=2400000; Rate=0.25},
@{UpTo=[double]::MaxValue; Rate=0.30}
)
$tax = 0; $prev = 0
foreach ($slab in $slabs) {
if ($Income -le $prev) { break }
$taxable = [math]::Min($Income, $slab.UpTo) - $prev
$tax += $taxable * $slab.Rate
$prev = $slab.UpTo
}
# Rebate u/s 87A: nil tax if income <= 12,00,000
if ($Income -le 1200000) { $tax = 0 }
$cess = $tax * 0.04
return [PSCustomObject]@{ Tax=$tax; Cess=$cess; Total=[math]::Round($tax+$cess,2) }
}
Get-TaxNewRegime -Income 1500000
Old regime tax slab (FY 2025-26)
function Get-TaxOldRegime {
param([double]$Income, [double]$Deductions = 0)
$taxableIncome = $Income - $Deductions
$slabs = @(
@{UpTo=250000; Rate=0},
@{UpTo=500000; Rate=0.05},
@{UpTo=1000000; Rate=0.20},
@{UpTo=[double]::MaxValue; Rate=0.30}
)
$tax = 0; $prev = 0
foreach ($slab in $slabs) {
if ($taxableIncome -le $prev) { break }
$taxable = [math]::Min($taxableIncome, $slab.UpTo) - $prev
$tax += $taxable * $slab.Rate
$prev = $slab.UpTo
}
if ($taxableIncome -le 500000) { $tax = [math]::Min($tax, 12500) }
$cess = $tax * 0.04
return [PSCustomObject]@{ TaxableIncome=$taxableIncome; Tax=$tax; Cess=$cess; Total=[math]::Round($tax+$cess,2) }
}
Get-TaxOldRegime -Income 1500000 -Deductions 150000 # 80C deduction
STCG tax on equity (held < 12 months)
function Get-STCG {
param([double]$BuyPrice, [double]$SellPrice, [int]$Qty)
$gain = ($SellPrice - $BuyPrice) * $Qty
$tax = if ($gain -gt 0) { $gain * 0.20 } else { 0 } # 20% STCG from FY25-26
return [PSCustomObject]@{ Gain=$gain; STCGTax=[math]::Round($tax,2) }
}
Get-STCG -BuyPrice 500 -SellPrice 750 -Qty 100
LTCG tax on equity (held > 12 months)
function Get-LTCG {
param([double]$BuyPrice, [double]$SellPrice, [int]$Qty)
$gain = ($SellPrice - $BuyPrice) * $Qty
$exempt = 125000 # ₹1.25 lakh LTCG exemption per FY (FY25-26)
$taxable = [math]::Max(0, $gain - $exempt)
$tax = $taxable * 0.125 # 12.5% LTCG from FY25-26
return [PSCustomObject]@{ Gain=$gain; TaxableGain=$taxable; LTCGTax=[math]::Round($tax,2) }
}
Get-LTCG -BuyPrice 200 -SellPrice 400 -Qty 1000
F&O tax (treated as business income)
# F&O profits/losses are added to regular income and taxed at slab rate
# No special rate — it's ordinary business income
function Get-FnOTax {
param([double]$FnOProfit, [double]$OtherIncome = 0)
$totalIncome = $FnOProfit + $OtherIncome
$tax = Get-TaxNewRegime -Income $totalIncome
return [PSCustomObject]@{
FnOProfit = $FnOProfit
TotalIncome = $totalIncome
TaxLiability = $tax.Total
Note = "F&O taxed at slab rate; maintain books; ITR-3 required"
}
}
Get-FnOTax -FnOProfit 200000 -OtherIncome 800000
Live ITR Portal Verification (Playwright over CDP)
When the user is filling a return on the income-tax e-filing portal (eportal.incometax.gov.in), Claude can watch and verify each screen live instead of the user copy-pasting values. The user drives the browser; Claude only READS. Never automate clicks/fills near Submit or payment — verification only.
Setup (one-time per session)
- Launch a dedicated debug Chrome (separate profile so the user's normal Chrome is untouched):
Start-Process "C:\Program Files\Google\Chrome\Application\chrome.exe" -ArgumentList '--remote-debugging-port=9222', "--user-data-dir=$env:LOCALAPPDATA\ChromeDebug", 'https://eportal.incometax.gov.in'
- User logs in and fills the return in that window as usual.
- Whenever the user says "check", run the peek script (below). It screenshots the active portal tab and dumps its visible text; verify the on-screen figures against the computed return.
Peek script (pw_peek.py)
Requires pip install playwright (browser download NOT needed — it attaches to the user's Chrome). A ready-to-run copy of this script ships alongside this SKILL.md as pw_peek.py.
"""Peek at a live Chrome tab over CDP (read-only). Usage:
python pw_peek.py -> auto-pick incometax.gov.in tab, else last tab
python pw_peek.py <keyword> -> pick tab whose URL/title contains keyword
Saves screenshot to pw_peek.png and prints page title, URL, and visible text.
"""
import sys
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
from playwright.sync_api import sync_playwright
KEYWORD = sys.argv[1].lower() if len(sys.argv) > 1 else "incometax"
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp("http://localhost:9222")
pages = [pg for ctx in browser.contexts for pg in ctx.pages]
if not pages:
sys.exit("No open tabs found.")
page = next((pg for pg in pages
if KEYWORD in pg.url.lower() or KEYWORD in (pg.title() or "").lower()),
pages[-1])
page.bring_to_front()
print("TITLE:", page.title())
print("URL:", page.url)
page.screenshot(path="pw_peek.png", full_page=True)
print("Screenshot saved: pw_peek.png")
print("-" * 80)
text = page.evaluate("document.body.innerText")
print(text[:15000])
After running it, Read pw_peek.png (the screenshot) — the innerText dump misses values inside some Angular form fields, so use both.
Portal quirks learned (AY2026-27 portal)
- Schedule FA CSV upload: header row must match the downloaded template verbatim; data rows unquoted with NO commas inside fields; country column = bare enum key (e.g.
2for USA, not2 - UNITED STATES OF AMERICA); dates =YYYY-MM-DDeven though the UI shows DD-MMM-YYYY; write withutf-8-sigencoding and CRLF line endings. - CSV/field validation rules live in lazy-loaded Angular JS chunks under
https://static.incometax.gov.in/iec/foreturnsay26/— download the chunk with curl and grep for the field name (look forPatternregexes andEnumMaps) to reverse-engineer rejections. - Some schedules (e.g. Schedule CG) only appear after enabling them in the schedule-selection step; CYLA/CFL won't populate until the source schedule is confirmed.
- Internal Validation "Category A" defects block submission and are usually EMPTY dropdowns/radios (nature of employer, secondary-address radio, country code), not wrong numbers — check those first.
- ECONNREFUSED on port 9222 means Chrome wasn't launched with the debug flag — relaunch with the command above (an already-running normal Chrome instance swallows the flag).
Security
- CDP port 9222 has no auth — any local process can attach. Use the separate
ChromeDebugprofile only for the portal session and close the window when done. - Claude must never click Submit, Pay, or e-verify buttons; those stay with the user.
Examples
"How much tax do I pay on ₹15 lakh salary under new regime?"
→ Get-TaxNewRegime -Income 1500000 — returns tax, cess, and total liability.
"I bought 500 shares at ₹200 and sold at ₹350 after 8 months. What's my STCG tax?"
→ Get-STCG -BuyPrice 200 -SellPrice 350 -Qty 500 — 20% on gain.
"Compare old vs new regime for ₹12 lakh income with ₹1.5 lakh 80C deductions" → Run both functions and display side-by-side.
Cautions
- Tax rates shown are for FY 2025-26 based on Budget 2025 announcements — verify against official IT Act before filing
- LTCG exemption limit and STCG rate changed in Union Budget 2024 (effective FY25) — double-check the current year's rates
- F&O losses can be carried forward for 8 years but only offset against business income, not salary
- This calculator is for estimation only — always consult a CA for official tax filing
- Surcharge applies for income > ₹50 lakh (10%) and > ₹1 crore (15%) — not included in base calculation
Acknowledgements
The end-to-end ITR filing workflow pairs well with the file-itr skill by shivprime94 (MIT), which covers ITR-1/2/3/4 portal walkthroughs, regime comparison, and deduction guides. This skill adds the live portal verification technique and Schedule FA / Form 67 (foreign assets & FTC) knowledge that file-itr doesn't cover.