Local, offline commitment extraction for AI agents. No API key, no cloud. Extract promises from agent output, parse deadlines, track them through a state machine in SQLite.
Python
1
0 commits
updated Sep 24, 2026
Local commitment extraction for AI agents. No API key. No cloud. Just pip install.
Agents make promises — "I'll send the report to Sarah by Friday" — and almost nothing checks whether they kept them. This package extracts those commitments offline with pattern matching, parses the deadlines, and tracks each one through a state machine in a local SQLite file.
Nothing leaves your machine. There are no network calls in this library.
pip install cogext-primitive
from cogext_primitive import extract_commitments
commitments = extract_commitments(
"I'll send the report to Sarah by Friday EOD."
)
for c in commitments:
print(f"{c.action} {c.object} to {c.recipient} by {c.deadline}")
send report to Sarah by 2026-09-25 23:59:59+00:00
cogext extract "I'll send the report by Friday" # JSON, nothing stored
cogext add "I'll call Sarah tomorrow" # extract + store
cogext list --status open # table of stored commitments
cogext get <commitment_id> # one commitment as JSON
cogext fulfill <commitment_id> # resolve it
cogext fail <commitment_id>
cogext stats # counts by status
Zero configuration: the first command creates ~/.cogext/commitments.db.
$ cogext add "I'll email Sarah tomorrow"
3f2b1c44-9a7e-4c1b-8f0d-2a6e5b7c9d10 open email (confidence 0.95)
1 commitment(s) stored.
$ cogext list
ID STATUS ACTION OBJECT RECIPIENT DUE (UTC) CONF
-------- ------ ------ ------ --------- ---------------- ----
3f2b1c44 open email - Sarah 2026-09-24 23:59 0.95
by Friday, tomorrow, in 2 hours, by EOD, within 45 minutes)once the tests pass)detected → open → due → overdue → fulfilled)list, get, stats) do not create the database. Only write commands (add, fulfill, fail) do.detected ─┬─> open ─┬─> due ──> overdue ─┬─> expired
│ │ ├─> fulfilled
│ ├─> fulfilled ├─> failed
│ ├─> failed └─> cancelled
│ └─> cancelled
└─> cancelled
fulfilled / failed / expired / cancelled are terminal and immutable.
Invalid transitions raise ValueError. Resolved commitments cannot be reopened —
that is what makes the record trustworthy after the fact.
| Field | Meaning |
|---|---|
promise_text | The sentence the promise came from |
action | The verb: send, email, deploy, follow up |
object | What is being acted on: report, hotfix |
recipient | Who it is for, when named |
deadline | Parsed, timezone-aware UTC datetime |
deadline_expression | The original phrasing, e.g. by Friday EOD |
due_condition | time, event_implicit, event_external or state |
confidence | 0.95 explicit + dated · 0.85 vague (soon) · 0.70 undated · 0.50 modal |
status | Lifecycle state |
The extractor is precision-tuned, and returns nothing for:
"Should I send the report?""If we have time, I could send it""I sent the report yesterday""John said he would send it by Friday""I will handle that soon" (extracted at 0.85, no deadline)This bias is measured, not guessed: in COGEXT Research 01 only 1 of 120 published agent outputs contained anything a rules-based extractor could recognise as a checkable commitment. Most agent output is narrative, tool traces or code.
Those live in the cloud layer at cogextai.com. The primitive is free and MIT licensed; the verification engine is the paid product.
Use the primitive if you want to experiment locally without signing up, you are building a prototype and do not need verification yet, or you want to embed commitment extraction in your own tooling.
Use the cloud if you need external verification (did the email actually send?), audit trails and receipts, or you are running agents in production.
extract_commitments() returns commitments in detected state. Nothing
is tracking them yet.
CogextLocal.add() stores them as open, because adding a commitment is the
act of starting to track it.deadline is populated on the top-level model and mirrored in
due_condition.deadline, so you never have to dig for the date. (The hosted
API currently leaves the top-level deadline null; this library does not
repeat that.)python -m venv venv && source venv/bin/activate
pip install -e ".[dev]"
pytest
python -m build
MIT © 2026 Yamin / THRYVIX
list, get, and stats no longer create ~/.cogext/ or the SQLite
schema on a clean machine. Read-only commands are now side-effect free.CogextLocal(...) can be constructed on a read-only filesystem.cogext stats with nothing tracked prints 0 commitments tracked. instead of
a table of zeros.cogext CLI.Python
100.0%
Local, offline commitment extraction for AI agents. No API key, no cloud. Extract promises from agent output, parse deadlines, track them through a state machine in SQLite.
Python
1
0 commits
updated Sep 24, 2026
Local commitment extraction for AI agents. No API key. No cloud. Just pip install.
Agents make promises — "I'll send the report to Sarah by Friday" — and almost nothing checks whether they kept them. This package extracts those commitments offline with pattern matching, parses the deadlines, and tracks each one through a state machine in a local SQLite file.
Nothing leaves your machine. There are no network calls in this library.
pip install cogext-primitive
from cogext_primitive import extract_commitments
commitments = extract_commitments(
"I'll send the report to Sarah by Friday EOD."
)
for c in commitments:
print(f"{c.action} {c.object} to {c.recipient} by {c.deadline}")
send report to Sarah by 2026-09-25 23:59:59+00:00
cogext extract "I'll send the report by Friday" # JSON, nothing stored
cogext add "I'll call Sarah tomorrow" # extract + store
cogext list --status open # table of stored commitments
cogext get <commitment_id> # one commitment as JSON
cogext fulfill <commitment_id> # resolve it
cogext fail <commitment_id>
cogext stats # counts by status
Zero configuration: the first command creates ~/.cogext/commitments.db.
$ cogext add "I'll email Sarah tomorrow"
3f2b1c44-9a7e-4c1b-8f0d-2a6e5b7c9d10 open email (confidence 0.95)
1 commitment(s) stored.
$ cogext list
ID STATUS ACTION OBJECT RECIPIENT DUE (UTC) CONF
-------- ------ ------ ------ --------- ---------------- ----
3f2b1c44 open email - Sarah 2026-09-24 23:59 0.95
by Friday, tomorrow, in 2 hours, by EOD, within 45 minutes)once the tests pass)detected → open → due → overdue → fulfilled)list, get, stats) do not create the database. Only write commands (add, fulfill, fail) do.detected ─┬─> open ─┬─> due ──> overdue ─┬─> expired
│ │ ├─> fulfilled
│ ├─> fulfilled ├─> failed
│ ├─> failed └─> cancelled
│ └─> cancelled
└─> cancelled
fulfilled / failed / expired / cancelled are terminal and immutable.
Invalid transitions raise ValueError. Resolved commitments cannot be reopened —
that is what makes the record trustworthy after the fact.
| Field | Meaning |
|---|---|
promise_text | The sentence the promise came from |
action | The verb: send, email, deploy, follow up |
object | What is being acted on: report, hotfix |
recipient | Who it is for, when named |
deadline | Parsed, timezone-aware UTC datetime |
deadline_expression | The original phrasing, e.g. by Friday EOD |
due_condition | time, event_implicit, event_external or state |
confidence | 0.95 explicit + dated · 0.85 vague (soon) · 0.70 undated · 0.50 modal |
status | Lifecycle state |
The extractor is precision-tuned, and returns nothing for:
"Should I send the report?""If we have time, I could send it""I sent the report yesterday""John said he would send it by Friday""I will handle that soon" (extracted at 0.85, no deadline)This bias is measured, not guessed: in COGEXT Research 01 only 1 of 120 published agent outputs contained anything a rules-based extractor could recognise as a checkable commitment. Most agent output is narrative, tool traces or code.
Those live in the cloud layer at cogextai.com. The primitive is free and MIT licensed; the verification engine is the paid product.
Use the primitive if you want to experiment locally without signing up, you are building a prototype and do not need verification yet, or you want to embed commitment extraction in your own tooling.
Use the cloud if you need external verification (did the email actually send?), audit trails and receipts, or you are running agents in production.
extract_commitments() returns commitments in detected state. Nothing
is tracking them yet.
CogextLocal.add() stores them as open, because adding a commitment is the
act of starting to track it.deadline is populated on the top-level model and mirrored in
due_condition.deadline, so you never have to dig for the date. (The hosted
API currently leaves the top-level deadline null; this library does not
repeat that.)python -m venv venv && source venv/bin/activate
pip install -e ".[dev]"
pytest
python -m build
MIT © 2026 Yamin / THRYVIX
list, get, and stats no longer create ~/.cogext/ or the SQLite
schema on a clean machine. Read-only commands are now side-effect free.CogextLocal(...) can be constructed on a read-only filesystem.cogext stats with nothing tracked prints 0 commitments tracked. instead of
a table of zeros.cogext CLI.Python
100.0%