https://github.com/jcktp/operator
Local-first AI workspace for document analysis, investigations, and team intelligence. Runs entirely on your machine.
https://github.com/jcktp/operator
ai document-analysis llm local privacy sqlite typescript
Last synced: 29 days ago
JSON representation
Local-first AI workspace for document analysis, investigations, and team intelligence. Runs entirely on your machine.
- Host: GitHub
- URL: https://github.com/jcktp/operator
- Owner: jcktp
- License: other
- Created: 2026-03-21T13:34:14.000Z (2 months ago)
- Default Branch: main
- Last Pushed: 2026-05-03T06:27:08.000Z (30 days ago)
- Last Synced: 2026-05-03T08:26:59.902Z (30 days ago)
- Topics: ai, document-analysis, llm, local, privacy, sqlite, typescript
- Language: TypeScript
- Homepage: https://jcktp.github.io/operator/
- Size: 2.31 MB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: license.md
Awesome Lists containing this project
README
# Operator
**Local-first AI workspace for investigative journalism**
Upload notes, sources, photos, and documents. Get structured AI analysis — entities, timelines, claims, redactions. Everything runs on your machine.












---
## What it does
Operator is a private journalism workspace. Upload documents, images, and audio to get structured AI analysis — summaries, claims, entity extraction, timelines, and comparisons — with framing tuned for investigative reporting. Everything runs locally; no data leaves your machine unless you choose a cloud AI provider.
### Core
- **Stories** — organise work into scoped stories with documents, entities, timelines, and dispatch
- **Document analysis** — AI extracts summaries, claims, flags, and follow-up questions framed for journalism
- **Image & audio uploads** — photos get OCR + EXIF extraction; audio files are transcribed with speaker diarization
- **Library** — full document history with keyword and semantic search, auto-tagging, duplicate detection, and annotations
- **Dashboard** — cross-beat overview with health signals, document digest, and one-pager export
- **Dispatch** — AI chat with document context, memory, web search, and journalism-tuned personas
- **Pulse** — feed aggregator (RSS, Reddit, YouTube, Bluesky, Mastodon) with keyword monitoring
- **Journal** — private notes with folder organisation and AI grammar correction
- **Remote submissions** — shareable link for sources to submit files directly to your library
- **P2P collaboration** — LAN-based sync with threaded chat and conflict resolution
### Analysis tools
- **Entities** — extraction, timeline, interactive story map, and AI-assisted storyline builder
- **Entity Network** — force-directed graph of extracted entities with cluster highlighting
- **Claims Tracker** — log and verify factual claims from sources
- **Risk Register** — probability x impact scoring, owner assignment, auto-creation from uploads
- **Actions** — task tracking with assignee, due date, priority, and auto-extraction from documents
### Investigation tools
- **Image Analysis** — face extraction/comparison, Error Level Analysis, deepfake detection, reverse search
- **Photo Map** — geotagged photos on an interactive map with EXIF details
- **Speaker Diarization** — speaker-segmented transcripts with talk-time stats and speaker library
- **Web Monitor** — track web pages for changes with configurable intervals, CSS selector targeting, diff view, and AI change summaries
- **Research Tools** — Wayback Machine lookups, document diff, structured research workflows
- **FOIA Tracker** — public records requests with 7 status stages and overdue alerts
- **File Cleaner** — strip EXIF metadata before sharing
---
## Requirements
- **macOS or Linux** (Windows via WSL) — **Node.js 18+** — **Ollama** — **~5 GB disk** — **8 GB RAM** (16 GB recommended)
- All dependencies auto-installed by `start.sh`
- Cloud AI (Anthropic, OpenAI, Google, Groq, xAI, Perplexity, Mistral) optional — configure in Settings
---
## Installation
```bash
# Clone
git clone https://github.com/jcktp/operator.git && cd operator
# Run (installs everything on first run, starts in seconds after)
bash start.sh
```
Or download the ZIP from [Releases](https://github.com/jcktp/operator/releases), extract, and run `bash start.sh`.
---
## AI providers
**Local (default):** Ollama runs on-device. Default models: `phi4-mini` (text, ~2.5 GB) and `llava-phi3` (vision, ~2.9 GB). Optional audio models: `gemma4:e2b` or `phi4-multimodal`. Three setup modes available: Text + Vision, Full split, or All-in-one.
**Cloud:** Enter API keys in Settings. Keys are AES-256-GCM encrypted and never leave your machine except in direct API calls.
Supported: Anthropic, OpenAI, Google Gemini, Groq, xAI, Perplexity, Mistral.
---
## Security
- AES-256-GCM encrypted API keys; SHA-256 session hashing; HTTP-only cookies
- All 60+ API routes require authentication; shell commands use `execFile` with argument arrays
- File paths validated against root before serving; binds to localhost only
- No telemetry, no tracking, no external calls except to configured AI providers
---
## Tech stack
Next.js 16 (Turbopack) · SQLite + Prisma 7 · Ollama · Tailwind CSS v4 · OpenLayers · Cloudflare Quick Tunnel
---
## Development
```bash
npm test # all tests (unit + integration)
npm run test:watch # watch mode
npm run test:coverage # coverage report
```
API reference: [`docs/api.md`](./docs/api.md)
---
## License
**BSL 1.1** — non-commercial use is free. Commercial use requires a license. Converts to MIT on January 1, 2032. Full text: [`license.md`](./license.md)
AI outputs are probabilistic — verify all analysis before acting on it.
---
Built by Jorick.