Skip to main content

Turn meeting transcripts into a temporal context graph for coding agents.

Project description

meetmind

Turn meetings into a living context graph your coding agent can build from.

PyPI version Python License: MIT

Every meeting produces decisions, requirements, and constraints — then they're lost in a transcript nobody re-reads. meetmind extracts them into a temporal knowledge graph that stays current across meetings: when a later call reverses a decision, the old one is marked superseded and linked to its replacement. A coding agent reads the graph as the source of truth, and the git diff of each meeting tells it exactly what changed.

recording / paste / doc ─▶ extract (Groq) ─▶ merge into graph.json (git) ─▶ coding agent
        (Meetily, free)         └── decisions · requirements · constraints · supersessions ──┘

Features

  • Temporal graph, not notes — every node has a status (active / superseded / deprecated) and a supersedes link, so the graph always shows current truth and what changed.
  • Many inputs — a Meetily recording, an audio file, a pasted summary, or a transcript file.
  • record and walk away — arm a meeting, and meetmind auto-ingests the moment the call ends.
  • Multi-project routing — one meeting that touches several projects fans out into separate per-project graphs, with cross-project dependency edges preserved.
  • Agent-ready export — emit a clean, active-only spec (Markdown or JSON) grouped by feature.
  • Git-native history — each meeting is a commit; meetmind delta is the change set to act on.
  • Slack bot — drop a recording in a channel, get the graph back as an image.
  • Works out of the box — a shared Groq key ships with the package; set your own for heavier use.

Installation

pip install meetmind             # core CLI
pip install "meetmind[all]"      # + Slack bot, graph images, PDF/DOCX ingest, embeddings

[!TIP] meetmind runs with zero setup thanks to a bundled shared Groq key. For anything beyond light use, get a free key at console.groq.com and set GROQ_API_KEY to avoid the shared rate limit.

Optional extras: [bot] (Slack), [viz] (PNG graphs — also needs the dot binary), [docs] (PDF/DOCX), [embeddings] (semantic entity resolution).

Quick start

Record a live meeting

Capture with Meetily (free, local, private), and let meetmind watch for the finished transcript:

meetmind record --link https://meet.google.com/xyz

meetmind arms, waits for you to start recording in Meetily, detects when the call ends (the transcript stops growing), then ingests and commits automatically. Press Ctrl+C to finalize early. Add --route to split a multi-project meeting across graphs.

Ingest anything else

meetmind ingest --meetily                       # latest Meetily meeting
meetmind ingest --paste "we'll use GraphQL and Postgres" --meeting-id m1
meetmind ingest transcript.txt --meeting-id 2026-07-12-kickoff
meetmind ingest --audio call.mp3 --meeting-id m1        # Groq Whisper fallback
meetmind ingest --new                           # every Meetily meeting not yet in the graph

See and use the graph

meetmind show                    # current active nodes
meetmind delta                   # git diff of the last meeting's changes
meetmind timeline                # meeting-by-meeting evolution
meetmind viz --out graph.png     # render the graph
meetmind export --format md      # clean active-only spec for a coding agent
meetmind validate                # integrity check (dangling edges, supersede cycles)

How the graph works

When a later meeting revises a decision, meetmind decides new vs. duplicate vs. change using, in order: explicit supersession from the extractor, optional embedding similarity, then string/concept matching. A changed decision doesn't overwrite the old one — the old node flips to superseded and a SUPERSEDES edge points from the new node to it.

{
  "id": "decision-api-style",
  "type": "Decision",
  "title": "API uses GraphQL",
  "content": "Switch the public API from REST to GraphQL.",
  "status": "active",
  "source_meeting": "2026-07-19-review",
  "supersedes": ["decision-api-rest"],
  "confidence": 0.9
}

Node types: Feature, Requirement, Decision, Constraint, Component, Interface, OpenQuestion, ActionItem. Edges: IMPLEMENTS, DEPENDS_ON, BLOCKS, SUPERSEDES, DECIDED_IN, RELATES_TO.

