Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
AI가 익명으로 업로드된 제안서를 읽어 고용 계약 조건을 추출·검증하고, 입사 전 신입생에게 경고합니다
AI agents read anonymously uploaded offer letters, extract and verify job-bond terms with evidence, and warn freshers before placement drives.
비즈니스Python · TypeScriptGitHub @SaiPranav13188온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
BondCheck: an agentic AI platform for job-bond transparency
AI agents that read offer letters, extract and verify job-bond terms, and warn freshers before they sign.
Seven specialised agents turn anonymously uploaded offer letters into a verified, evidence-backed, searchable database of bond terms, answer students' questions with citations, and proactively alert them before placement drives.
All demo companies and people are fictional. BondCheck shows information reported in uploaded documents and public sources. It is not legal advice.README 전문 보기 ↗AI agents that read offer letters, extract and verify job-bond terms, and warn freshers before they sign.
Seven specialised agents turn anonymously uploaded offer letters into a verified, evidence-backed, searchable database of bond terms, answer students' questions with citations, and proactively alert them before placement drives.
| Agents | Orchestrator · Privacy · Extraction · Verification · Q&A · Monitor · Alert |
| Stack | LangGraph · Claude API (Haiku + Sonnet) · FastAPI · PostgreSQL / SQLite · Next.js 16 + Tailwind 4 + Framer Motion |
| Runs without an API key | Yes. A deterministic offline engine drives the same agent graph, so everything works locally out of the box. |
All demo companies and people are fictional. BondCheck shows information reported in uploaded documents and public sources. It is not legal advice.
Backend (Python 3.12):
cd bondcheck
python -m venv .venv
.venv\Scripts\activate # macOS/Linux: source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # optional: add ANTHROPIC_API_KEY, DATABASE_URL, …
python -m db.seed # runs ~70 synthetic letters through the real agent pipeline
uvicorn api.main:app --port 8000 # API docs at http://localhost:8000/docs
Frontend (Node 20+):
cd bondcheck/frontend
npm install
cp .env.example .env.local # NEXT_PUBLIC_API_URL=http://localhost:8000
npm run dev # http://localhost:3000
Moderator console: http://localhost:3000/admin (local token: dev-admin-token).
Tests and evaluation:
pytest -q # 35 tests: tools, agents, guardrails, API
python -m eval.run_eval # writes eval/results.json + eval/report.md (shown on /how-it-works)
| Setting | Effect |
|---|---|
No ANTHROPIC_API_KEY | Offline rule engine for classification, PII detection and extraction; a deterministic planner for Q&A; web search disabled; scanned letters need Tesseract. |
ANTHROPIC_API_KEY set | claude-haiku-4-5 classifies documents, double-checks PII and transcribes scans; claude-sonnet-5-5 extracts fields (structured JSON output), answers questions in a tool-use loop and researches public sources with web search. Sonnet calls opt in to server-side refusal fallbacks. |
No DATABASE_URL | Local SQLite at data/bondcheck.db (auto-created and seeded on first API start). |
DATABASE_URL set | PostgreSQL (Neon/Supabase). Run db/schema.sql, then optionally db/seed.sql. Create the read-only Q&A role from the bottom of schema.sql and put it in DATABASE_URL_READONLY. |
┌──────────────────────────────┐
Events ─────────────▶│ ORCHESTRATOR AGENT │ LangGraph state graph:
• New upload │ plans, routes, retries (≤2), │ routing, retries, token budget,
• Student question │ budgets, escalates to humans │ interrupt() for human input
• Scheduled job └──────────────┬───────────────┘
┌─────────────────┬─────────────────┼──────────────────┬─────────────────┐
▼ ▼ ▼ ▼ ▼
PRIVACY ──▶ EXTRACTION ──▶ VERIFICATION Q&A AGENT MONITOR ──▶ ALERT
redact + quote-verified corroborate / read-only SQL, (daily) (7 days before
re-scan ×3 self-check loop variant / conflict / exit-cost calc, a drive)
│ outlier / new_company citations
▼ ▼
uploader confirms moderation queue PostgreSQL + agent_runs log
Workflow A, upload. intake → [ocr] → classify → privacy → extraction ⟲ → [confirm: interrupt()] → verification → finalize (document deleted). Any step can route to reject (not an offer letter, PII left after 3 scans, unreadable) or escalate (failed after 2 retries, over the token budget). Every event streams to the UI as NDJSON.
Workflow B, question. The Q&A agent calls find_company, run_readonly_sql, calc_exit_cost and get_evidence, and must cite record IDs, upload counts and dates.
Workflow C, monitoring. The Monitor agent checks drives in the next 30 days for missing, stale or conflicting data, saves public findings as unverified records, and creates "data needed" requests. The Alert agent emails subscribers 7 days before a drive, and skips "no bond, high confidence" alerts unless the student opted in.
verify_quote() confirms every quote exists in the (redacted) document, which catches made-up values.₹1.5 lakh → 150000, two (2) years → 24).| Single-pass extraction | Agentic (self-check + re-read) | + uploader confirmation | |
|---|---|---|---|
| Field accuracy | 88.5% | 99.6% | 100% |
| Hallucinated fields | 22 | 0 | — |
| Metric | Target | Result |
|---|---|---|
| Field-level extraction accuracy | ≥ 90% | 99.6% |
| PII leak rate (stored records) | 0% | 0% (0 of 335 planted items; also 0 left in redacted text) |
| Hallucinated values stored | 0% | 0% |
| Conflict detection precision / recall | ≥ 85% | 100% / 100% |
| Q&A answers with correct citations | ≥ 95% | 100% (24 questions) |
| Time per upload | measured | ~0.01 s offline (0 tokens) |
Read these honestly. The test letters come from the same generator the extraction rules were developed against (different random seeds), so this is an upper bound. The 5 scanned letters were skipped because no OCR was available. Add real, consented letters to eval/ and re-run with ANTHROPIC_API_KEY set to get the Claude numbers, plus cost per letter.
bondcheck/
├── agents/ orchestrator.py (LangGraph) · privacy · extraction · verification · qa · monitor · alert
├── tools/ documents (extract_text, ocr_image, read_section, verify_quote) · pii · database
│ (find_company, run_readonly_sql, save_record, moderation) · calculator · normalize · web · notify
├── core/ config · llm (Claude wrapper, token budget) · state (UploadState) · runlog (events + agent_runs)
├── api/main.py FastAPI: /upload, /upload/{id}/confirm, /ask, /companies, /company/{id}, /drives,
│ /subscribe, /samples, /admin/*, /cron/*
├── db/ schema.sql (PostgreSQL) · schema_sqlite.sql · seed.py → seed.sql
├── eval/ letters.py (synthetic generator) · synthetic_letters/ · ground_truth.json · run_eval.py
├── tests/ pytest suite
├── frontend/ Next.js app: home, companies, company page, upload (live agent run), ask, drives, how-it-works, admin
├── .github/workflows/agents-cron.yml daily Monitor + Alert (alternative to Vercel Cron)
└── Dockerfile API image (includes Tesseract)
Additions beyond the design doc's schema: moderation_queue.note, users.alert_all, agent_runs.run_ref, and the data_requests and alerts_sent tables, which the Monitor and Alert agents need. company_summary also exposes company_id.
| Risk | Guardrail |
|---|---|
| Personal data leak | Redact → independent re-scan with broader rules → redact again; reject after 3 failures. Files are processed in memory, and raw text leaves the graph state right after the Privacy Agent. |
| Made-up values | Every stored value needs a quote that verify_quote() finds; otherwise it's dropped. |
| Wrong arithmetic | calc_exit_cost is plain Python. |
| Dangerous SQL | SELECT-only, single statement, table allow-list, automatic LIMIT, timeout, read-only connection (SQLite authorizer / Postgres read-only role). |
| Fake uploads | Document-type check, outlier rules, moderation queue. |
| Prompt injection in letters | Letter text is wrapped as data with an explicit rule; instruction-like text is flagged in the run log. |
| Runaway agents | ≤ 2 retries per step, token budget per run, recursion limit, every step logged to agent_runs. |
frontend/ to Vercel. Set NEXT_PUBLIC_API_URL and CRON_SECRET; vercel.json schedules the Monitor and Alert agents daily through /api/cron/[job].docker build -t bondcheck-api . and run on Render, Railway, Fly.io or Cloud Run with DATABASE_URL, ANTHROPIC_API_KEY, ADMIN_TOKEN, CRON_SECRET, RESEND_API_KEY, CORS_ORIGINS. Alternatively use the GitHub Actions cron in .github/workflows.Built a multi-agent system (LangGraph, Claude API, FastAPI, PostgreSQL, Next.js) in which 7 specialised agents redact personal data, extract offer-letter terms with quote-verified self-checking, detect conflicting reports, answer questions with cited SQL-backed answers, and proactively alert students before placement drives. The agentic extraction loop improved field accuracy from 88.5% to 99.6% over single-pass extraction and cut hallucinated fields from 22 to 0, with a 0% PII leak rate across 50 synthetic test documents.
(Re-measure with the Claude engine and real letters before using these numbers publicly.)