Codebase intelligence shell and SDK — index once, query forever, works with Claude, GPT, Ollama, and any AI
Project description
JSAT — JaySoft AI Tools
Codebase intelligence for AI sessions — index once, query forever, works with any AI.
What is JSAT?
Every AI session starts with the same problem: you spend the first ten minutes re-explaining your architecture, re-pasting function signatures, and re-describing how services talk to each other. JSAT solves this by building a persistent graph of your codebase once — functions, classes, files, services, API endpoints, database tables, Kafka topics, and every relationship between them — and making that context instantly available to any AI you use.
JSAT works as a CLI, a Python SDK, and an MCP server that plugs directly into Claude Code. If Claude Code CLI is installed, JSAT uses it automatically with no API key required. For everything else — Anthropic API, OpenAI, Gemini, Ollama, LM Studio — one command switches the provider.
Quick Start
pip install jsat
# Wire JSAT into Claude Code (if installed — no API key needed)
jsat connect claude
# Index your project
cd your-project/
jsat index .
# Open Claude with full codebase context and JSAT tools available
jsat claude
Inside Claude Code you can then use slash commands:
/jsat-query what does the payment service do?
/jsat-blast-radius src/payment/refund.py
/jsat-security
/jsat-incident "500 errors spiking on checkout"
Installation
JSAT ships as a minimal core with optional extras. Install only what you need.
| Extra | What's added | Approx. size | When to use |
|---|---|---|---|
(none) / core |
tree-sitter parsers, SQLite graph, CLI | ~80 MB | Starting point for any setup |
local |
Ollama client | +small | Local models via Ollama |
standard |
Semgrep, OpenAPI/AsyncAPI validator, more language parsers (Java, Ruby, Rust) | +medium | Security reviews, API contract checks |
team |
Neo4j, Qdrant, Redis, Graphiti (includes standard) |
+large | Shared graph across a team |
anthropic |
Anthropic Python SDK | +small | Claude API (key required) |
openai |
OpenAI Python SDK | +small | GPT-4o, GPT-4o-mini (key required) |
ci |
PyGitHub, SARIF tools (includes standard) |
+small | CI/CD pipelines, GitHub Actions |
all |
Everything above | +large | Full feature set |
pip install jsat # core only
pip install 'jsat[local]' # + Ollama
pip install 'jsat[standard]' # + security analysis, OpenAPI validation
pip install 'jsat[team]' # + Neo4j, Qdrant, Redis
pip install 'jsat[anthropic]' # + Claude API SDK
pip install 'jsat[openai]' # + OpenAI SDK
pip install 'jsat[all]' # everything
AI Providers
JSAT auto-detects available providers at startup and picks the best one in priority order:
- Claude Code CLI — detected via
which claude; no API key, no extra SDK, full tool calling - Anthropic API — if
ANTHROPIC_API_KEYis set andjsat[anthropic]is installed - OpenAI — if
OPENAI_API_KEYis set andjsat[openai]is installed - Ollama — if
ollama serveis running atlocalhost:11434 - LM Studio — if an OpenAI-compatible server is running at
localhost:1234 - No AI — tools that don't need AI (indexing, blast radius, export) still work
Check what's available
jsat ai status # shows all providers, which is active, and switch commands
Switch providers
jsat ai use ollama # free, local, no key
jsat ai use ollama --model qwen2.5-coder:7b
jsat ai use anthropic # needs ANTHROPIC_API_KEY
jsat ai use openai --model gpt-4o-mini # needs OPENAI_API_KEY
jsat ai use lmstudio # any OpenAI-compat server at localhost:1234
jsat ai test # verify the configured provider works
Switch inside the JSAT shell
switch claude → Claude Code CLI (no key) or Claude API
switch gpt → GPT-4o
switch ollama → local Ollama
switch haiku → Claude Haiku
switch phi → phi3:mini (fast, low RAM)
switch lmstudio → LM Studio
Claude Code Integration
JSAT's tightest integration is with Claude Code. One command registers JSAT as an MCP server and installs /jsat-* slash commands. After that, Claude can call JSAT tools automatically — or you can invoke them explicitly.
Setup
jsat connect claude # project-level (this repo only)
jsat connect claude --scope global # global (all Claude Code sessions)
Restart Claude Code. JSAT tools are now available.
Open Claude with JSAT context pre-loaded
jsat claude
Slash commands installed into Claude Code
| Command | What it does |
|---|---|
/jsat-query <question> |
Natural language query over the indexed graph |
/jsat-blast-radius <file or symbol> |
Trace downstream impact grouped by severity |
/jsat-security [path] |
Security scan — Critical and High issues first |
/jsat-incident <description> |
Root-cause hypotheses ranked by confidence |
/jsat-index [path] |
Rebuild the codebase graph |
/jsat-status |
Node and edge counts |
/jsat-doctor |
Full health check |
/jsat-ithinking <task> |
Run the IThinking structured planning framework for a task |
/jsat-think <task> |
Alias for /jsat-ithinking — shorthand for quick invocation |
MCP tools Claude can call automatically
JSAT defines 47 MCP tool slots across 12 categories; 38 are currently wired and active in the MCP server. Highlights:
jsat__query— answer any codebase questionjsat__blast_radius_file,jsat__blast_radius_diff,jsat__blast_radius_symbol,jsat__blast_radius_topicjsat__security_scan_file,jsat__get_auth_coverage,jsat__list_secrets,jsat__get_dependency_cvesjsat__investigate_incident,jsat__generate_runbookjsat__check_breaking_changes,jsat__get_compat_scorejsat__validate_migration,jsat__suggest_zero_downtimejsat__submit_for_review,jsat__get_high_confidence_bugsjsat__ithinking_plan,jsat__ithinking_execute
Connect to Cursor
jsat connect cursor # writes to ~/.cursor/mcp.json
Disconnect or remove
jsat disconnect claude # project-level
jsat disconnect claude --scope global # global
jsat disconnect claude --scope all # everywhere
jsat remove # remove all JSAT artifacts from this repo
CLI Reference
Core commands
| Command | Description |
|---|---|
jsat index [path] |
Build or update the codebase graph |
jsat index . --force |
Full re-index (skip incremental check) |
jsat index . --languages python,go |
Index specific languages only |
jsat shell |
Start the interactive JSAT REPL |
jsat claude |
Open Claude Code with JSAT MCP tools loaded |
jsat gpt |
Open a GPT session with JSAT tools |
jsat ollama [--model llama3.2] |
Open a local Ollama session |
jsat doctor |
System health check (graph, AI, services) |
jsat doctor --json |
Health check as raw JSON |
jsat version |
Print JSAT version |
Configuration
| Command | Description |
|---|---|
jsat init |
Generate .jsat/config.yaml (default: solo profile) |
jsat init --profile team |
Team profile (Neo4j, Qdrant, Redis, Claude API) |
jsat init --profile ci |
CI profile (SQLite, no AI, JSON logs) |
jsat init --profile raspberry-pi |
Low-RAM profile (SQLite, phi3:mini, batch size 8) |
AI provider management
| Command | Description |
|---|---|
jsat ai status |
Show all providers: available, active, free/paid |
jsat ai use <provider> |
Configure a provider and write to config |
jsat ai use ollama --model phi3:mini |
Use a specific Ollama model |
jsat ai test |
Send a test prompt and verify the provider works |
jsat ai models |
List models available from the configured provider |
Claude Code integration
| Command | Description |
|---|---|
jsat connect claude |
Wire JSAT into Claude Code (project scope) |
jsat connect claude --scope global |
Wire JSAT globally (all sessions) |
jsat connect claude --no-skills |
MCP only — skip installing slash commands |
jsat connect cursor |
Wire JSAT into Cursor |
jsat connect list |
Show all active JSAT MCP configs |
jsat disconnect claude |
Remove from project Claude Code config |
jsat disconnect claude --scope all |
Remove from all scopes |
Export and import
| Command | Description |
|---|---|
jsat export backup.jsat.zip |
Export the current index as a portable zip |
jsat export backup.jsat.zip -z 9 |
Export with maximum compression |
jsat import backup.jsat.zip |
Restore an index from an exported archive |
Skills
| Command | Description |
|---|---|
jsat skills list |
List installed JSAT skill manifests |
jsat skills run <name> |
Run a named skill with optional key=val args |
jsat ci-setup |
Write a GitHub Actions workflow for JSAT |
jsat ci-setup --provider gitlab |
Write a GitLab CI pipeline for JSAT |
Python SDK
from jsat import JSAT
# Instantiate — auto-detects AI provider, loads config
js = JSAT(repo=".")
# Build the graph (incremental by default)
result = js.index()
print(f"Indexed {result.nodes_indexed} nodes, {result.edges_indexed} edges")
# Natural language query over the graph
result = js.query("what calls the refund endpoint?")
print(result.answer)
# Trace blast radius of a change
report = js.blast_radius("src/payment/refund.py")
for item in report.impacts:
print(f"{item.severity:10s} {item.node_id}")
# Security analysis (requires jsat[standard])
sec = js.security_review(path="src/")
for finding in sec.findings:
print(f"{finding.severity}: {finding.title} — {finding.file}:{finding.line}")
# Incident investigation
incident = js.investigate_incident("500 errors on checkout", since="24h")
for h in incident.hypotheses:
print(f"[{h.score:.0%}] {h.title}")
# Export the index for sharing or CI caching
manifest = js.export("snapshot.jsat.zip")
print(f"Exported {manifest.size_mb:.1f} MB")
# Restore from an export
js2 = JSAT.from_import("snapshot.jsat.zip")
# Switch AI provider mid-session
js.switch_ai("ollama", model="qwen2.5-coder:7b")
js.switch_ai("anthropic")
js.switch_ai("gpt", model="gpt-4o-mini")
# Health check
health = js.doctor()
print(health["profile"], health["graph"]["backend"])
Tools Overview
| # | Tool | Description |
|---|---|---|
| 0 | JSAT Shell | Interactive REPL — run any tool directly, switch AI mid-session, no AI required |
| 1 | Directory Indexer | Walks a repo, parses source with tree-sitter, writes nodes and edges to the graph |
| 2 | Test Intelligence Helper | Finds test gaps, maps behaviors to coverage, generates unit/integration/contract tests |
| 3 | Feature Helper | Answers "how do I add X?" using graph context — finds relevant files and patterns |
| 4 | Blast Radius Analyzer | BFS over the graph to trace downstream impact; classifies edges as breaking/degraded/warning/safe |
| 5 | API Contract Validator | Diffs OpenAPI/AsyncAPI specs, classifies breaking changes, scores backward compatibility (0–100) |
| 6 | Security Review Agent | OWASP pattern scan, auth coverage gaps, hardcoded secret detection, dependency CVE lookup |
| 7 | Incident Investigation Helper | Correlates an incident description against recent commits and graph topology; ranks root-cause hypotheses |
| 8 | Migration Safety Validator | Validates migration files, estimates lock duration, generates zero-downtime migration plans |
| 9 | Multi-Model Code Review (true parallel dispatch) | Dispatches a diff to multiple AI models simultaneously via ThreadPoolExecutor; surfaces only bugs confirmed by two or more models |
| 10 | Knowledge Base Builder | Persistent searchable store of architectural decisions, runbooks, and tribal knowledge |
| 11 | Multi-Agent Orchestrator | Decomposes a task and runs specialized sub-agents (understanding, generation, review, test, security, docs) |
| 12 | Export / Import System | Portable zip snapshots of the full graph — share between machines, cache in CI, restore in seconds |
| 13 | Python SDK | Programmatic access to every tool via from jsat import JSAT |
| 14 | IThinking Meta-Cognitive Layer | Structured seven-phase reasoning: clarify, plan, context, assumptions, execute, reflect — with human approval gates |
Multi-Model Review
Tool 9 dispatches the diff to all configured models in parallel, collects findings, and surfaces only those confirmed by two or more models. Configure the model list and timeout in .jsat/config.yaml:
review:
models:
- {provider: claude_cli, model: claude-sonnet-4-6}
- {provider: ollama, model: qwen2.5-coder:7b}
parallel_timeout_seconds: 90
min_confidence: medium
parallel_timeout_seconds— per-review wall-clock deadline; any model that exceeds this is skipped and its absence is logged.min_confidence— minimum agreement level to surface a finding:low(any model),medium(2+ models),high(all models).
Graph Schema
JSAT indexes these node types and relationship edges:
Nodes: function, class, file, service, endpoint, table, kafka_topic
Edges:
| Edge | Meaning |
|---|---|
CALLS |
Function A calls function B |
IMPORTS |
File A imports module B |
READS_FROM |
Code reads from a table or topic |
WRITES_TO |
Code writes to a table or topic |
PRODUCES |
Service produces a Kafka message |
CONSUMES |
Service consumes a Kafka topic |
IMPLEMENTS |
Class implements an interface |
INHERITS |
Class inherits from another |
DEPENDS_ON |
Service depends on another service |
Configuration
JSAT stores all state under .jsat/ in your repo root. The config file is .jsat/config.yaml.
jsat init # write starter config (solo profile)
jsat init --profile team # team profile
jsat init --profile ci # CI/CD profile
Key settings in .jsat/config.yaml:
graph:
backend: sqlite # sqlite (default) | neo4j (team profile)
path: .jsat/graph/graph.db
embeddings:
provider: local # local | openai | none
model: nomic-embed-code
ai:
provider: ollama # ollama | anthropic | openai | openai_compat | claude_cli | none
model: llama3.2
base_url: null # for openai_compat (LM Studio, Gemini, etc.)
cache:
backend: memory # memory | disk | redis
indexer:
languages: [python, javascript, go, java, ruby, rust]
exclude_patterns: ["**/node_modules/**", "**/.git/**", "**/dist/**"]
max_file_size_kb: 500
ithinking:
enabled: true
mode: interactive # interactive | silent
gate_level: medium # low | medium | high
Profiles at a glance
| Profile | Graph | AI | Cache | Use case |
|---|---|---|---|---|
solo |
SQLite | Ollama / llama3.2 | Memory | Individual developer, no external services |
team |
Neo4j | Claude API | Redis | Shared graph, team-wide knowledge base |
ci |
SQLite | None | Memory | GitHub Actions, no API keys, JSON logs |
raspberry-pi |
SQLite | Ollama / phi3:mini | Disk | Low-RAM devices, batch size 8 |
Config search order
JSAT finds its config by checking these locations in order (first found wins):
- Explicit path passed to
JSAT(config=...)or--configflag $JSAT_CONFIGenvironment variable{repo}/.jsat/config.yaml(canonical){repo}/.jsat.yaml(legacy)./.jsat/config.yaml(CWD)~/.config/jsat/config.yaml/etc/jsat/config.yaml
Supported Languages
| Language | Parser | Notes |
|---|---|---|
| Python | tree-sitter-python | Core (always available) |
| JavaScript / TypeScript | tree-sitter-javascript | Core |
| Go | tree-sitter-go | Core |
| Java | tree-sitter-java | Requires jsat[standard] |
| Ruby | tree-sitter-ruby | Requires jsat[standard] |
| Rust | tree-sitter-rust | Requires jsat[standard] |
Contributing
Contributions are welcome. Please open an issue or pull request on GitHub.
- Repository: github.com/iamjpsonkar/JaySoft-AI_Tools
- Bug reports: open an issue on GitHub
- Author: Jay Prakash Sonkar — iamjpsonkar@gmail.com
- License: MIT
License
MIT License. Copyright (c) Jay Prakash Sonkar.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jsat-0.1.5.tar.gz.
File metadata
- Download URL: jsat-0.1.5.tar.gz
- Upload date:
- Size: 161.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e6bbefd4f39b50e1762d934ac32cb1aed7e9f4cb374959704bc2347fa42532f
|
|
| MD5 |
b73f63884d2d899236a2285a2f3c253b
|
|
| BLAKE2b-256 |
d14f0c4bef73145a61241f25e23afa93079ae5ea1a3d6cfdaa4f7ae3cda0e4c5
|
File details
Details for the file jsat-0.1.5-py3-none-any.whl.
File metadata
- Download URL: jsat-0.1.5-py3-none-any.whl
- Upload date:
- Size: 153.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dae7414e56ea940d980cc9566a95a1dc0b65af05ee38813d325bb8c23b75837b
|
|
| MD5 |
a8a10a40cf989541c2f70ad223160f2d
|
|
| BLAKE2b-256 |
6f560e4f76427de64e75cc8439ea80a29f8a260ce188d46363e7426acf4f72ed
|