DevHunt is a local-first, developer-centric environment designed by developers, for developers. It functions as an integrated center displaying analytics, a terminal-like environment (Hunt Terminal), and a RAG-powered cognitive assistant.
A core feature in this ecosystem is the Multi-Agent Document Intelligence and Forensics tool (Doc Forensics). This subsystem acts independently from the Intel Vault, giving developers a dedicated interface to scan and audit ticket invoices, documents, and cards for evidence of forgery or compliance issues.
DevHunt is structured as a high-performance offline codebase designed for safety, low memory usage, and minimal latency. By keeping resources local and avoiding heavy cloud telemetry loops, the platform achieves instant responsiveness.
| Tech Component | Technology Used | How We Use It & Details |
|---|---|---|
| Backend Core & Routing | Python 3.10+ / Flask |
Flask serves as our micro-routing controller. It starts instantly, maintains a tiny memory footprint (~40MB RAM at idle), processes REST endpoints, and manages Server-Sent Events (SSE) for streaming AI assistant responses. |
| Frontend Architecture | Vite / React 18 |
The client shell utilizes React 18 for high-performance concurrent rendering. Vite packages modular components into static files that Flask hosts directly, allowing sub-second UI switches. |
| Native Desktop Window | Tauri v2 / Rust |
Instead of standard browsers, Tauri runs a Rust shell wrapping the system's native WebView2 rendering engine. This bypasses the massive RAM and storage overhead typical of Electron-based systems (saving over 500MB RAM). |
| Local Storage | SQLite Database |
All application data (chat logs, Kanban tasks, key status flags, indexed RAG files, system logs, LinkedIn drafts) is persisted in a local database file (backend/data/devhunt.db). It supports raw SQLite transactions directly within the same process. |
| Code Editor Module | CodeMirror 6 Editor |
Powering the IDE workspace, CodeMirror 6 provides syntax highlighting, automatic indentation, search and replace, and drag-and-drop actions. Optimized for editing massive codebase scripts. |
| PyInstaller Bundling | PyInstaller Bundler |
Bundles the Flask core, Python runtime, and libraries (OpenCV, cryptography, keyring, PyMuPDF) into a standalone backend executable sidecar, ensuring developers do not need to manually configure Python dependencies on their host. |
| AI Assistant API | Google Gemini SDK |
Interactions with Gemini (flash, flash-lite, embeddings) are routed through the Google GenAI SDK. Features rotation pools, response latency auditing, and local rule-based offline fallbacks. |
| Open Source License | MIT License |
Fully open-source, allowing you to modify, self-host, and distribute installers freely. |
DevHunt exposes multiple functional panes to consolidate all dev activities into a single premium interface:
The AI Assistant provides real-time chat with LLMs using a customized SSE (Server-Sent Events) streaming architecture. It incorporates document-specific knowledge sources automatically if a document context is active. It also utilizes a localized feedback helper to refine grammatical syntax and answer developer prompts. System parameters such as temperature, system instructions, and token limitations are adjustable, and chat sessions are preserved in the local SQLite database. The interface features a premium interactive control panel side card showing Today's Targets (active curriculum day lessons and tasks linked directly to the Hunt Path) and Quick Quests (to-dos with custom styled checkboxes and dim/strikethrough animations), asymmetric rounded chat message bubbles, and a unified rounded chat input pill.
The Hunt Path is a curriculum map tailored to developer activity. It dynamically builds sequence tracks (streaks, progress, nodes) based on developer habits, database interactions, and console operations. Active nodes update automatically as files are created, commands executed, or quizzes answered, logging progress milestones inside backend/data/learning_path.json.
The Quest Board acts as an integrated to-do management engine. It connects directly with the SQLite database, tracking priorities (low, medium, high), status markers, and titles. Developers can interact with it either through the graphical dashboard or using the Hunt Terminal command interface (hunt quest), making it easy to create, update, or remove backlog tasks programmatically.
The Intel Vault serves as the central point for RAG (Retrieval-Augmented Generation). Uploaded files are segmented into logical chunks, parsed, and embedded using either local embeddings or Gemini models. The computed vectors are cataloged in the SQLite database. During queries, a cosine similarity algorithm pulls the most relevant text blocks to append as context headers in LLM prompts, ensuring answers are grounded in your files.
The Doc Forensics tab performs local weighted scans to assess document safety and authenticity. It executes verification procedures across five distinct vectors: metadata integrity (photoshop tracers or timestamp variance), Error Level Analysis (pixels variance heatmap delta checks), cryptographically signed PKCS7 envelope checks, regex-based regulatory keyword text parsing (identifying SSNs, IDs, and licenses), and QR code registration validation against trusted domain lists.
The Hunt Terminal is a sandbox CLI console running directly inside the web browser. It routes customized commands beginning with the hunt prefix to the backend engine, which handles path context persistence across executions, sanitizes input streams to prevent execution escape vulnerabilities, and falls back to system subprocess calls for commands outside its standard database list.
The Music Player provides developers with an integrated background soundscape. It supports uploading local audio files (MP3, WAV, OGG, FLAC, AAC, M4A, OPUS) and downloading them locally. Additionally, users can paste YouTube links to extract and cache audio tracks automatically using a zero-dependency native WebM/Opus streaming fallback if ffmpeg is not present. The system synchronizes playback state (seek, tracks, volumes, shuffle/sequential modes) with global persistent layouts: a topbar mini-deck and a detailed sidebar deck showing spinning album art and active playback time overlays on every single tab page.
The Terminal Stats dashboard exposes aggregated metrics regarding LLM utilization. Instead of estimates, the platform integrates direct API telemetry, capturing prompt and completion token sizes using the usage_metadata object returned by the Gemini SDK. It visualizes model requests split, active keys workload distribution, and 14-day history timelines dynamically using client-side canvas charts. It also monitors model variants distribution and calculates accumulated token metrics for local model telemetry.
Located under Settings, the Feature Toggle framework allows developers to modularize the workspace by toggling core feature panes (Music Player, Hunt Path, Quest Board, Intel Vault, Doc Forensics, Game Arcade) on or off. Hiding a module immediately strips its navigation elements from the layout, pauses any active services (like background audio or running game rendering loops), and automatically redirects active pane focuses to the AI Cognitive Assistant home screen. Additionally, the settings tab offers a Minimize Sidebar option to collapse the left navigation bar into a compact icon-only column. Minimization can also be toggled dynamically using the header hamburger ≡ button or via the global Ctrl+B (or Cmd+B) keyboard shortcut. These configurations persist locally and serialize in the database or browser's local cache.
The Game Arcade panel delivers classic developer-themed mini-games designed to run entirely offline with clean, flat-color styling. The selection menu displays all four games in a top-aligned, 4-column horizontal grid. It runs four discrete games: Git Commit Snake (control a git branch to consume commits and dodge conflicts), Data Lane Runner (lane dodge falling malware blocks and compile RAM buffers with index splicing safety), Terminal Decrypt (deductive word likeness passcode decrypt console), and Hex Malware Sweeper (a 100-cell hex address block Minesweeper clone). High scores persist in the browser's local cache. Win, loss, and lockout screens display using premium, non-blocking glassmorphic overlays with RESTART and MENU shortcut actions, preventing blocking alert interruptions. Keyboard controls: Arrow keys or WASD to navigate Snake/Runner, Space to restart, Esc to exit arena.
The LinkedIn Drafts module is a native workspace panel for creating, editing, and managing LinkedIn post drafts. It features AI-powered auto-detection during AI chat: when the AI returns LinkedIn post content, a Save to LinkedIn Drafts button appears inline. Drafts are organized date-wise with a split list/detail view, a character count indicator, and status tracking (Draft → Ready). The Refine with AI button lets you send any draft back to the AI with a LinkedIn optimization prompt for content polishing.
To support air-gapped setups or low-bandwidth environments, DevHunt divides its key features into offline-local capabilities and online-connected modules that require external resources:
| Feature Module | Status | Dependencies | Functional Scope |
|---|---|---|---|
| AI Assistant Chat | Online Only | Gemini API Key & Internet | Streams chat messages and responses via server-sent events (SSE). |
| Grammar helper | Online Only | Gemini API Key | Prepends grammar tips to assistant answers. |
| Hunt Path (Gen) | Online Only | Gemini API Key | Roadmap tailoring uses LLM queries; runs with local static DevOps curriculum fallback when offline. |
| Intel Vault (Index) | Online Only | Gemini Embedding Model | Generates high-dimensional vector embeddings for uploaded PDFs or text. |
| Intel Vault (Query) | Online Only | Gemini Chat Model | Enables RAG chat analysis referencing indexed knowledge documents. |
| Quest Board | Offline Ready | SQLite Database (Local) | Managing, creating, updating, and rendering tasks in the Kanban grid. |
| Doc Forensics (Scan) | Offline Ready | Local Python libraries | Performs error level checks (ELA), photoshop signature matches, envelope cryptography checks, domain list QR scans, and regex parses. |
| Doc Forensics (Chat) | Online Only | Gemini API Key | Chatting with the document analyzer concerning forensics checklist results. |
| Hunt Terminal | Offline Ready | Local shell processor | Interacting with local files, executing disk audits, or running quest commands. External calls like ping or curl require internet. |
| Music Player (Local) | Offline Ready | HTML5 Audio API | Uploading local media files, playing tracks, shuffling list, and managing local libraries. |
| YouTube Converter | Online Only | Internet connection & yt-dlp | Downloads, parses metadata, and converts audio streams from youtube links. |
| System Logs Viewer | Offline Ready | SQLite Database (Local) | Auditing log streams stored in SQLite. |
| Game Arcade | Offline Ready | HTML5 Canvas & DOM Grid | Play offline retro developer games (Snake, Runner, Decrypt, Sweeper) styled with clean, standard flat colors. |
| LinkedIn Drafts | Offline Ready | SQLite Database (Local) | Create, edit, and organize LinkedIn post drafts locally. AI refinement requires Gemini API key. |
| LinkedIn AI Refine | Online Only | Gemini API Key | Sends existing draft to AI for content polishing and LinkedIn post optimization. |
DevHunt leverages a lightweight stack, utilizing Flask (Python 3.10+) for the API server, SQLite for local persistence, and a Vite + React frontend for the modern IDE interface (compiled to a static bundle). The legacy plain HTML/JS frontend is also available as a fallback in the frontend/ directory.
Understanding the exact locations of configuration files, engines, and persistence caches:
DevHunt/
├── backend/
│ ├── app.py # Flask controller, static routing, SSE routes
│ ├── config.py # Server paths (Uploads dir, DB files, and key files)
│ ├── check_requirements.py # Startup verification checks script
│ ├── core/
│ │ ├── document_analyzer.py # Multi-agent Document Forensics Orchestrator
│ │ ├── db.py # Database connection pools & schema init
│ │ ├── key_manager.py # API key health validation and rotation
│ │ ├── rag_pipeline.py # RAG chunker, embedder, and vector database
│ │ ├── chat_engine.py # SSE message streamer & chat session context
│ │ └── terminal_engine.py # Command parse loops & OS process runners
│ └── uploads/ # Storage directory for ELA deltas & diagrams
├── frontend-src/ # Vite + React IDE (modern interface)
│ ├── src/ # React components & pages
│ ├── dist/ # Compiled production bundle (served by Flask)
│ └── public/ # Static assets (docs.html, logs.html, logo.png)
├── frontend/ # Legacy plain HTML/JS interface (fallback)
├── run.bat # Automated Windows launcher (port 1225)
├── run.sh # Automated macOS/Linux launcher
└── build_desktop.bat # Full desktop EXE build script (Tauri + PyInstaller)
The SQLite database file is stored at backend/data/devhunt.db. It serves as the primary persistent data warehouse for the platform. It manages the following tables:
Stores indexed documents, files, and URLs uploaded by the developer:
CREATE TABLE IF NOT EXISTS knowledge_sources (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
type TEXT, -- 'pdf', 'url', 'text', 'note', 'image'
path TEXT, -- Local absolute file location
status TEXT, -- 'indexed', 'pending', 'error'
chunk_count INTEGER DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
Stores raw text segments and their high-dimensional vector embeddings serialized as JSON arrays:
CREATE TABLE IF NOT EXISTS knowledge_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
source_id INTEGER,
content TEXT, -- Extracted chunk text
embedding TEXT, -- JSON-serialized float array
metadata TEXT, -- JSON-serialized page/position data
FOREIGN KEY(source_id) REFERENCES knowledge_sources(id) ON DELETE CASCADE
);
Caches weighted verification checklist results, verdicts, and file locations for generated Matplotlib charts:
CREATE TABLE IF NOT EXISTS document_analyses (
id INTEGER PRIMARY KEY AUTOINCREMENT,
source_id INTEGER UNIQUE,
final_score REAL,
verdict TEXT,
risk_level TEXT, -- 'LOW', 'MEDIUM', 'HIGH'
report_json TEXT, -- AI detailed local structured entity report
ela_image_path TEXT,
dashboard_image_path TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY(source_id) REFERENCES knowledge_sources(id) ON DELETE CASCADE
);
Maintains persistent conversational log history for standard assistant chats and document-specific forensics chats:
CREATE TABLE IF NOT EXISTS messages (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id TEXT, -- 'default_session' or 'session_doc_<source_id>'
role TEXT, -- 'user' or 'assistant'
content TEXT,
model_used TEXT,
key_used TEXT, -- Key manager index label
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
tokens_used INTEGER DEFAULT 0
);
Tracks backlog items, priority values, and lifecycle milestones:
CREATE TABLE IF NOT EXISTS todos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
description TEXT,
priority TEXT, -- 'high', 'medium', 'low'
status TEXT, -- 'pending', 'in_progress', 'done'
due_date TEXT,
tags TEXT, -- JSON array of strings
source TEXT, -- 'manual' or 'ai_detected'
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
completed_at DATETIME
);
Logs developer actions and triggers for path auto-adjusting logic:
CREATE TABLE IF NOT EXISTS analytics_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
event_type TEXT, -- 'question_asked', 'todo_completed', 'path_updated'
topic TEXT,
metadata TEXT, -- JSON event context details
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);
Stores detailed system operations accessible in the Log Console `/logs` panel:
CREATE TABLE IF NOT EXISTS system_logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
level TEXT, -- 'INFO', 'WARN', 'ERROR', 'SUCCESS'
category TEXT, -- 'api_call', 'key_event', 'chat', 'rag', 'system'
message TEXT,
metadata TEXT, -- JSON payload (e.g. response duration)
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);
Stores long-term facts extracted from conversations during periodic consolidations:
CREATE TABLE IF NOT EXISTS user_memories (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id TEXT UNIQUE,
consolidated_facts TEXT, -- JSON-serialized string array
last_updated DATETIME DEFAULT CURRENT_TIMESTAMP
);
Stores LinkedIn post drafts created via the Drafts panel or auto-saved from the AI chat interface:
CREATE TABLE IF NOT EXISTS linkedin_drafts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
content TEXT NOT NULL,
status TEXT DEFAULT 'draft', -- 'draft' or 'ready'
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
Key configuration files are kept in the backend/data/ directory:
backend/data/devhunt.db): Stores the SQLite tables listed above.backend/data/keys.json): Stores API keys registered via CLI or GUI. API keys are stored encrypted locally.backend/data/profile.json): Stores developer name, streak milestone metrics, current/target skill sets, daily study target times, and interface parameters.backend/data/settings.json): Stores default system parameters (e.g. selected LLM overrides, themes).backend/data/learning_path.json): Stores the dynamically structured learning tracks, streak counts, progress nodes, and completion states.backend/data/.secret): Automatically generated key file containing the Fernet encryption secret used to encrypt registered API keys.backend/uploads/): Directory used to save raw document files, generated Matplotlib dial graphs, and ELA contrast heatmaps.This manual covers how to install, verify, and run the DevHunt application suite. The platform offers compiled native installers for Windows, and automated shell bootstrap scripts for macOS, Linux, and Windows source configurations.
Python >= 3.10 is required on the host system.For a native desktop experience on Windows 10 or 11, use the precompiled installers. These bundle both the frontend shell (Tauri) and python core (PyInstaller) together:
DevHunt_Setup.exe to launch the installation wizard. It installs DevHunt into your local profile directory and registers desktop/start menu shortcuts automatically.DevHunt_Setup.msi for system-wide administrative deployments.Upon installation, the client launches a native Rust-based container that silently executes the Python backend executable sidecar in the background on local port 1225 before presenting a sleek WebView workspace container.
On Unix-based operating systems, use the automated bootstrap script to compile the workspace environment and start the application:
# Make script executable (if needed)
chmod +x run.sh
# Run launcher
./run.sh
The launcher automatically checks the system Python version, initializes a virtual environment (backend/venv/), installs dependencies from `requirements.txt`, sets up local loopback auth tokens, and opens your default browser at `http://localhost:1225`.
If running from source on Windows, execute the command batch file in the root folder:
run.bat
This script replicates the shell verification checks, sets up the local Python virtual environment, and boots the Flask API server side-by-side with Vite compilation.
A unified Dockerfile and docker-compose orchestration configuration is currently in development to support fully containerized local hosting environments.
To verify that all local computer vision, file analysis, and database libraries are correctly imported inside your virtual environment, run the requirement verifier:
# Activate virtual env first, then run:
python check_requirements.py
Common installation anomalies and developer instructions on how to bypass them immediately:
Occurs when SQLite encounters multiple write hooks on different threads, commonly when duplicate python app.py servers run concurrently on port 1225. Force kill all active python threads using PowerShell:
Stop-Process -Name "python" -Force
If the terminal prints OSError: [Errno 98] Address already in use, it means port 1225 is held by an orphaned instance. Free port 1225 in Windows using:
netstat -ano | findstr 1225
# Kill process using the PID found at the end of output line
taskkill /PID <PID> /F
Windows builds of `pyzbar` depend on the Visual C++ Redistributable. If DLL fails to load, download and install VC Redist packages from Microsoft. The VerifierAgent will automatically skip QR checks gracefully if this DLL is missing.
DevHunt exposes standard REST endpoints alongside stream interfaces. All parameters, JSON schemas, and streaming SSE responses are detailed below.
POST /api/knowledge/<source_id>/analyze
Executes VerifierAgent, AnalystAgent, and ReporterAgent processes, caching details into `document_analyses` table.
// Response (200 OK)
{
"success": true,
"source_id": 16,
"score": 72.8,
"verdict": "⚠️ Suspicious (Review Recommended)",
"risk_level": "MEDIUM",
"ela_image": "receipt.pdf_ela.png",
"dashboard_image": "receipt.pdf_dashboard.png"
}
GET /api/knowledge/<source_id>/analysis
Fetches cached analysis checks results details.
// Response (200 OK)
{
"success": true,
"analyzed": true,
"score": 72.8,
"verdict": "⚠️ Suspicious (Review Recommended)",
"risk_level": "MEDIUM",
"ela_image_path": "receipt.pdf_ela.png",
"dashboard_image_path": "receipt.pdf_dashboard.png",
"report_json": { ... }
}
POST /api/chat
Submit questions about an indexed document. Include source_id to fetch document RAG blocks.
// Request payload
{
"message": "What is the PNR code of this travel ticket?",
"session_id": "session_doc_16",
"source_id": 16
}
POST /api/chat/stream
Submits a message and establishes a connection header text/event-stream to stream response tokens:
data: {"text": "The"}
data: {"text": " PNR"}
data: {"text": " code"}
data: {"text": " is..."}
GET /api/chat/history?session_id=<session_id>
Retrieves all message blocks associated with the active session identifier. Standard chats use default_session, whereas forensics document chats use the format session_doc_<source_id>.
// Response (200 OK)
{
"success": true,
"history": [
{"role": "user", "content": "What is ELA?", "timestamp": "..."},
{"role": "assistant", "content": "Error Level Analysis resaves...", "timestamp": "..."}
]
}
DELETE /api/chat/history?session_id=<session_id>
Clears chat logs associated with the session.
// Response (200 OK)
{
"success": true,
"message": "History cleared"
}
GET /api/todos?status=<filter>&priority=<filter>
Lists todos in the SQLite database.
// Response (200 OK)
{
"success": true,
"todos": [
{"id": 4, "title": "Configure SSL", "priority": "high", "status": "pending"}
]
}
POST /api/todos
Adds a new quest item.
// Request payload
{
"title": "Configure local virtual environment",
"description": "Install libraries inside venv",
"priority": "medium",
"due_date": "2026-06-20",
"tags": ["setup", "env"]
}
PUT /api/todos/<todo_id>
Updates priority, description, title, or status details.
POST /api/todos/<todo_id>/complete
Marks quest completed and logs timestamp.
DELETE /api/todos/<todo_id>
Removes quest item completely.
GET /api/path
Fetches the learning tracks structure from learning_path.json.
POST /api/path/generate
Dynamically compiles path modules based on user profiles skill settings.
PUT /api/path/update
Modifies study day status (e.g. {"day": 2, "status": "completed"}).
GET /api/path/today
Returns daily goals and active checkpoints.
GET /api/knowledge
Lists metadata for all uploaded documents.
POST /api/knowledge/upload
Uploads PDF, TXT, MD, or Image files. Automatically triggers asynchronous RAG background sync chunking.
POST /api/knowledge/url
Extracts web content from a URL, index as RAG vectors.
POST /api/knowledge/note
Indexes custom title and text content nodes directly.
DELETE /api/knowledge/<source_id>
Removes RAG chunks and master sources entries.
GET /api/knowledge/<source_id>/content
Returns full text contents compiled from raw knowledge chunks.
Full CRUD interface for managing LinkedIn post drafts. Drafts can be created, updated, refined with AI, or deleted. All data is stored locally in SQLite.
GET /api/linkedin/drafts
Returns all drafts sorted by created date (newest first).
POST /api/linkedin/drafts
// Request: { "title": "...", "content": "..." }
// Response: { "success": true, "id": 42 }
PUT /api/linkedin/drafts/<id>
// Request: { "title": "...", "content": "...", "status": "ready" }
// Response: { "success": true }
DELETE /api/linkedin/drafts/<id>
POST /api/linkedin/drafts/<id>/refine
Passes existing draft content through the AI model with a LinkedIn optimization prompt.
// Response: { "success": true, "refined": "Polished post content..." }
During the document analyze execution, the orchestrator triggers VerifierAgent which runs a weighted 5-layer checklist check on the uploaded file:
| Check Layer | Weight | Technical Verification Scope |
|---|---|---|
| Metadata Forensics | 20% | Checks binary streams for editing tools (Photoshop, Foxit, Nitro PDF) and mismatched creation/modification timestamps. Counts `/Prev` cross-reference pointers to identify multiple incremental saves. |
| Error Level Analysis (ELA) | 25% | Resaves image blocks at quality 75, calculating pixel error variance against the original matrix. High standard deviations (anomalous hotspots) highlight spliced elements. |
| Digital Signature Check | 30% | Checks PDF file envelopes looking for cryptographic dictionary entries: /ByteRange and /PKCS7 blocks. Flags unsigned tickets/receipts. |
| Text & Regulatory Check | 15% | Runs regex checks to locate standard formatted card IDs (Aadhaar, PAN) and tests for official administrative headers (e.g. Income Tax, DigiLocker). |
| QR Code Integrity Check | 10% | Decodes QR values via OpenCV/Pyzbar and parses hostname domains, matching them against a government allowlist (e.g. .gov.in, nic.in). |
Upon analysis completion, ReporterAgent compiles the weighted checklists scores and saves a premium vertically-stacked Matplotlib dashboard image (dimensions: 6.5x7.5 inches) containing:
Free-tier Gemini API connections are subject to strict rate limits (20 requests per day), which will trigger **429 RESOURCE_EXHAUSTED** errors when scanning multiple files or testing pipelines.
To ensure reliability, the document analyze step bypasses Gemini API calls entirely. AnalystAgent uses a fast local heuristics engine to populate fields:
Gemini API usage is preserved exclusively for interactive document chat sessions. Chat queries use indexed RAG blocks to answer questions while scanning remains rate-limit free.
The Hunt Terminal is an interactive console that processes system shell scripts and custom commands. Each command is detailed below:
| Terminal Command | Purpose & Parameters | Functional Scope |
|---|---|---|
hunt help |
List all commands | Prints description list of all available commands. |
hunt neofetch |
System specifications | Displays Host OS, shell configuration, and active python version. |
hunt pwd |
Print working directory | Returns the current system directory path. |
hunt ls |
List directory contents | Lists files, folder dimensions, and child node metrics. |
hunt cd <path> |
Change directory | Changes working directory context on the server node. |
hunt cat <file> |
View file content | Reads file streams (UTF-8 safe) directly to terminal output. |
hunt mkdir <name> |
Create directory | Creates a new folder at target path. |
hunt rm <file/dir> |
Delete file or folder | Removes files or directories recursively. |
hunt myip |
Inspect IP addresses | Returns local interfaces and queries public router IP. |
hunt ping <host> |
Ping remote host | Pings host and prints response latency. |
hunt dns <domain> |
Perform DNS query | Queries nameservers for A, MX, TXT, and CNAME records. |
hunt dig <domain> |
Detailed DNS lookup | Alternative lookup query to inspect nameservers routing. |
hunt whois <domain> |
Domain registrar queries | Fetches domain registrant information and creation dates. |
hunt headers <url> |
Inspect HTTP headers | Sends request and displays raw response headers. |
hunt ssl <host> |
SSL certificate check | Audits remote SSL certificates, validating expiration dates. |
hunt port <host> <port> |
Check target port status | Validates if a specific port is open on target server. |
hunt trace <host> |
Trace network hops | Simulates network path traceroute to target host. |
hunt subdomains <dom> |
Enumerate subdomains | Scans DNS endpoints to find subdomains. |
hunt git <args> |
Git shell wrapper | Executes version controls queries (e.g. `git status`, `git log`). |
hunt python <cmd> |
Python command exec | Runs custom python code blocks inside virtual environment. |
hunt calc <expr> |
Equation calculator | Solves mathematical inputs. |
hunt localports |
Local host ports check | Audits ports open on localhost interfaces (127.0.0.1). |
hunt portscan <host> |
TCP scanner | Scans active target ports (e.g. 21, 22, 80, 443, 8080). |
hunt quest <args> |
Manage quests | Lists, adds, or completes to-dos via database hooks. |
hunt keys |
API key manager check | Checks status and cooldown counters of the key manager pool. |
hunt memory |
AI facts list | Lists learned developer facts cached in memory. |
hunt backup |
Full backup export | Exports database entries and settings JSON. |
hunt history |
Chat sessions history | Lists active conversations in database. |
hunt notifications |
System warning warnings | Displays list of warnings and errors logged. |
hunt stats |
Analyze token & API stats | Displays aggregated token usage, model workload distributions, and key metrics. |
Each terminal command is mapped below with its specific flags, operational behavior, parameters, and example output formats.
Syntax: hunt help [command]
Lists all available terminal commands. If a command name is provided as an argument, it pulls specific usage text and available flags from the command-level help mapper.
$ hunt help ls
Usage: hunt ls [options] [path]
Lists directory contents in a cross-platform format.
Options:
-a Show hidden files (filenames starting with '.')
-l Display detailed listing (type, size, last modified)
Syntax: hunt neofetch
Displays system details about the active DevHunt server node. It compiles Host OS details, kernel version, shell runtime, active CPU core metrics, memory usage, and active workspace paths, side-by-side with a premium ASCII logo.
$ hunt neofetch
/\_/\ guest@devhunt
( o.o ) -------------------
> ^ < OS: Windows 10 (AMD64)
/ | | \ Kernel: 10.0.19045 Build 19045
( |_|_| ) Shell: Hunt Terminal v1.0
\_______/ CPU: AMD Ryzen 5 (12 Cores)
DEVHUNT NODE Memory: 8192MB / 16384MB (50%)
Workspace Path: e:\git-projects\DevHunt
Syntax: hunt pwd
Prints the current absolute directory path where the terminal session is operating. Used to check context state before executing relative file paths.
$ hunt pwd
e:\git-projects\DevHunt
Syntax: hunt ls [options] [path]
Lists contents of the active directory in a clean, colored format (directories in cyan, executables/scripts in green). If path is supplied, scans the target path.
Options:
-a : Include hidden files starting with a dot (e.g. .gitignore).-l : Long list format displaying permissions, file sizes, last modified times, and names.$ hunt ls -l
-rw-r--r-- 1 guest staff 1048 Jun 13 11:17 config.py
drwxr-xr-x 1 guest staff - Jun 13 11:17 core/
-rwxr-xr-x 1 guest staff 5514 Jun 13 11:17 run.bat*
Syntax: hunt cd [path]
Changes the working directory of the terminal session. If executed without arguments, returns to the project workspace root. It warns the user if they navigate outside the DevHunt workspace boundaries.
$ hunt cd backend
Switched session context to e:\git-projects\DevHunt\backend
Syntax: hunt cat <filename>
Reads and displays the text contents of a file in the terminal. The output is bounded at 5,000 characters to prevent crashing browser page rendering.
$ hunt cat config.py
import os
UPLOADS_DIR = "uploads"
KEYS_PATH = "data/keys.json"
Syntax: hunt mkdir <directory_name>
Creates a new directory folder at the specified target path. Creates intermediate directories automatically if they do not exist.
$ hunt mkdir temp_data
Directory successfully created: temp_data
Syntax: hunt rm [options] <path>
Deletes a file or directory. Directory deletion requires the recursive option flag.
Options:
-r : Recursive deletion. Required to delete directories and their sub-contents.$ hunt rm -r temp_data
Successfully deleted directory tree: temp_data
Syntax: hunt myip
Performs an external network check to retrieve the server's public IP address, ISP provider name, ASN, routing city, country, coordinates, and local timezone offset.
$ hunt myip
NODE NETWORK COORDINATES:
Public IP Address : 203.0.113.50
ISP/Provider : Reliance Jio Infocomm (AS55836)
Location : Mumbai, Maharashtra, India
Coordinates : Lat: 19.076, Lon: 72.8777
Timezone : Asia/Kolkata (Offset: +05:30)
Syntax: hunt ping <host> [options]
Checks network latency to a remote server. Because standard ICMP packets require administrative root access, this command performs TCP handshake timing checks against target ports.
Options:
-c <count> : Number of handshake tests to run (default: 4).-p <port> : Target TCP port to connect to (default: 80).$ hunt ping google.com -c 3
HUNT PING google.com (142.250.190.46) using port 80/TCP:
Testing 3 handshakes...
Connection from 142.250.190.46: seq=1 time=24.15 ms status=CONNECTED
Connection from 142.250.190.46: seq=2 time=22.80 ms status=CONNECTED
Connection from 142.250.190.46: seq=3 time=23.45 ms status=CONNECTED
--- google.com ping statistics ---
3 packets transmitted, 3 received, 0.0% packet loss
rtt min/avg/max = 22.80/23.47/24.15 ms
Syntax: hunt dns <domain> [record_type]
Queries DNS records for a domain using Google's secure DNS-over-HTTPS API. Displays records, TTL values, and response IP metadata.
Record Types: A, AAAA, MX, TXT, NS, CNAME (default is A).
$ hunt dns github.com MX
DNS lookup for github.com (Record Type: MX)
Resolving via secure DNS-over-HTTPS...
TYPE TTL DATA
--------------------------------------------------
MX 3600 10 mxb-01.play.spf.protonmail.ch.
MX 3600 20 mxb-02.play.spf.protonmail.ch.
Syntax: hunt whois <domain>
Queries public registrar databases to find registration ownership details, name servers, creation dates, and expiration intervals.
$ hunt whois google.com
WHOIS Query for 'google.com' via port 43 socket connection:
Connecting to whois.iana.org...
Redirecting query to registry server: 'whois.verisign-grs.com'...
DOMAIN SUMMARY:
Domain Name : google.com
Registrar : MarkMonitor Inc.
Created On : 1997-09-15T04:00:00Z
Expires On : 2028-09-14T04:00:00Z
Name Servers : ns1.google.com, ns2.google.com
Syntax: hunt headers <url>
Fetches HTTP response headers from a web address and verifies critical security settings such as Content Security Policy (CSP), HSTS, and Frame protections.
$ hunt headers google.com
Checking headers for https://google.com...
Response received in 120.45 ms with Status Code: 200
HTTP HEADERS:
content-type: text/html; charset=ISO-8859-1
cache-control: private, max-age=0
x-frame-options: SAMEORIGIN
x-xss-protection: 0
Syntax: hunt ssl <host>
Establishes a TLS connection to check a domain's SSL/TLS certificate chain. It audits the certificate's issuer, cryptographic strength, common name validity, and expiration details.
$ hunt ssl google.com
SSL Certificate Audit for google.com:
Common Name : *.google.com
Issuer : Google Trust Services LLC
Validity : Valid (Expires in 58 days)
Algorithm : sha256WithRSAEncryption
Syntax: hunt port <host> <port>
Checks if a specific TCP port is open and listening on a target host. Uses socket connection timeouts to assess port connectivity quickly.
$ hunt port localhost 1225
Port 1225 is OPEN on localhost
Syntax: hunt trace <host>
Simulates a network traceroute path to a target host, checking hop latency and attempting to resolve geolocations for each gateway node.
$ hunt trace 8.8.8.8
Tracing route to 8.8.8.8 (dns.google):
Hop 1: 192.168.1.1 (1.24 ms)
Hop 2: 10.0.0.1 (10.50 ms)
Hop 3: 8.8.8.8 (22.10 ms) [Target Reached]
Syntax: hunt subdomains <domain>
Scans for active subdomains of a target domain passively by resolving common DNS host prefixes (e.g. mail, api, dev, blog) against the domain.
$ hunt subdomains github.com
Scanning subdomains for github.com...
Found: api.github.com
Found: pages.github.com
Found: status.github.com
Syntax: hunt git <arguments>
A wrapper command that runs native git commands securely in the current workspace. Allows tracking modifications, staging changes, or checking logs without leaving the console.
$ hunt git status
On branch main
Your branch is up to date with 'origin/main'.
Changes not staged for commit:
modified: frontend/docs.html
Syntax: hunt python -c "<code>"
Runs a single Python command line statement within the active virtual environment context. Returns standard output or syntax errors immediately.
$ hunt python -c "import sys; print(sys.version)"
3.10.11 (tags/v3.10.11:7d4061c, May 17 2023, 20:06:55)
Syntax: hunt calc <expression>
Evaluates math expressions safely without allowing execution injection vectors. It supports trigonometric functions, logarithms, roots, and standard arithmetic operations.
$ hunt calc "sqrt(144) * log2(256)"
Result: 96.00
Syntax: hunt localports [options]
Lists active network sockets, listening ports, and connection states on the localhost machine. Helps diagnose port occupancy conflicts.
Options:
-a : Show all connections (including established active sockets).-l : Show listening sockets only (default behaviour).$ hunt localports
ACTIVE LOCAL LISTENERS:
Proto Local Address State
TCP 127.0.0.1:1225 LISTENING
TCP 127.0.0.1:27017 LISTENING
Syntax: hunt portscan <host> [options]
Scans TCP ports on a host to identify active listening services. Scans are run in parallel to minimize wait times.
Options:
-r <range> : Specific port ranges (e.g. 20-100) or search profiles (e.g. common to test ports 21, 22, 23, 25, 53, 80, 443, 8080).-t <timeout> : Socket timeout duration in seconds per port connection (default: 0.5s).$ hunt portscan localhost -r common
Scanning common ports on localhost...
Port 80/TCP : CLOSED
Port 443/TCP : CLOSED
Port 1225/TCP : OPEN (Flask server)
Syntax: hunt quest [add <title> [priority] [desc] | done <id> | rm <id>]
Provides command-line management for the SQLite-backed Quest Board. Running the command without arguments lists all active quest items in a tabular format.
$ hunt quest add "Complete Docs" high "Write detailed feature walkthroughs"
Quest successfully added! ID: 12
$ hunt quest
ID TITLE PRIORITY STATUS
------------------------------------------
12 Complete Docs high backlog
08 Database fix medium in_progress
Syntax: hunt keys [list | add <key> [label] | rm <id> | test <id>]
Interacts with the Key Manager to register, audit, test, or delete Gemini API keys. Displays rate-limit metrics and cooldown trackers.
$ hunt keys list
ID KEY PREFIX LABEL STATUS REQUESTS (24H)
-------------------------------------------------------
1 AIzaSyB... Gemini Key 1 Active 14 / 20
2 AIzaSyD... Gemini Key 2 Active 0 / 20
Syntax: hunt memory [refine | clear]
Lists, refines, or clears long-term cognitive developer facts cached by the AI assistant during chat interactions.
$ hunt memory
AI CONSOLIDATED DEVELOPER MEMORIES:
- User prefers dark mode.
- Python project uses Flask backend at port 1225.
Syntax: hunt backup export
Exports all SQLite tables (quests, key statuses, chat history metadata) and local config JSON files into a consolidated backup directory structure.
$ hunt backup export
Backing up DevHunt Database...
Backing up Configuration profiles...
Backup file successfully created: backend/data/backup_20260613.json
Syntax: hunt history [limit]
Retrieves the message logs of the active chat session from the database, helping developers debug recent prompts and token flows.
$ hunt history 2
[2026-06-13 11:15] User: How is ELA computed?
[2026-06-13 11:15] AI: ELA resaves image blocks at 75% quality...
Syntax: hunt notifications [list | read [all | <id>] | detail <id>]
Lists, displays, or marks notifications and system log messages. Helps monitor background scanner alerts or database locks.
$ hunt notifications list
ID SEVERITY MESSAGE READ
--------------------------------------------------------
1 WARNING Gemini API Key 1 hit quota 429 limit No
2 SUCCESS Database schema check completed Yes
Syntax: hunt stats
Aggregates conversation messages from the SQLite database to analyze approximate token counts, key workloads, and model choices.
$ hunt stats
DEVHUNT TOKEN & API METRICS ANALYSIS
==================================================
Total Conversations Logged : 32 exchanges
Total Approximate Tokens : 14502 tokens
MODEL USAGE DISTRIBUTION:
MODEL NAME | REQUESTS | EST. TOKENS
-----------------------------------------------------
gemini-3.1-flash-lite | 24 | 8940
gemini-2.5-flash | 8 | 5562
API KEY WORKLOAD ANALYSIS:
KEY LABEL / MASKED | REQUESTS | EST. TOKENS
-----------------------------------------------------
Primary Gemini Key | 30 | 13802
Backup Key 2 | 2 | 700
* Token approximations are estimated as character length divided by 4.
DevHunt provides native launcher scripts (hunter.bat for Windows and hunter for Unix/macOS) to interface with the DevHunt CLI engine directly from your system shell.
Usage:
Run the launcher script with the -dt (direct terminal) flag from your command line to launch an interactive container shell context on your host system:
$ hunter -dt
guest@devhunt:~$
The DevHunt Workspace IDE transforms the traditional RAG cognitive helper dashboard into a fully featured offline developer center. It introduces real-time file tree traversal, workspace document editing, custom line styling, and a multi-theme environment.
The left side layout hosts a collapsible panel rendering directory listings dynamically from the local workspace. Built recursive traversal logic automatically filters out build, configuration, and environment files such as .git, node_modules, venv, and __pycache__. Clicking folders opens/closes sub-trees locally, and clicking individual files retrieves text contents for code auditing.
The main workspace tab hosts a charcoal-colored monospaced text editor pane featuring:
Tab inserts 4 space characters instead of shifting focus elements.Ctrl+S keyboard shortcuts.frontend/app.js - DevHunt) or defaults to DevHunt when cleared.prompt() dialogues. Click the + button in the file explorer sidebar header or press Ctrl+N to render an inline text input box at the top of the tree. Type the filename and press Enter to save an empty file to disk via POST /api/ide/file, refresh the file tree explorer, and load it in the editor. Pressing Escape or blurring cancels.#chat-input).empty_workspace/ subdirectory by default to isolate project resources and prevent traversal until a specific local folder is explicitly loaded via the File menu or keyboard shortcuts.| HTTP Method | Endpoint Path | Query / Payload | Description |
|---|---|---|---|
| GET | /api/ide/files |
None | Recursively reads files starting at workspace roots, building a JSON tree hierarchy. |
| GET | /api/ide/file |
?path=relative_path |
Validates boundaries against traversal attacks, reads, and returns the raw file string. |
| POST | /api/ide/file |
{ "path": relative, "content": string } |
Saves incoming content edits directly back to the specified relative file path. |
DevHunt implements dynamic theme modifications switching color variables under body tags:
#4f46e5) instead of cyan.
All inputs, textareas, and selects feature a white background with dark charcoal text.
User chat bubbles are solid Indigo with white text, and AI bubbles are clean light gray.
Quest Kanban cards are set to solid white backgrounds for readability against columns.
body.theme-light and paint grid lines, borders, labels, and text colors in dark, legible tones automatically.To optimize performance, when the Slate or Light theme is active, the backend canvas animation thread is automatically bypassed, saving local CPU cycles. Theme selections automatically persist in SQLite database profiles and local cache arrays.
The LinkedIn Post Drafts module is a native workspace panel that captures LinkedIn-oriented content generated during AI chat sessions and organizes it as a private draft notebook. It integrates AI detection with a full CRUD management interface for drafts.
When you chat with the AI Assistant and ask it to create a LinkedIn post, the system automatically detects relevant content in the assistant's response. A Save to LinkedIn Drafts button appears directly on the AI message bubble, allowing you to one-click save the content without leaving the chat.
All saved drafts are stored persistently in the local SQLite database and are accessible via the LinkedIn Drafts tab in the left activity bar.
The LinkedIn Drafts panel features two views side-by-side:
The detection logic works by scanning the AI assistant's response text for LinkedIn-related keywords, including:
LinkedIn post, post on LinkedIn, LinkedIn draft, Here are some LinkedIn post optionsOption 1:, Post:, or similar LinkedIn post format headersWhen a match is detected, a LinkedIn button is injected into the message bubble footer. Clicking it extracts the draft text and opens a save confirmation dialog showing a title field and the content preview.
GET /api/linkedin/drafts
Returns all LinkedIn drafts ordered by created date descending.
// Response (200 OK)
{
"success": true,
"drafts": [
{
"id": 1,
"title": "Celebrating 1 Year at DevHunt",
"content": "Excited to share...",
"status": "draft",
"created_at": "2026-06-14 10:30:00"
}
]
}
POST /api/linkedin/drafts
// Request body (JSON)
{ "title": "My Post Title", "content": "Full post text..." }
// Response (201 Created)
{ "success": true, "id": 42 }
PUT /api/linkedin/drafts/<id>
// Request body (JSON)
{ "title": "Updated Title", "content": "Updated content...", "status": "ready" }
DELETE /api/linkedin/drafts/<id>
// Response
{ "success": true }
POST /api/linkedin/drafts/<id>/refine
Sends the draft content to the AI model with a LinkedIn optimization prompt. Returns refined post copy.
// Response (200 OK)
{
"success": true,
"refined": "✨ Polished LinkedIn post text here..."
}
The LinkedIn Drafts feature can be toggled from the Settings tab under Feature Access Toggles. Disabling it hides the LinkedIn Drafts tab from the activity bar and panel navigation. Enabling it restores the tab and reloads the drafts list automatically.
| Setting | Location | Effect |
|---|---|---|
toggle-feat-linkedin |
Settings → Feature Access | Hides/shows the LinkedIn Drafts tab in the workspace navigation |
| Chat save button | AI Assistant chat bubbles | Appears automatically on LinkedIn-detected responses; click to save draft |
DevHunt is open-source. We welcome contributions to optimize the forensic engines and add more CLI tools.
If you encounter database lockups, rate limit errors, or missing DLLs, please create a ticket in our issue tracker:
Found a bug, rate limits, or library loading issues? Create a ticket directly in our repository tracker.
Report Bug / Ask Help ↗Fork the repository, create a branch, write clean code, and submit a Pull Request. We review contributions daily.
Create Pull Request ↗A chronological history of releases and security patches implemented in the DevHunt workspace:
| Version | Date | Key Enhancements & Security Fixes |
|---|---|---|
| v1.0.3-beta.1 | June 27, 2026 |
|
| v1.0.2 | June 23, 2026 |
|