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
Metadata
Release files for meet2action 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| meet2action-1.0.0.tar.gz | 16.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| meet2action-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 26.0 kB
Release files / meet2action-1.0.0.tar.gz
| Download URL | meet2action-1.0.0.tar.gz |
|---|---|
| Size | 16.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2f5c1b80db45b5ce12920e32142803b219f286fd43de432f111f80b176044800
|
|
BLAKE2b-256 checksum How to use checksums |
3bff056dd8dc0d09be19be11b23ffe8a4abe68537a26fc90f32685167070065d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 8, 2026.
Transparency logRelease files / meet2action-1.0.0-py3-none-any.whl
| Download URL | meet2action-1.0.0-py3-none-any.whl |
|---|---|
| Size | 9.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fe1418b6142efbfc55f6e2160cbeb7b83f0fd73f8821f059b8de96a4c8fad554
|
|
BLAKE2b-256 checksum How to use checksums |
34f64f945013b3db750e0a9328e73ceff39ee0d28045e36a7989905f31a8f493
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 8, 2026.
Transparency log