For the coding agent

Point your agent at graph.json (or meetmind export) and treat it as follows:

  • Current requirements = every active node. Obey these.
  • superseded / deprecated nodes are not current truth — use them to know what to replace.
  • OpenQuestion nodes are undecided — flag them, don't assume an answer.
  • What changed this meeting = meetmind delta. A node flipping to superseded plus a new active node linked by SUPERSEDES means "replace the old implementation with the new."

Multi-project meetings

When one meeting spans several projects, --route labels each node with a project and fans them into separate context-graphs/<project>.json files — each with its own history, supersession, and export spec.

meetmind ingest big-meeting.txt --meeting-id m1 --route
meetmind export --project payments

Known projects are discovered from existing graph files so labels stay consistent; a new project name auto-creates its graph. Cross-project dependencies are preserved as namespaced references (e.g. Billing DEPENDS_ON auth:decision-api-graphql) and surfaced in the dependent project's export.

Slack bot

Let anyone drop a meeting recording into a channel and get the graph back as an image.

pip install "meetmind[bot]"
export SLACK_BOT_TOKEN=xoxb-...      # bot token
export SLACK_APP_TOKEN=xapp-...      # app-level token, scope connections:write
export GROQ_API_KEY=...
meetmind-bot

Mentions: @bot graph (post the image), @bot show (list active nodes), @bot delta (git diff), @bot note <text> (ingest pasted text). Uploaded audio and documents are ingested automatically. Set CG_ROUTE_PROJECTS=1 to route each meeting by project instead of by channel.

[!NOTE] The bot uses Socket Mode — no public URL needed. Enable Socket Mode, subscribe to the message.channels and app_mention events, and invite the bot to the channel.

Configuration

Variable Purpose
GROQ_API_KEY Your Groq key (overrides the bundled shared one).
CG_CONFIDENCE_THRESHOLD Nodes below this confidence become proposed for review (default 0).
CG_ROUTE_PROJECTS 1 = bot routes meetings by project instead of by channel.
GEMINI_API_KEY Enables Gemini embeddings for semantic entity resolution.
SLACK_BOT_TOKEN / SLACK_APP_TOKEN Slack bot credentials.

Any variable can also live in a .env file in your working directory.

How it captures meetings

meetmind reads Meetily's local SQLite database read-only — Meetily records system + mic audio and transcribes it locally for free, so meetings never leave your machine. A previously recorded call works too: import it into Meetily, or point meetmind straight at the file with --audio (Groq Whisper transcribes it).

[!IMPORTANT] record watches Meetily — you start the recording once in Meetily, and everything after (detection, ingest, commit) is automatic. Meetily exposes no API to start recording programmatically.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

meetmind-0.1.3.tar.gz (53.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

meetmind-0.1.3-py3-none-any.whl (49.9 kB view details)

Uploaded Python 3

File details

Details for the file meetmind-0.1.3.tar.gz.

File metadata

  • Download URL: meetmind-0.1.3.tar.gz
  • Upload date:
  • Size: 53.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.11

File hashes

Hashes for meetmind-0.1.3.tar.gz
Algorithm Hash digest
SHA256 75abb99a1c302cb2833331ae86549763f11b426a99628c72b0f6d47b8fafc7e6
MD5 96a516bb941eff406555472fb223e2db
BLAKE2b-256 a399da6ba4caae89a948e4ef94eba59eef2c2ab9f3e5a5eaeb289b2d7d230cec

See more details on using hashes here.

File details

Details for the file meetmind-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: meetmind-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 49.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.11

File hashes

Hashes for meetmind-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 8a56ce65694bdcb5d04f3ed7a99d6c5f7130609fc63b278d7c998c9dd616f2a3
MD5 7bd45d7a780d582edb4f1e56e1bbb476
BLAKE2b-256 e696f65f4b0b9c8dcdb20e908298d94c331a5406eed00f21908411c4a6bb5057

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page