Not in the top 1,000 by GitHub stars
Adityaraj0421/dalal-street-skills
Claude skills for NSE & BSE: scan, plan, replay 10,000x and size every Indian trade, with STT, circuit bands, the 3:15 closing auction and your broker's square-off built in. Paper by default.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
nse-alerts/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
6b33250b06b6 → 6fcc8d46032d
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 6b33250b06b6
No earlier version was observed for comparison.
nse-analyst/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
6b33250b06b6 → 6fcc8d46032d
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 6b33250b06b6
No earlier version was observed for comparison.
nse-bigmoney/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
6b33250b06b6 → 6fcc8d46032d
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 6b33250b06b6
No earlier version was observed for comparison.
nse-broker/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
6b33250b06b6 → 6fcc8d46032d
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 6b33250b06b6
No earlier version was observed for comparison.
nse-budget/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
6b33250b06b6 → 6fcc8d46032d
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 6b33250b06b6
No earlier version was observed for comparison.
nse-entry/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
6b33250b06b6 → 6fcc8d46032d
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 6b33250b06b6
No earlier version was observed for comparison.
nse-exit/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
6b33250b06b6 → 6fcc8d46032d
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 6b33250b06b6
No earlier version was observed for comparison.
nse-news/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
6b33250b06b6 → 6fcc8d46032d
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 6b33250b06b6
No earlier version was observed for comparison.
nse-risk/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
6b33250b06b6 → 6fcc8d46032d
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 6b33250b06b6
No earlier version was observed for comparison.
nse-scanner/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
6b33250b06b6 → 6fcc8d46032d
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 6b33250b06b6
No earlier version was observed for comparison.
nse-timemachine/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
6b33250b06b6 → 6fcc8d46032d
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 6b33250b06b6
No earlier version was observed for comparison.
Verified commit 6fcc8d46032dd551ad89c51745fd95a32db5edfa
git clone --filter=blob:none --no-checkout https://github.com/Adityaraj0421/dalal-street-skills.git .hotskills/adityaraj0421-dalal-street-skills && git -C .hotskills/adityaraj0421-dalal-street-skills checkout --detach 6fcc8d46032dd551ad89c51745fd95a32db5edfa
# Copy each selected skill directory from .hotskills/adityaraj0421-dalal-street-skills into .claude/skills/<skill-name>/Heat
1.5- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- nse-alerts
nse-alerts - nse-analyst
nse-analyst - nse-bigmoney
nse-bigmoney - nse-broker
nse-broker - nse-budget
nse-budget - nse-entry
nse-entry - nse-exit
nse-exit - nse-news
nse-news - nse-risk
nse-risk - nse-scanner
nse-scanner - nse-timemachine
nse-timemachine
How it works
nse-alerts
When your agent uses it
Price Alerts and the NSE clock. Rings when a price, a stop, a circuit limit or the opening bell hits. Turns the trade plan into alerts in one go (the stop, the target, upper/lower circuit proximity and "flat by" at your MIS flat-by time, default 15:10 IST), plus above / below / stop / target levels, percent moves from the previous close, any time of day, and the 09:15 opening bell, each ringing once so you are not spammed. Knows NSE hours with the 2026 holidays (Diwali, Dussehra, Holi...), weekends and special sessions such as Diwali Muhurat trading, answers "is the market open", works out India time itself, fetches free delayed quotes from Yahoo (RELIANCE.NS, TCS.NS, RELIANCE.BO, Nifty) one ticker at a time, reads each stock's price band from NSE's sec_list.csv, and writes nse/prices.json for sizing and the risk check. Use when the user says "alert me when", "tell me if RELIANCE hits", "watch my stop", "watch my trade", "remind me to square off by 3:10", "is the market open", "is NSE open today", "when does the market open", "is it a holiday", "is there Muhurat trading", "is it near the upper circuit", "get me a price", or right after /nse-exit writes a plan.
What it loads into context
Frontmatter
359 tokensAlways available to the agent
SKILL.md
3,665 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- What it reads and writes
- Rule types
- Circuit limits
- Quotes
- The NSE clock
- Steps
- Example
- Rules
- What it never does
- Safety
Scripts executed separately
alerts.py
Files
../.claude-plugin/marketplace.jsonasset556 bytes../.claude-plugin/plugin.jsonasset822 bytesSKILL.mdcore12,842 bytesSKILL.mdcore12,842 bytesSKILL.mdcore12,842 bytesSKILL.mdcore12,842 bytesSKILL.mdcore12,842 bytesSKILL.mdcore12,842 bytesSKILL.mdcore12,842 bytesSKILL.mdcore12,842 bytesSKILL.mdcore12,842 bytesSKILL.mdcore12,842 bytesSKILL.mdcore12,842 bytesSKILL.mdcore12,842 bytesSKILL.mdcore12,842 bytesSKILL.mdcore12,842 bytesalerts.example.jsonasset717 bytesalerts.pyruns70,905 bytes
Read SKILL.md
# nse-alerts
On Windows, use `py` in place of `python3`.
Price Alerts watches the numbers so the user does not have to stare at a
chart. An alert is information, never an order: when a stop alert rings,
nothing is sold by this skill. In a live MIS trade the stop order sits at the
broker and does the work; the alerts tell the user what happened and when it
is time to be flat.
`${CLAUDE_SKILL_DIR}` below is this skill's folder (where this SKILL.md lives).
```bash
python3 "${CLAUDE_SKILL_DIR}/alerts.py" clock # NSE open or closed, next openView the complete source on GitHubnse-analyst
When your agent uses it
The Results Analyst for Indian stocks. Reads a listed company's reported numbers from Yahoo's fundamentals time series and sums up what changed: revenue, gross, operating, EBITDA and net margins, net profit and EPS, quarter by quarter in rupees crore, each against the same quarter a year earlier (Q1FY27 = April-June 2026), with the trailing twelve months, the last fiscal years, and balance sheet and cash flow lines. Missing quarters are shown as gaps, never filled in. Reads a concall transcript when you paste one. Use when the user says "how did Reliance's results look", "TCS Q2 results", "analyze the quarterly results", "what changed this quarter", "is profit growing", "compare margins", "sum up the concall", "when does Infosys report", or before trading or investing in a stock around its results (MIS or CNC, Nifty stocks on NSE or BSE).
What it loads into context
Frontmatter
232 tokensAlways available to the agent
SKILL.md
2,018 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- What it reads and writes
- Yahoo fundamentals keys that work for Indian stocks
- The rules
- Steps
- Example
- What it never does
- Safety
Scripts executed separately
facts.py
Files
SKILL.mdcore7,611 bytesSKILL.mdcore7,611 bytesSKILL.mdcore7,611 bytesSKILL.mdcore7,611 bytesfacts.pyruns35,233 bytes
Read SKILL.md
# nse-analyst
On Windows, use `py` in place of `python3`.
Results day moves Indian stocks more than almost anything else, and the press
release puts the best number first. This skill lines up the numbers quarter by
quarter and says plainly what changed. For an intraday trader it answers: what
did the last report say, and does the next one fall inside this trade? For a
delivery (CNC) investor it shows the multi-year trend and the cash flow behind
the profit.
Tool in this folder (standard library Python, no keys):
```bashView the complete source on GitHubnse-bigmoney
When your agent uses it
The Big Money Tracker for Indian markets. Reads NSE's public bulk deal and block deal files, keeps every day it sees, and shows who bought or sold what: client, stock, quantity, price and value in rupees crore. Alerts once per new deal, flags stocks in your portfolio or watchlist, filters by client name (a fund, an investor, an AMC), ranks the day's biggest deals, and summarises one client's buys and sells across stored history. Documents the manual route for SEBI insider (PIT) disclosures and shareholding patterns. Use when the user says "bulk deals today", "block deals", "what is Rakesh Jhunjhunwala's family buying", "which fund bought X", "who is buying RELIANCE", "smart money", "FII DII buying", "insider buying", "promoter buying", "alert me on big deals in my stocks", or "run the big money skill".
What it loads into context
Frontmatter
237 tokensAlways available to the agent
SKILL.md
1,950 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- What it reads and writes
- What these deals are
- The rules
- Step 1: what is new
- Step 2: the day's biggest, a stock, a client
- What to say
- Insider (SEBI PIT) disclosures and shareholding patterns: the manual route
- What it never does
- Safety
Scripts executed separately
deals.py
Files
SKILL.mdcore7,363 bytesSKILL.mdcore7,363 bytesSKILL.mdcore7,363 bytesSKILL.mdcore7,363 bytesSKILL.mdcore7,363 bytesSKILL.mdcore7,363 bytesSKILL.mdcore7,363 bytesSKILL.mdcore7,363 bytesdeals.pyruns30,189 bytes
Read SKILL.md
# nse-bigmoney
On Windows, use `py` in place of `python3`.
When someone buys or sells a large slice of a company, NSE publishes it. This
skill reads those files, remembers each day, and tells you what is new. It is
fast. It is not early: the files appear after the close, so you read a deal
hours old at best. There is no inside information here, only public data read
quickly. Say that every time.
Tool in this folder (standard library Python, no keys):
```bash
python3 "${CLAUDE_SKILL_DIR}/deals.py" --helpView the complete source on GitHubnse-broker
When your agent uses it
Order Executor for NSE/BSE, for the ten biggest Indian brokers (Groww, Zerodha, Angel One, ICICIdirect, Upstox, Kotak Neo, HDFC Sky, Dhan, SBI Securities, Motilal Oswal). Paper trading by default, never a real order without your yes. Shows each order as a plain ticket (entry, stop, target, max loss with charges, flat-by time), records your yes word for word, and in the default PAPER mode books a simulated fill in its own paper ledger (no Indian broker gives a paper account through its API) only when the market is at or through the limit, else keeps it as a working day order that fills or expires like a real one: stop and target tracked, P&L net of charges, in nse/state/broker.json and nse/portfolio.json. In LIVE mode it renders the order in the configured broker's own API field names (Kite place_order, Groww, SmartAPI, Breeze, Upstox, Neo, DhanHQ, Motilal) or as a manual ticket where there is no API, says honestly whether that broker's official MCP server can place orders (Groww yes; Zerodha's hosted one is read-only plus GTT; Upstox and Kotak read-only), and prints the SL-M stop or GTT OCO to place after the fill. Builds the sell ticket that closes an intraday position before flat_by, records fills, and logs each trade's max loss so nse-risk can hold the daily limit. Use when the user says "place the order", "buy it", "execute", "send it to my broker", "close my position", "square off", "flatten", "get me out", "connect Zerodha", "connect Groww", "set up Kite", "which broker", "paper trade", or after /nse-risk passes.
What it loads into context
Frontmatter
448 tokensAlways available to the agent
SKILL.md
5,289 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- What it reads and writes
- Brokers: one profile each
- Live mode per broker
- Paper mode (the default)
- Live mode: what holds true at Indian brokers
- Steps: the entry
- Steps: while it is open, and out before flat_by
- Example: the reel (paper)
- What it never does
- Safety
Scripts executed separately
ticket.py
Files
SKILL.mdcore19,872 bytesSKILL.mdcore19,872 bytesSKILL.mdcore19,872 bytesSKILL.mdcore19,872 bytesSKILL.mdcore19,872 bytesSKILL.mdcore19,872 bytesSKILL.mdcore19,872 bytesSKILL.mdcore19,872 bytesSKILL.mdcore19,872 bytesSKILL.mdcore19,872 bytesticket.pyruns110,749 bytes
Read SKILL.md
# nse-broker
On Windows, use `py` in place of `python3`.
The Order Executor is the only skill in this pack that can lead to a real
order, so it is the strictest. An order reaches the market only after three
separate gates, every time, for every order:
1. **nse-risk passed this exact order today** (matched by fingerprint).
2. **The user typed an explicit yes for this one order** in the chat.
3. **The user clicked Allow once** on Claude's own permission card, which
appears because the order tool is set to "Needs approval". (Live mode only: the paper ledger sends nothing anywhere.)
Two yeses from the user, one PASS from the rules. No yes, no order.View the complete source on GitHubnse-budget
When your agent uses it
Budget Manager for NSE/BSE. Sizes every position to your capital and your max loss per trade, charges included. Reads the trade plan from nse-exit (entry, stop, target, MIS or CNC), finds the whole shares that fit inside four limits (max loss at the stop INCLUDING round-trip STT, brokerage, GST and stamp duty; position cap; max order; cash or MIS margin after your buffer), says which limit decided it, and writes the order set to nse/orders.json: an entry LIMIT plus an SL-M stop for MIS intraday, or an entry plus a GTT OCO stop/target for CNC delivery. A stop too far for your max loss is a plain refusal, not a smaller order. Also splits a CNC budget (for example Rs 5 lakh) across Nifty names by weight. Nothing is placed. Use when the user says "how many shares", "size this trade", "how much should I buy", "I have 2 lakh", "I only want to risk Rs 1,000 a trade", "set my rules", "keep 10% in cash", "how much margin", "allocate my portfolio across Nifty stocks", or after /nse-exit writes a plan for RELIANCE, TCS, HDFCBANK or any NSE stock.
What it loads into context
Frontmatter
317 tokensAlways available to the agent
SKILL.md
3,674 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- What it reads and writes
- Step 1: set the rules once
- Step 2: size the trade
- Step 3: show the user
- The order file
- Example: the reel
- Allocation mode (CNC portfolios)
- Rules
- What it never does
- Safety
Scripts executed separately
size.py
Files
SKILL.mdcore12,842 bytesSKILL.mdcore12,842 bytesSKILL.mdcore12,842 bytesSKILL.mdcore12,842 bytesSKILL.mdcore12,842 bytesSKILL.mdcore12,842 bytesSKILL.mdcore12,842 bytesconfig.example.jsonasset823 bytessize.pyruns77,079 bytestargets.example.jsonasset506 bytes
Read SKILL.md
# nse-budget
On Windows, use `py` in place of `python3`.
The Budget Manager turns a plan ("buy RELIANCE at 1196.10, stop 1188.50")
into an exact order ("buy 118 shares"), inside rules the user sets once. The
stop decides the size: the further away the stop, the fewer shares. It writes
a proposal only. nse-risk checks it and nse-broker asks the user yes or no.
Most people who trade intraday lose money. Sizing to a max loss keeps each
loss small; it does not make a trade win.
`${CLAUDE_SKILL_DIR}` below is this skill's folder (where this SKILL.md lives).
```bashView the complete source on GitHubnse-entry
When your agent uses it
Entry Timer for NSE/BSE. Watches a setup bar by bar and tells you the moment to get in. Reads free Yahoo 1-minute or 5-minute bars, builds the opening range (the first 15 minutes from 9:15 IST by default) and calls the entry on the first completed bar that CLOSES above the range high, or above a level you give it (like a 20-day high from the scanner), with an optional volume check. Says waiting and how far, triggered with the time and the price in rupees, expired, or not open yet, and writes nse/entry.json for /nse-exit. Works for RELIANCE, TCS, Nifty stocks (.NS or .BO), intraday (MIS) or delivery (CNC). Long side only. It never places an order. Use when the user says "tell me when to get in", "watch RELIANCE", "has TCS broken out", "did it break the opening range", "entry signal", "time my entry", "check my watchlist", or after /nse-scanner and /nse-news, before /nse-exit.
What it loads into context
Frontmatter
305 tokensAlways available to the agent
SKILL.md
2,911 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- What it reads and writes
- The rule
- Steps
- Example: the reel
- Rules
- What it never does
- Safety
Scripts executed separately
entry.py
Files
SKILL.mdcore10,006 bytesSKILL.mdcore10,006 bytesSKILL.mdcore10,006 bytesSKILL.mdcore10,006 bytesSKILL.mdcore10,006 bytesSKILL.mdcore10,006 bytesSKILL.mdcore10,006 bytesSKILL.mdcore10,006 bytesentry.pyruns57,818 bytes
Read SKILL.md
# nse-entry
On Windows, use `py` in place of `python3`.
The Entry Timer turns a setup into one moment: the bar that confirms it. It
reads bars, 1-minute or 5-minute, and waits for each one to finish. A price
that pokes above the high in the middle of a bar is not an entry. A bar that
CLOSES above it is. Then it says the time and the price, writes them down for
the Exit Planner, and stops. It never buys anything. Day trading loses most
people money, and a clean signal does not change that.
`${CLAUDE_SKILL_DIR}` below is this skill's folder (where this SKILL.md lives).
```bashView the complete source on GitHubnse-exit
When your agent uses it
Exit Planner for NSE/BSE. Sets your stop and your target before you enter, so you know when to get out. Reads the entry from nse-entry (or a price you give), puts the stop at the opening-range midpoint by default (or the range low, your price, a percent, or a multiple of the ATR), rounds it down to the 0.05 tick, and sets the target at 2R (or 1R, or your price). Shows the round-trip charges (brokerage, STT, GST, stamp duty) and reward:risk after them. Refuses a stop at or above the entry, a target at or below it, or a stop too tight to survive the spread, and says why. Carries the product (MIS intraday or CNC delivery) and the flat-by time into nse/plan.json for the Time Machine, the Budget Manager and Price Alerts. Long side only. Use when the user says "where's my stop", "set my stop and target", "plan the exit", "when do I get out", "stop loss", "what's my R", "risk reward", "RELIANCE stop loss in rupees", or right after /nse-entry triggers, before /nse-timemachine.
What it loads into context
Frontmatter
343 tokensAlways available to the agent
SKILL.md
3,781 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- What it reads and writes
- nse/plan.json (the exact shape)
- Stops and targets
- Steps
- Example: the reel
- Rules
- What it never does
- Safety
Scripts executed separately
exit.py
Files
SKILL.mdcore12,470 bytesSKILL.mdcore12,470 bytesSKILL.mdcore12,470 bytesSKILL.mdcore12,470 bytesSKILL.mdcore12,470 bytesSKILL.mdcore12,470 bytesSKILL.mdcore12,470 bytesexit.pyruns63,930 bytes
Read SKILL.md
# nse-exit
On Windows, use `py` in place of `python3`.
The Exit Planner decides how a trade ends before it starts. The stop is where
the setup has failed. The target is where you take what you came for. Both
are set BEFORE the entry, written down and handed on, so nobody has to decide
anything in the middle of a fast move. A stop is a plan, not a guarantee: a
gap, a circuit limit or a fast market can fill past it. Day trading loses most
people money, and a neat plan does not change that.
`${CLAUDE_SKILL_DIR}` below is this skill's folder (where this SKILL.md lives).
```bashView the complete source on GitHubnse-news
When your agent uses it
News Monitor for NSE/BSE stocks. Tracks breaking news on every stock you watch or hold: Google News headlines (India edition) searched by company name and ticker, and how far each stock is from its previous close. Shows only what is new since the last check, newest first, in India time (IST), tags each item (results, dividend, bonus, split, buyback, order win, deal, block/bulk deal, rating/target, SEBI/regulatory, management change, fund raise, macro/RBI, circuit) and never repeats one. Use when the user says "any news on RELIANCE", "why is TCS moving", "what's the news on my watchlist", "morning briefing", "pre-market news", "monitor the news", "did anything break", "results date", "any dividend or bonus news", "block deal news", or after /nse-scanner finds setups.
What it loads into context
Frontmatter
226 tokensAlways available to the agent
SKILL.md
1,588 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- What it reads and writes
- What it cannot see
- The rules
- Steps
- What it never does
- Safety
Scripts executed separately
news.py
Files
SKILL.mdcore6,093 bytesSKILL.mdcore6,093 bytesSKILL.mdcore6,093 bytesSKILL.mdcore6,093 bytesSKILL.mdcore6,093 bytesSKILL.mdcore6,093 bytesSKILL.mdcore6,093 bytesSKILL.mdcore6,093 bytesnews.pyruns39,066 bytes
Read SKILL.md
# nse-news
On Windows, use `py` in place of `python3`.
A chart can look perfect and still be about to gap on a results announcement,
a SEBI notice or a block deal. Before a setup becomes a trade, this skill
reads the news for every stock on the watchlist and tells you only what is
new. It also prints how far each stock has moved today, so a headline and a
move sit side by side.
Tool in this folder (standard library Python, no keys):
```bash
python3 "${CLAUDE_SKILL_DIR}/news.py" # watchlist + plan + portfolioView the complete source on GitHubnse-risk
When your agent uses it
Risk Manager for NSE/BSE. Checks every trade against your limits and stops anything over them, before it can reach the broker. For an intraday (MIS) trade: a stop is required, the loss at the stop INCLUDING charges must fit your max loss per trade, reward:risk after charges must meet your minimum, the day's total risk must fit your daily loss limit, no more than your trades per day, entries only inside your window (IST, NSE holidays and Muhurat sessions), no entry in the last minutes before continuous trading ends (F&O stocks stop at 15:15 until 2026-12-06), and the order must carry a flat_by at least 5 minutes before the configured broker's MIS auto square-off for that stock and day. India rules: series BE/BZ cannot be MIS, GSM/ASM stocks block MIS and warn on delivery, entry/stop/target must sit inside the circuit band from sec_list.csv, CNC can never be sold short. Plus the basics: blocked symbols, order size, position cap, cash buffer and MIS margin, F&O, malformed orders and GTTs, duplicates and a daily order limit. Getting out is never blocked. Prints PASS or BLOCK with the reason and records the verdicts so nse-broker only shows an order that passed. Use when the user says "check my order", "is this safe", "risk check", "does this break my rules", "can I take this trade", "is RELIANCE in a circuit", "how much have I risked today", or before /nse-broker, always.
What it loads into context
Frontmatter
381 tokensAlways available to the agent
SKILL.md
3,192 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- What it reads and writes
- Entries and exits
- The checks
- Steps
- Example: the reel
- Rules
- What it never does
- Safety
Scripts executed separately
check.py
Files
SKILL.mdcore12,025 bytesSKILL.mdcore12,025 bytesSKILL.mdcore12,025 bytesSKILL.mdcore12,025 bytesSKILL.mdcore12,025 bytesSKILL.mdcore12,025 bytescheck.pyruns80,116 bytes
Read SKILL.md
# nse-risk
On Windows, use `py` in place of `python3`.
The Risk Manager is the gate between a proposal and the broker. Every order
written by nse-budget or nse-broker's flatten passes through it. A BLOCK is
final for that order: it does not go to the user for a yes, and it does not go
to the broker. Most people who trade intraday lose money. These limits keep
each loss and each day's losses small. They do not make a trade win.
`${CLAUDE_SKILL_DIR}` below is this skill's folder (where this SKILL.md lives).
```bash
python3 "${CLAUDE_SKILL_DIR}/check.py" # nse/ files; writes nse/state/risk.jsonView the complete source on GitHubnse-scanner
When your agent uses it
Chart Scanner for NSE/BSE. Scans hundreds of Indian charts for setups: opening-range breakouts, flags, oversold bounces and, for investors, delivery-percentage spikes. Builds its stock list from the Nifty indices (Nifty 50, 100, 200, 500, Midcap 150, Smallcap 250, Bank Nifty) on niftyindices.com or from every EQ-series stock on NSE, runs a scan of daily closes (20-day closing-high breakout, bull flag, reclaimed the 20-day average, oversold, oversold bounce), an intraday opening-range breakout scan on 5-minute bars from 09:15 IST, and a delivery scan on the NSE bhavcopy (delivery % and delivery quantity well above a stock's own average), then writes nse/watchlist.json for nse-news and nse-entry. Free Yahoo and NSE archive data. Use when the user says "scan the market", "find me setups", "what is breaking out", "opening range breakout", "Nifty 500 scan", "scan for bull flags", "oversold stocks", "delivery spike", "high delivery percentage", "accumulation", "stocks to invest in", "pre-market scan", "build my watchlist", "what should I look at today", for intraday (MIS) or delivery (CNC) ideas on RELIANCE, TCS, HDFCBANK and friends, or at the start of a trading day before /nse-news.
What it loads into context
Frontmatter
376 tokensAlways available to the agent
SKILL.md
3,553 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- What it reads and writes
- The universe
- The daily scan (after the close or before the open)
- The opening-range breakout scan (during the session)
- The delivery scan (for investors)
- Data and limits
- Steps
- Rules
- What it never does
- Safety
Scripts executed separately
scan.py
Files
SKILL.mdcore12,894 bytesSKILL.mdcore12,894 bytesSKILL.mdcore12,894 bytesSKILL.mdcore12,894 bytesSKILL.mdcore12,894 bytesSKILL.mdcore12,894 bytesSKILL.mdcore12,894 bytesSKILL.mdcore12,894 bytesSKILL.mdcore12,894 bytesscan.pyruns80,289 bytes
Read SKILL.md
# nse-scanner
On Windows, use `py` in place of `python3`.
The Chart Scanner is the first step of a trade, intraday or delivery. It
reads hundreds of free charts and files and lists the ones that match a rule.
That is all it does. A scan is a list of charts that match a rule, not a list
of stocks to buy, and a setup on a chart is not a prediction. Most people who
day trade lose money; the scanner does not change that. It only saves you
from flipping through 500 charts by hand.
`${CLAUDE_SKILL_DIR}` below is this skill's folder (where this SKILL.md lives).
```bashView the complete source on GitHubnse-timemachine
When your agent uses it
Time Machine for NSE/BSE trades. Replays every possible outcome of a trade before you risk a rupee: 10,000 simulated sessions plus every past time the setup fired. Takes the plan from nse-exit (entry, stop, target, MIS or CNC), rebuilds the rest of the day 10,000 times from the stock's own 5-minute bars over the last 60 days (RELIANCE, TCS, INFY, HDFCBANK, any .NS or .BO ticker), and re-runs the same rule on every past session. Results are in R with the round-trip charges (STT, brokerage, exchange, SEBI, stamp, GST) already inside, so a 1R target nets less than 1R. Prints the odds of target first, stop first, or neither by the flat-by exit (default 15:10 IST), where the price sits then, the average R, the history, and one honest verdict, then hands off to /nse-budget. Use when the user says "run the time machine", "replay this trade", "what are the odds", "simulate this trade", "monte carlo", "backtest this setup", "how often does this hit the target", "is this a coin flip", "will charges eat this", or after /nse-exit writes a plan, before /nse-budget.
What it loads into context
Frontmatter
342 tokensAlways available to the agent
SKILL.md
3,663 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- What it reads and writes
- How it works
- Steps
- Example
- Rules
- What it never does
- Safety
Scripts executed separately
timemachine.py
Files
SKILL.mdcore12,843 bytesSKILL.mdcore12,843 bytesSKILL.mdcore12,843 bytesSKILL.mdcore12,843 bytesSKILL.mdcore12,843 bytesSKILL.mdcore12,843 bytesSKILL.mdcore12,843 bytestimemachine.pyruns79,604 bytes
Read SKILL.md
# nse-timemachine
On Windows, use `py` in place of `python3`.
The Time Machine sits between the plan and the money. nse-exit has set the
entry, the stop and the target. Before anything is sized or sent, this skill
asks one question: if today plays out like the stock's own last 60 days, how
often does this plan hit the target first, the stop first, or neither? It
answers with 10,000 replays and with the real record of the same rule on
every past session. It is a simulation built from the stock's own recent
bars, not a prediction. Day trading loses most people money, and a
good-looking replay does not change that.
`${CLAUDE_SKILL_DIR}` below is this skill's folder (where this SKILL.md lives).View the complete source on GitHubSkills included
- nse-alerts
- nse-analyst
- nse-bigmoney
- nse-broker
- nse-budget
- nse-entry
- nse-exit
- nse-news
- nse-risk
- nse-scanner
- nse-timemachine
Repository facts
- License
- MIT
- Created
- Oct 26, 2026
- Last pushed
- Oct 29, 2026
- Forks
- 4
- Open issues
- 6
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 7, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 77 notes
nse-alerts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzednse-alerts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzednse-alerts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzednse-alerts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzednse-alerts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzednse-alerts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzednse-alerts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzednse-alerts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzednse-alerts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzednse-alerts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzednse-alerts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzednse-alerts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzednse-alerts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzednse-analyst/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzednse-analyst/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzednse-analyst/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzednse-bigmoney/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzednse-bigmoney/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzednse-bigmoney/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzednse-bigmoney/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- No dangerous shell commands
- 277 network referencesin 17 files: nse-alerts/alerts.py:42 nse-broker/ticket.py:272 nse-risk/check.py:297 and 14 more
- 5 obfuscation signalsin 5 files: nse-alerts/alerts.py:974 nse-bigmoney/deals.py:347 nse-news/news.py:595 and 2 more
- No instruction overrides
- 11 executable scriptsin 11 files: nse-alerts/alerts.py:1 nse-analyst/facts.py:1 nse-bigmoney/deals.py:1 and 8 more
- No access to secrets
- No requests to vote in Hot
Show all 293 signals by file
.claude-plugin/marketplace.json
- Network accessline 1
{ "$schema": "https://anthropic.com/claude-code/marketplace.schema.json", - Network accessline 2
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json", - Network accessline 3
"name": "dalal-street-skills", "description": "Claude skills for Indian stock markets (NSE/BSE)", "owner": {"name": "Aditya Raj", "url": "https://github.com/Adityaraj0421"}, - Network accessline 4
"description": "Claude skills for Indian stock markets (NSE/BSE)", "owner": {"name": "Aditya Raj", "url": "https://github.com/Adityaraj0421"}, "plugins": [ - Network accessline 5
"owner": {"name": "Aditya Raj", "url": "https://github.com/Adityaraj0421"}, - Network accessline 10
"source": "./", "category": "productivity", "homepage": "https://github.com/Adityaraj0421/dalal-street-skills" - Network accessline 11
"category": "productivity", "homepage": "https://github.com/Adityaraj0421/dalal-street-skills" } - Network accessline 12
"homepage": "https://github.com/Adityaraj0421/dalal-street-skills"
.claude-plugin/plugin.json
- Network accessline 3
"description": "11 Claude skills for trading and investing on NSE and BSE: scanner, news, entry timer, exit planner, 10,000-replay time machine, budget, risk manager, broker tickets for the top 10 Indian brokers (paper by default), alerts, - Network accessline 4
"version": "1.1.0", "author": {"name": "Aditya Raj", "url": "https://github.com/Adityaraj0421"}, "homepage": "https://github.com/Adityaraj0421/dalal-street-skills", - Network accessline 5
"author": {"name": "Aditya Raj", "url": "https://github.com/Adityaraj0421"}, - Network accessline 6
"homepage": "https://github.com/Adityaraj0421/dalal-street-skills", - Network accessline 7
"repository": "https://github.com/Adityaraj0421/dalal-street-skills",
nse-alerts/SKILL.md
nse-alerts/alerts.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 42
Quotes (free, delayed, unofficial; for alerts only, never for timing an order): Yahoo https://query2.finance.yahoo.com/v8/finance/chart/RELIANCE.NS?range=1d&interval=5m - Network accessline 43
Yahoo https://query2.finance.yahoo.com/v8/finance/chart/RELIANCE.NS?range=1d&interval=5m - Network accessline 47
Stooq has no Indian tickers, so Yahoo is the only source. --offline DIR reads DIR/yahoo-<KEY>.json (or .json.gz) and DIR/sec_list.csv. Band: https://archives.nseindia.com/content/equities/sec_list.csv (plain CSV, - Network accessline 48
--offline DIR reads DIR/yahoo-<KEY>.json (or .json.gz) and DIR/sec_list.csv. Band: https://archives.nseindia.com/content/equities/sec_list.csv (plain CSV, cached once a day in nse/state/sec_list.json). - Network accessline 49
Band: https://archives.nseindia.com/content/equities/sec_list.csv (plain CSV, - Network accessline 274
# intraday position before continuous trading ends. # Which stocks are CAS stocks: the F&O underlyings in NSE's open file # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily). - Network accessline 276
# https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily). - Network accessline 280
("2026-08-03", "2026-12-06", datetime.time(15, 15)), ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" - Network accessline 281
) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" FO_INDEXES = {"NIFTY", "BANKNIFTY", "FINNIFTY", "MIDCPNIFTY", "NIFTYNXT50"} - Network accessline 282
FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" - Network accessline 366
def _open_url(url, timeout=20, accept="application/json"): req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 367
req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 368
with urllib.request.urlopen(req, timeout=timeout) as r: - Network accessline 376
last = "no answer" for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) - Network accessline 377
for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) for attempt in (0, 1): - Network accessline 378
url = "https://%s.finance.yahoo.com%s" % (host, path) - Network accessline 509
"squareoff": {"cas": "15:05", "other": "15:20"}, "verified": ["brokerage", "dp_charge"], "stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, - Network accessline 510
"stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)", "paper": False, - Network accessline 511
"api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)", - Network accessline 517
"squareoff": {"cas": "15:12", "other": "15:25"}, "verified": ["brokerage", "dp_charge", "squareoff"], "stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = - Network accessline 518
"stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; " "regular orders need a self-hosted server with y - Network accessline 519
"api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; " - Network accessline 540
"squareoff": {"cas": "15:10", "other": "15:25"}, "verified": ["brokerage", "dp_charge"], "stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": F - Network accessline 541
"stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False, }, - Network accessline 542
"api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False, - Network accessline 547
"squareoff": {"cas": "15:05", "other": "15:05"}, "verified": ["brokerage", "squareoff"], "stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (officia - Network accessline 548
"stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)", "paper": False, - Network accessline 549
"api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)", - Network accessline 555
"squareoff": dict(UNVERIFIED_SQUAREOFF), "verified": ["brokerage"], "stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)", - Network accessline 556
"stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)", "paper": False, - Network accessline 557
"api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)", - Network accessline 798
PAUSE = 0.5 # seconds between requests: be polite to free endpoints SEC_LIST_URL = "https://archives.nseindia.com/content/equities/sec_list.csv" - Network accessline 799
SEC_LIST_URL = "https://archives.nseindia.com/content/equities/sec_list.csv" - Possible obfuscationline 974
rows = csv.reader(io.StringIO(text.lstrip("<U+FEFF>")))
nse-analyst/facts.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 15
Source (open, no key): Yahoo https://query2.finance.yahoo.com/ws/fundamentals-timeseries/v1/finance/timeseries/<SYM>.NS?type=... - Network accessline 16
https://query2.finance.yahoo.com/ws/fundamentals-timeseries/v1/finance/timeseries/<SYM>.NS?type=... - Network accessline 182
def _open_url(url, timeout=20, accept="application/json"): req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 183
req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 184
with urllib.request.urlopen(req, timeout=timeout) as r: - Network accessline 192
last = "no answer" for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) - Network accessline 193
for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) for attempt in (0, 1): - Network accessline 194
url = "https://%s.finance.yahoo.com%s" % (host, path)
nse-bigmoney/SKILL.md
- Network accessline 36
- Reads `https://archives.nseindia.com/content/equities/bulk.csv` and
nse-bigmoney/deals.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 14
Where the data comes from (open archive files, no key): https://archives.nseindia.com/content/equities/bulk.csv - Network accessline 15
https://archives.nseindia.com/content/equities/bulk.csv - Network accessline 16
https://archives.nseindia.com/content/equities/block.csv - Network accessline 185
def _open_url(url, timeout=20, accept="application/json"): req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 186
req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 187
with urllib.request.urlopen(req, timeout=timeout) as r: - Network accessline 195
last = "no answer" for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) - Network accessline 196
for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) for attempt in (0, 1): - Network accessline 197
url = "https://%s.finance.yahoo.com%s" % (host, path) - Network accessline 283
BULK_URL = "https://archives.nseindia.com/content/equities/bulk.csv" - Network accessline 284
BLOCK_URL = "https://archives.nseindia.com/content/equities/block.csv" - Network accessline 299
def download(url, timeout=30): req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": "text/csv,*/*"}) - Network accessline 300
req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": "text/csv,*/*"}) - Network accessline 301
try: with urllib.request.urlopen(req, timeout=timeout) as resp: return resp.read().decode("utf-8", "replace") - Network accessline 302
with urllib.request.urlopen(req, timeout=timeout) as resp: - Possible obfuscationline 347
rows = list(csv.reader(io.StringIO(text.lstrip("<U+FEFF>"))))
nse-broker/SKILL.md
- Network accessline 104
- **Groww.** Connect the official MCP server: Customize > Connectors > Add custom connector, URL `https://mcp.groww.in/mcp`, log in with OAuth in the browser. It describes order tools: read the connected server's - Network accessline 105
`https://mcp.groww.in/mcp`, log in with OAuth in the browser. It describes order tools: read the connected server's - Network accessline 106
tool list, map the ticket's fields onto the order tool, set that tool to Needs approval. Selling needs DDPI on the account. - **Zerodha.** Add `https://mcp.kite.trade/mcp` the same way (Claude Code: `claude mcp add --transport http kite h - Network accessline 107
- **Zerodha.** Add `https://mcp.kite.trade/mcp` the same way (Claude Code: `claude mcp add --transport http kite - Network accessline 108
https://mcp.kite.trade/mcp`) and log in on Zerodha's Kite page. The hosted server is read-only plus GTT: use it for - Network accessline 112
- **Upstox, Kotak Neo.** Their official MCP servers are read-only: use them to read positions and orders, not to place. Place the ticket through the broker's official API (the user sets it up and holds the keys) or by hand in the app. - * - Network accessline 113
Place the ticket through the broker's official API (the user sets it up and holds the keys) or by hand in the app. - **HDFC Sky.** `https://api.hdfcsky.com/mcp` exists; whether it places orders is not confirmed. Read its tool list; if it ha - Network accessline 114
- **HDFC Sky.** `https://api.hdfcsky.com/mcp` exists; whether it places orders is not confirmed. Read its tool list; if it has
nse-broker/ticket.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 272
# intraday position before continuous trading ends. # Which stocks are CAS stocks: the F&O underlyings in NSE's open file # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily). - Network accessline 274
# https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily). - Network accessline 278
("2026-08-03", "2026-12-06", datetime.time(15, 15)), ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" - Network accessline 279
) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" FO_INDEXES = {"NIFTY", "BANKNIFTY", "FINNIFTY", "MIDCPNIFTY", "NIFTYNXT50"} - Network accessline 280
FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" - Network accessline 364
def _open_url(url, timeout=20, accept="application/json"): req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 365
req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 366
with urllib.request.urlopen(req, timeout=timeout) as r: - Network accessline 374
last = "no answer" for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) - Network accessline 375
for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) for attempt in (0, 1): - Network accessline 376
url = "https://%s.finance.yahoo.com%s" % (host, path) - Network accessline 507
"squareoff": {"cas": "15:05", "other": "15:20"}, "verified": ["brokerage", "dp_charge"], "stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, - Network accessline 508
"stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)", "paper": False, - Network accessline 509
"api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)", - Network accessline 515
"squareoff": {"cas": "15:12", "other": "15:25"}, "verified": ["brokerage", "dp_charge", "squareoff"], "stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = - Network accessline 516
"stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; " "regular orders need a self-hosted server with y - Network accessline 517
"api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; " - Network accessline 538
"squareoff": {"cas": "15:10", "other": "15:25"}, "verified": ["brokerage", "dp_charge"], "stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": F - Network accessline 539
"stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False, }, - Network accessline 540
"api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False, - Network accessline 547
"squareoff": {"cas": "15:05", "other": "15:05"}, "verified": ["brokerage", "squareoff"], "stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (officia - Network accessline 548
"stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)", "paper": False, - Network accessline 549
"api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)", - Network accessline 555
"squareoff": dict(UNVERIFIED_SQUAREOFF), "verified": ["brokerage"], "stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)", - Network accessline 556
"stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)", "paper": False, - Network accessline 557
"api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)", - Network accessline 1078
MCP_ORDERS = { "groww": ("places", "Groww's official MCP server (https://mcp.groww.in/mcp, OAuth in the browser) places orders: " - Network accessline 1079
"groww": ("places", "Groww's official MCP server (https://mcp.groww.in/mcp, OAuth in the browser) places orders: " - Network accessline 1080
"read its tool list for the order tool and map the ticket's fields onto it."), "zerodha": ("gtt_only", "Zerodha's hosted MCP (https://mcp.kite.trade/mcp) is read-only plus GTT. Regular orders " "need a self-h - Network accessline 1081
"zerodha": ("gtt_only", "Zerodha's hosted MCP (https://mcp.kite.trade/mcp) is read-only plus GTT. Regular orders " - Network accessline 1086
"kotak": ("read_only", "Kotak Neo's official MCP server cannot place orders. Use the Neo Trade API (you set it " "up) or place this ticket by hand in the app."), "hdfcsky": ("unknown", "HDFC Sky has an officia - Network accessline 1087
"up) or place this ticket by hand in the app."), "hdfcsky": ("unknown", "HDFC Sky has an official MCP server (https://api.hdfcsky.com/mcp) but order placement is " "not confirmed: read its tool list. Otherwise - Network accessline 1088
"hdfcsky": ("unknown", "HDFC Sky has an official MCP server (https://api.hdfcsky.com/mcp) but order placement is "
nse-budget/size.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 272
# intraday position before continuous trading ends. # Which stocks are CAS stocks: the F&O underlyings in NSE's open file # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily). - Network accessline 274
# https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily). - Network accessline 278
("2026-08-03", "2026-12-06", datetime.time(15, 15)), ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" - Network accessline 279
) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" FO_INDEXES = {"NIFTY", "BANKNIFTY", "FINNIFTY", "MIDCPNIFTY", "NIFTYNXT50"} - Network accessline 280
FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" - Network accessline 364
def _open_url(url, timeout=20, accept="application/json"): req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 365
req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 366
with urllib.request.urlopen(req, timeout=timeout) as r: - Network accessline 374
last = "no answer" for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) - Network accessline 375
for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) for attempt in (0, 1): - Network accessline 376
url = "https://%s.finance.yahoo.com%s" % (host, path) - Network accessline 507
"squareoff": {"cas": "15:05", "other": "15:20"}, "verified": ["brokerage", "dp_charge"], "stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, - Network accessline 508
"stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)", "paper": False, - Network accessline 509
"api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)", - Network accessline 515
"squareoff": {"cas": "15:12", "other": "15:25"}, "verified": ["brokerage", "dp_charge", "squareoff"], "stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = - Network accessline 516
"stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; " "regular orders need a self-hosted server with y - Network accessline 517
"api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; " - Network accessline 538
"squareoff": {"cas": "15:10", "other": "15:25"}, "verified": ["brokerage", "dp_charge"], "stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": F - Network accessline 539
"stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False, }, - Network accessline 540
"api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False, - Network accessline 547
"squareoff": {"cas": "15:05", "other": "15:05"}, "verified": ["brokerage", "squareoff"], "stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (officia - Network accessline 548
"stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)", "paper": False, - Network accessline 549
"api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)", - Network accessline 555
"squareoff": dict(UNVERIFIED_SQUAREOFF), "verified": ["brokerage"], "stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)", - Network accessline 556
"stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)", "paper": False, - Network accessline 557
"api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",
nse-entry/entry.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 47
Data: Yahoo's free chart JSON (unofficial, can lag, bars not single trades) https://query2.finance.yahoo.com/v8/finance/chart/RELIANCE.NS?range=1d&interval=5m - Network accessline 48
https://query2.finance.yahoo.com/v8/finance/chart/RELIANCE.NS?range=1d&interval=5m - Network accessline 270
# intraday position before continuous trading ends. # Which stocks are CAS stocks: the F&O underlyings in NSE's open file # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily). - Network accessline 272
# https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily). - Network accessline 276
("2026-08-03", "2026-12-06", datetime.time(15, 15)), ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" - Network accessline 277
) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" FO_INDEXES = {"NIFTY", "BANKNIFTY", "FINNIFTY", "MIDCPNIFTY", "NIFTYNXT50"} - Network accessline 278
FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" - Network accessline 362
def _open_url(url, timeout=20, accept="application/json"): req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 363
req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 364
with urllib.request.urlopen(req, timeout=timeout) as r: - Network accessline 372
last = "no answer" for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) - Network accessline 373
for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) for attempt in (0, 1): - Network accessline 374
url = "https://%s.finance.yahoo.com%s" % (host, path)
nse-exit/exit.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 263
# intraday position before continuous trading ends. # Which stocks are CAS stocks: the F&O underlyings in NSE's open file # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily). - Network accessline 265
# https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily). - Network accessline 269
("2026-08-03", "2026-12-06", datetime.time(15, 15)), ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" - Network accessline 270
) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" FO_INDEXES = {"NIFTY", "BANKNIFTY", "FINNIFTY", "MIDCPNIFTY", "NIFTYNXT50"} - Network accessline 271
FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" - Network accessline 355
def _open_url(url, timeout=20, accept="application/json"): req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 356
req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 357
with urllib.request.urlopen(req, timeout=timeout) as r: - Network accessline 365
last = "no answer" for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) - Network accessline 366
for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) for attempt in (0, 1): - Network accessline 367
url = "https://%s.finance.yahoo.com%s" % (host, path) - Network accessline 498
"squareoff": {"cas": "15:05", "other": "15:20"}, "verified": ["brokerage", "dp_charge"], "stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, - Network accessline 499
"stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)", "paper": False, - Network accessline 500
"api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)", - Network accessline 506
"squareoff": {"cas": "15:12", "other": "15:25"}, "verified": ["brokerage", "dp_charge", "squareoff"], "stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = - Network accessline 507
"stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; " "regular orders need a self-hosted server with y - Network accessline 508
"api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; " - Network accessline 529
"squareoff": {"cas": "15:10", "other": "15:25"}, "verified": ["brokerage", "dp_charge"], "stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": F - Network accessline 530
"stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False, }, - Network accessline 531
"api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False, - Network accessline 536
"squareoff": {"cas": "15:05", "other": "15:05"}, "verified": ["brokerage", "squareoff"], "stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (officia - Network accessline 537
"stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)", "paper": False, - Network accessline 538
"api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)", - Network accessline 544
"squareoff": dict(UNVERIFIED_SQUAREOFF), "verified": ["brokerage"], "stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)", - Network accessline 545
"stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)", "paper": False, - Network accessline 546
"api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",
nse-news/SKILL.md
- Network accessline 49
| `nse/plan.json` | the trade you are planning (nse-exit) | | `nse/portfolio.json` | what you hold (`positions` and `holdings`) | | Google News RSS, India edition | one request per ticker: `https://news.google.com/rss/search?q="Reliance Ind - Network accessline 50
| `nse/portfolio.json` | what you hold (`positions` and `holdings`) | | Google News RSS, India edition | one request per ticker: `https://news.google.com/rss/search?q="Reliance Industries" OR "RELIANCE share" when:48h&hl=en-IN&gl=IN&ceid=IN - Network accessline 51
| Google News RSS, India edition | one request per ticker: `https://news.google.com/rss/search?q="Reliance Industries" OR "RELIANCE share" when:48h&hl=en-IN&gl=IN&ceid=IN:en` |
nse-news/news.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 18
- Google News RSS (English, India edition), searching the company's name (from NSE's EQUITY_L.csv, cached in nse/state/) and the ticker: https://news.google.com/rss/search?q="Reliance Industries" OR "RELIANCE share" when:48h&hl=en-I - Network accessline 19
(from NSE's EQUITY_L.csv, cached in nse/state/) and the ticker: https://news.google.com/rss/search?q="Reliance Industries" OR "RELIANCE share" when:48h&hl=en-IN&gl=IN&ceid=IN:en Yahoo's RSS feed is empty for Indian stocks, so it is - Network accessline 20
https://news.google.com/rss/search?q="Reliance Industries" OR "RELIANCE share" when:48h&hl=en-IN&gl=IN&ceid=IN:en - Network accessline 22
- The move: Yahoo Finance's chart endpoint (unofficial, can lag), the last price against the previous close: https://query2.finance.yahoo.com/v8/finance/chart/RELIANCE.NS?range=1d&interval=5m - Network accessline 24
https://query2.finance.yahoo.com/v8/finance/chart/RELIANCE.NS?range=1d&interval=5m - Network accessline 259
# intraday position before continuous trading ends. # Which stocks are CAS stocks: the F&O underlyings in NSE's open file # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily). - Network accessline 261
# https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily). - Network accessline 265
("2026-08-03", "2026-12-06", datetime.time(15, 15)), ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" - Network accessline 266
) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" FO_INDEXES = {"NIFTY", "BANKNIFTY", "FINNIFTY", "MIDCPNIFTY", "NIFTYNXT50"} - Network accessline 267
FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" - Network accessline 351
def _open_url(url, timeout=20, accept="application/json"): req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 352
req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 353
with urllib.request.urlopen(req, timeout=timeout) as r: - Network accessline 361
last = "no answer" for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) - Network accessline 362
for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) for attempt in (0, 1): - Network accessline 363
url = "https://%s.finance.yahoo.com%s" % (host, path) - Network accessline 449
GNEWS = "https://news.google.com/rss/search?q=%s&hl=en-IN&gl=IN&ceid=IN:en" - Network accessline 450
EQUITY_L_URL = "https://archives.nseindia.com/content/equities/EQUITY_L.csv" - Network accessline 557
return self._file(name) self._wait() req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept-Encoding": "gzip", - Network accessline 558
self._wait() req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept-Encoding": "gzip", "Accept": "*/*"}) - Network accessline 559
req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept-Encoding": "gzip", - Network accessline 560
"Accept": "*/*"}) try: with urllib.request.urlopen(req, timeout=30) as resp: - Network accessline 561
try: with urllib.request.urlopen(req, timeout=30) as resp: data = resp.read() - Network accessline 562
with urllib.request.urlopen(req, timeout=30) as resp: - Possible obfuscationline 595
for r in csv.reader(io.StringIO(text.lstrip("<U+FEFF>"))):
nse-risk/check.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 297
# intraday position before continuous trading ends. # Which stocks are CAS stocks: the F&O underlyings in NSE's open file # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily). - Network accessline 299
# https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily). - Network accessline 303
("2026-08-03", "2026-12-06", datetime.time(15, 15)), ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" - Network accessline 304
) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" FO_INDEXES = {"NIFTY", "BANKNIFTY", "FINNIFTY", "MIDCPNIFTY", "NIFTYNXT50"} - Network accessline 305
FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" - Network accessline 389
def _open_url(url, timeout=20, accept="application/json"): req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 390
req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 391
with urllib.request.urlopen(req, timeout=timeout) as r: - Network accessline 399
last = "no answer" for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) - Network accessline 400
for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) for attempt in (0, 1): - Network accessline 401
url = "https://%s.finance.yahoo.com%s" % (host, path) - Network accessline 532
"squareoff": {"cas": "15:05", "other": "15:20"}, "verified": ["brokerage", "dp_charge"], "stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, - Network accessline 533
"stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)", "paper": False, - Network accessline 534
"api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)", - Network accessline 540
"squareoff": {"cas": "15:12", "other": "15:25"}, "verified": ["brokerage", "dp_charge", "squareoff"], "stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = - Network accessline 541
"stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; " "regular orders need a self-hosted server with y - Network accessline 542
"api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; " - Network accessline 563
"squareoff": {"cas": "15:10", "other": "15:25"}, "verified": ["brokerage", "dp_charge"], "stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": F - Network accessline 564
"stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False, }, - Network accessline 565
"api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False, - Network accessline 572
"squareoff": {"cas": "15:05", "other": "15:05"}, "verified": ["brokerage", "squareoff"], "stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (officia - Network accessline 573
"stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)", "paper": False, - Network accessline 574
"api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)", - Network accessline 580
"squareoff": dict(UNVERIFIED_SQUAREOFF), "verified": ["brokerage"], "stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)", - Network accessline 581
"stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)", "paper": False, - Network accessline 582
"api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)", - Network accessline 800
PAISE = 0.005 FRESH_MINUTES = 15 SEC_LIST_URL = "https://archives.nseindia.com/content/equities/sec_list.csv" - Network accessline 801
FRESH_MINUTES = 15 SEC_LIST_URL = "https://archives.nseindia.com/content/equities/sec_list.csv" REF_WORDS = {"plan": "the plan's entry", "price": "the latest price", "limit": "the limit price", - Network accessline 802
SEC_LIST_URL = "https://archives.nseindia.com/content/equities/sec_list.csv" - Possible obfuscationline 1018
rd = csv.reader(io.StringIO(text.lstrip("<U+FEFF>")))
nse-scanner/scan.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 290
# intraday position before continuous trading ends. # Which stocks are CAS stocks: the F&O underlyings in NSE's open file # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily). - Network accessline 292
# https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily). - Network accessline 296
("2026-08-03", "2026-12-06", datetime.time(15, 15)), ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" - Network accessline 297
) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" FO_INDEXES = {"NIFTY", "BANKNIFTY", "FINNIFTY", "MIDCPNIFTY", "NIFTYNXT50"} - Network accessline 298
FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" - Network accessline 382
def _open_url(url, timeout=20, accept="application/json"): req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 383
req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 384
with urllib.request.urlopen(req, timeout=timeout) as r: - Network accessline 392
last = "no answer" for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) - Network accessline 393
for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) for attempt in (0, 1): - Network accessline 394
url = "https://%s.finance.yahoo.com%s" % (host, path) - Network accessline 593
"smallcap250": "ind_niftysmallcap250list", "bank": "ind_niftybanklist", } LIST_URL = "https://www.niftyindices.com/IndexConstituent/%s.csv" - Network accessline 594
} LIST_URL = "https://www.niftyindices.com/IndexConstituent/%s.csv" EQUITY_L_URL = "https://archives.nseindia.com/content/equities/EQUITY_L.csv" - Network accessline 595
LIST_URL = "https://www.niftyindices.com/IndexConstituent/%s.csv" - Network accessline 596
EQUITY_L_URL = "https://archives.nseindia.com/content/equities/EQUITY_L.csv" - Network accessline 597
BHAV_URL = "https://archives.nseindia.com/products/content/sec_bhavdata_full_%s.csv" - Possible obfuscationline 804
for r in csv.reader(io.StringIO(text.lstrip("<U+FEFF>"))):
nse-timemachine/timemachine.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 72
Data: https://query2.finance.yahoo.com/v8/finance/chart/RELIANCE.NS?range=60d&interval=5m - Network accessline 292
# intraday position before continuous trading ends. # Which stocks are CAS stocks: the F&O underlyings in NSE's open file # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily). - Network accessline 294
# https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily). - Network accessline 298
("2026-08-03", "2026-12-06", datetime.time(15, 15)), ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" - Network accessline 299
) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" FO_INDEXES = {"NIFTY", "BANKNIFTY", "FINNIFTY", "MIDCPNIFTY", "NIFTYNXT50"} - Network accessline 300
FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" - Network accessline 384
def _open_url(url, timeout=20, accept="application/json"): req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 385
req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept}) - Network accessline 386
with urllib.request.urlopen(req, timeout=timeout) as r: - Network accessline 394
last = "no answer" for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) - Network accessline 395
for host in HOSTS: url = "https://%s.finance.yahoo.com%s" % (host, path) for attempt in (0, 1): - Network accessline 396
url = "https://%s.finance.yahoo.com%s" % (host, path) - Network accessline 527
"squareoff": {"cas": "15:05", "other": "15:20"}, "verified": ["brokerage", "dp_charge"], "stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, - Network accessline 528
"stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)", "paper": False, - Network accessline 529
"api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)", - Network accessline 535
"squareoff": {"cas": "15:12", "other": "15:25"}, "verified": ["brokerage", "dp_charge", "squareoff"], "stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = - Network accessline 536
"stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; " "regular orders need a self-hosted server with y - Network accessline 537
"api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; " - Network accessline 558
"squareoff": {"cas": "15:10", "other": "15:25"}, "verified": ["brokerage", "dp_charge"], "stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": F - Network accessline 559
"stop_mis": "sl_leg", "stop_cnc": "gtt_oco", "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False, }, - Network accessline 560
"api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False, - Network accessline 565
"squareoff": {"cas": "15:05", "other": "15:05"}, "verified": ["brokerage", "squareoff"], "stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (officia - Network accessline 566
"stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)", "paper": False, - Network accessline 567
"api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)", - Network accessline 573
"squareoff": dict(UNVERIFIED_SQUAREOFF), "verified": ["brokerage"], "stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)", - Network accessline 574
"stop_mis": "sl_leg", "stop_cnc": "gtt", "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)", "paper": False, - Network accessline 575
"api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 12 facts
- Contacts mcp.upstox.com, which SKILL.md, the README and the plugin manifest do not mentionnse-alerts/alerts.py:542High confidence
- Contacts neo.kotaksecurities.com, which SKILL.md, the README and the plugin manifest do not mentionnse-alerts/alerts.py:549High confidence
- Contacts mcp.upstox.com, which SKILL.md, the README and the plugin manifest do not mentionnse-broker/ticket.py:540High confidence
- Contacts neo.kotaksecurities.com, which SKILL.md, the README and the plugin manifest do not mentionnse-broker/ticket.py:549High confidence
- Contacts mcp.upstox.com, which SKILL.md, the README and the plugin manifest do not mentionnse-budget/size.py:540High confidence
- Contacts neo.kotaksecurities.com, which SKILL.md, the README and the plugin manifest do not mentionnse-budget/size.py:549High confidence
- Contacts mcp.upstox.com, which SKILL.md, the README and the plugin manifest do not mentionnse-exit/exit.py:531High confidence
- Contacts neo.kotaksecurities.com, which SKILL.md, the README and the plugin manifest do not mentionnse-exit/exit.py:538High confidence
- Contacts mcp.upstox.com, which SKILL.md, the README and the plugin manifest do not mentionnse-risk/check.py:565High confidence
- Contacts neo.kotaksecurities.com, which SKILL.md, the README and the plugin manifest do not mentionnse-risk/check.py:574High confidence
- Contacts mcp.upstox.com, which SKILL.md, the README and the plugin manifest do not mentionnse-timemachine/timemachine.py:560High confidence
- Contacts neo.kotaksecurities.com, which SKILL.md, the README and the plugin manifest do not mentionnse-timemachine/timemachine.py:567High confidence
Signal confidence: 280 facts
- Network access in prose of the SKILL.mdnse-alerts/SKILL.md:98Low confidence
- Network access in prose of the SKILL.mdnse-alerts/SKILL.md:99Low confidence
- Executable script in code of a file that runsnse-alerts/alerts.py:1High confidence
- Network access in prose of a file that runsnse-alerts/alerts.py:42Low confidence
- Network access in prose of a file that runsnse-alerts/alerts.py:43Low confidence
- Network access in prose of a file that runsnse-alerts/alerts.py:47Low confidence
- Network access in prose of a file that runsnse-alerts/alerts.py:48Low confidence
- Network access in prose of a file that runsnse-alerts/alerts.py:49Low confidence
- Network access in a comment of a file that runsnse-alerts/alerts.py:274Low confidence
- Network access in a comment of a file that runsnse-alerts/alerts.py:276Low confidence
- Network access in code of a file that runsnse-alerts/alerts.py:280High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:281High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:282High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:366High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:367High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:368High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:376High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:377High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:378High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:509High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:510High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:511High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:517High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:518High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:519High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:540High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:541High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:542High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:547High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:548High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:549High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:555High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:556High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:557High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:798High confidence
- Network access in code of a file that runsnse-alerts/alerts.py:799High confidence
- Possible obfuscation in code of a file that runsnse-alerts/alerts.py:974High confidence
- Executable script in code of a file that runsnse-analyst/facts.py:1High confidence
- Network access in prose of a file that runsnse-analyst/facts.py:15Low confidence
- Network access in prose of a file that runsnse-analyst/facts.py:16Low confidence
- Network access in code of a file that runsnse-analyst/facts.py:182High confidence
- Network access in code of a file that runsnse-analyst/facts.py:183High confidence
- Network access in code of a file that runsnse-analyst/facts.py:184High confidence
- Network access in code of a file that runsnse-analyst/facts.py:192High confidence
- Network access in code of a file that runsnse-analyst/facts.py:193High confidence
- Network access in code of a file that runsnse-analyst/facts.py:194High confidence
- Network access in prose of the SKILL.mdnse-bigmoney/SKILL.md:36Low confidence
- Executable script in code of a file that runsnse-bigmoney/deals.py:1High confidence
- Network access in prose of a file that runsnse-bigmoney/deals.py:14Low confidence
- Network access in prose of a file that runsnse-bigmoney/deals.py:15Low confidence
and 230 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md nse-alerts/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md nse-alerts/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md nse-alerts/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md nse-alerts/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md nse-alerts/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.