CLI tool to convert meeting notes into actionable markdown checklists
Project description
Meeting-to-Action (Project C)
Meeting-to-Action is a small CLI tool that converts raw meeting notes (.md or .txt) into a clean, actionable checklist containing tasks, optional owners, and optional due dates.
V1 Scope
- One CLI command:
parse - Input: one
.md/.txtfile, or a directory of notes files - Extraction of action items from bullets and sentences
- Optional extraction of owner and due date only when obvious
- Output: one markdown file with a standardized checklist format
- Basic terminal summary
- Unit tests for parser and formatter
Out of Scope (V1)
- Web UI
- Database
- Authentication/authorization
- Third-party integrations
- Audio transcription
- OCR/PDF parsing
- Multilingual support
- Advanced NLP confidence scoring
- Background jobs
- Cloud deployment
Requirements
- Python 3.11+
Installation
python -m venv .venv
source .venv/bin/activate
pip install -e .
For the smallest release-validation pass in a fresh environment, install the test extra:
pip install -e ".[test]"
Usage
meet2action parse notes.md --out actions.md
To produce machine-readable JSON instead of markdown:
meet2action parse notes.md --format json --out actions.json
The input file must be a local .md or .txt file.
Expected validation failures return a non-zero exit code and do not write an output file:
meet2action parse /tmp/missing.txt --out actions.md
# Error: input file does not exist: /tmp/missing.txt
meet2action parse notes.csv --out actions.md
# Error: input file must be .md or .txt
Validation
python -m pytest
meet2action parse tests/fixtures/notes_sample.txt --out actions.md
meet2action parse tests/fixtures/notes_sample.txt --format json --out actions.json
Example Input
- Alice to draft kickoff agenda by 2026-03-20.
Please send vendor shortlist by Friday.
Bob will follow up with legal.
General discussion about roadmap.
Example Output
# Action Items
- [ ] Draft kickoff agenda (owner: Alice, due: 2026-03-20)
- [ ] Send vendor shortlist (due: Friday)
- [ ] Follow up with legal (owner: Bob)
With --format json:
{
"total_lines": 4,
"candidate_lines": 3,
"actions": [
{ "task": "Draft kickoff agenda", "owner": "Alice", "due_date": "2026-03-20" },
{ "task": "Send vendor shortlist", "owner": null, "due_date": "Friday" },
{ "task": "Follow up with legal", "owner": "Bob", "due_date": null }
]
}
If no actionable lines are found, the CLI still writes a valid checklist file:
# Action Items
_No action items found._
Extraction rules (V1)
The parser uses deterministic, conservative rules:
- Action candidates are lines with clear action cues (for example:
to,will,send,review,prepare,follow up). - Owner is extracted only for obvious formats:
Alice to ...Alice will ...Alice: ...@Alice ...
- Due date is extracted only for obvious formats:
by YYYY-MM-DDordue YYYY-MM-DD(must be a real calendar date)by Mondayordue Friday(weekday names)
- Discussion/status context lines (for example
Discussion:orWe will discuss ...) are intentionally ignored to reduce false positives. - Generic context labels like
Topic:,FYI:, andBackground:are ignored unless they clearly match an obvious action-owner pattern. - Leading
Pleaseis removed from task text when present as politeness.
Project Layout
meet2action/
├── src/meet2action/
│ ├── cli.py
│ ├── formatter.py
│ ├── models.py
│ └── parser.py
└── tests/
├── fixtures/notes_sample.txt
├── test_cli_helpers.py
├── test_e2e_parse.py
├── test_formatter.py
└── test_parser.py
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file meet2action-1.0.0.tar.gz.
File metadata
- Download URL: meet2action-1.0.0.tar.gz
- Upload date:
- Size: 16.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f5c1b80db45b5ce12920e32142803b219f286fd43de432f111f80b176044800
|
|
| MD5 |
dda946e0995ea3107242c2cbe10d1a8b
|
|
| BLAKE2b-256 |
3bff056dd8dc0d09be19be11b23ffe8a4abe68537a26fc90f32685167070065d
|
Provenance
The following attestation bundles were made for meet2action-1.0.0.tar.gz:
Publisher:
publish.yml on Dami777-code/meet2action
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
meet2action-1.0.0.tar.gz -
Subject digest:
2f5c1b80db45b5ce12920e32142803b219f286fd43de432f111f80b176044800 - Sigstore transparency entry: 1252140161
- Sigstore integration time:
-
Permalink:
Dami777-code/meet2action@2960337aeba659082a06b7a5d7bb495d3bfeae7b -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/Dami777-code
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2960337aeba659082a06b7a5d7bb495d3bfeae7b -
Trigger Event:
push
-
Statement type:
File details
Details for the file meet2action-1.0.0-py3-none-any.whl.
File metadata
- Download URL: meet2action-1.0.0-py3-none-any.whl
- Upload date:
- Size: 9.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fe1418b6142efbfc55f6e2160cbeb7b83f0fd73f8821f059b8de96a4c8fad554
|
|
| MD5 |
477392f90f4ef2ee70a69bbc0fc577ab
|
|
| BLAKE2b-256 |
34f64f945013b3db750e0a9328e73ceff39ee0d28045e36a7989905f31a8f493
|
Provenance
The following attestation bundles were made for meet2action-1.0.0-py3-none-any.whl:
Publisher:
publish.yml on Dami777-code/meet2action
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
meet2action-1.0.0-py3-none-any.whl -
Subject digest:
fe1418b6142efbfc55f6e2160cbeb7b83f0fd73f8821f059b8de96a4c8fad554 - Sigstore transparency entry: 1252140182
- Sigstore integration time:
-
Permalink:
Dami777-code/meet2action@2960337aeba659082a06b7a5d7bb495d3bfeae7b -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/Dami777-code
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2960337aeba659082a06b7a5d7bb495d3bfeae7b -
Trigger Event:
push
-
Statement type: