Planar

Local model · every item traced to the transcript

From meeting to plan,
with the receipts.

Paste a transcript. Planar pulls out the decisions, requirements, tasks, risks and open questions, then drafts a plan, and shows you the exact line behind each one.

Transcript

L130Mehul warned that an additional database lookup for every event could significantly increase PostgreSQL load.

L160No production database schema changes will be deployed until the benchmark is completed.

L223Consumer groups must have explicit access permissions.

L268RabbitMQ will continue handling existing notification workloads during the initial migration.

L286Nikhil: Create the initial Kafka infrastructure and document topic-level access policies.

L288Rhea: Benchmark PostgreSQL indexing strategies and read-replica performance.

Meeting record

RiskAdditional database lookups could significantly increase PostgreSQL load.

RequirementDatabase schema changes must not be deployed until benchmark results are available.

RequirementConsumer groups must have explicit access permissions.

DecisionRabbitMQ keeps notification workloads during the initial migration.

Task · NikhilCreate Kafka infrastructure and access policies.

Task · RheaBenchmark PostgreSQL indexing and read-replica performance.

Plan

3Benchmark PostgreSQL indexing and read-replica performanceRhea

2Create Kafka infrastructure and access policiesNikhil

Recorded run on the Distributed Platform sample. Hover an item to follow its trail.

Explore real runs

The actual Planar interface, replaying runs recorded on a 16 GB laptop with qwen3:8b. Pick a meeting, open any item to see the lines behind it, and try the plan map. Nothing here was edited.

A browser can't run an 8B model, so this replays recorded output. Open the demo on its own page ↗

How it works

A small model does one narrow job at a time. The backend checks everything it says against the transcript before keeping it.

  1. Read the meeting

    Speakers and timestamps are detected and every line is numbered. Long meetings are split into overlapping chunks instead of being cut off.

    numbered lines · speakers · chunks
  2. Extract, one job at a time

    Separate passes for choices, decisions, requirements, tasks, and risks with open questions. The model cites line numbers instead of quoting, and a second look asks only for what it missed.

    JSON schema · cached transcript prefix
  3. Check every claim

    Cited lines must support the item. "Should" stays "should", numbers and dates must exist in the meeting, and a choice the meeting left open can't be reported as decided.

    grounding · faithfulness checks
  4. Link and plan

    Links come from shared evidence, not the model's say-so. Plan steps cite the decisions, requirements and tasks they deliver, and the plan map draws why → what → how → who.

    traceability · plan map · Markdown export

Measured, not eyeballed

Each sample meeting has a hand-written answer key listing what was really decided, required, assigned, worried about and left open, with the lines that say so. Output is matched by line, not by wording.

–of extracted items are right
–of what the meetings contained was found

The model misses things more often than it invents them, so recall is where the work goes. Every change is scored across all keyed meetings before it is kept; ideas that read well but scored worse were measured and removed.

Meeting in the demoRightFoundPrecisionRecall
Loading…

Run it on your laptop

Python 3.12, Node 22 and Ollama. 16 GB of RAM is enough for the 8B model; a meeting takes about 4–10 minutes.

  • Intel graphics: OLLAMA_IGPU_ENABLE=1 roughly halves run time.
  • Runs keep going in the background if you close the tab.
  • Score a run against the answer keys with scripts/score.py.
# model (~5 GB) and code
ollama pull qwen3:8b
git clone https://github.com/SarthakChandrayan/Planar
cd Planar

# backend
cd backend
python -m venv .venv
.venv\Scripts\pip install -r requirements-dev.txt
cd ..

# frontend
cd frontend
npm install
cd ..

# use the 8B model, then start
echo OLLAMA_MODEL=qwen3:8b > .env
ollama serve          # in its own terminal
.\start.ps1           # opens localhost:5173