Personal Liquidity
English · 简体中文 · 日本語 · Español · Português (Brasil)
Quick start · AI interface · FAQ · Privacy · AGPL-3.0-only
Personal Liquidity answers a practical question: given the cash, debts, obligations, and uncertain events you know about, what does your available liquidity look like over time?
It is a local-first forecasting engine for people with uneven income, upcoming payments, debt pressure, financing choices, or decisions that do not fit a simple monthly budget. A capable AI agent can turn ordinary language, screenshots, spreadsheets, PDFs, or pasted notes into candidate facts; deterministic Python code validates those facts and performs the calculations.
You provide the financial facts. Personal Liquidity does not connect to a bank automatically, and its results are planning information rather than financial advice.
Install
uv tool install personal-liquidity
# or: pipx install personal-liquidity
personal-liquidity capabilities
The package supports Python 3.11–3.13 and has no third-party runtime dependencies. Commands work from any directory; relative --state-dir paths belong to your current working directory.
Start by giving the URL to an AI agent
Paste this prompt into Codex or another agent that can read files and run Python:
Open https://github.com/squarepots/personal-liquidity and help me understand my liquidity. Clone it if needed, read AGENTS.md and docs/AI-INTERFACE.md, install the published CLI with `uv tool install personal-liquidity`, and begin with `capabilities` and the bundled `@demo` synthetic state. Do not create private state or ingest real financial data until I confirm.
The agent's first two commands are:
personal-liquidity capabilities
personal-liquidity forecast --state-dir @demo --through 2035-02-20
The bundled @demo state is entirely synthetic and read-only. It gives the agent a safe way to learn the product and explain the result before either of you handles personal data.
What it helps you answer
- When does the known cash path reach its lowest point?
- Will available liquidity stay above zero or a chosen cash floor through a date?
- Which upcoming debts, obligations, card payments, and recurring events drive the result?
- Which facts are confirmed, estimated, missing, or contradictory?
- How does a delayed income, one-time payment, card draw, or financing choice change the path?
- Which of several explicitly supplied scenarios best satisfies your constraints?
- How did the current result change from a saved checkpoint, and how did forecast compare with actual state?
How the model stays financially conservative
- Ordinary unused card headroom is not treated as withdrawable cash unless cash-out capacity is known.
- Available-but-undrawn financing is capacity, not current debt or cash.
- Drawn financing creates debt and repayment effects; its cash proceeds enter liquidity exactly once.
- Borrowed liquidity is kept separate from owned wealth.
- Estimated and expected inputs remain visible.
- Possible events stay outside the base forecast until used in a scenario.
The deterministic engine, rather than conversational prose, owns these calculations.
From demo to your own local state
After you decide to use the product, the agent can initialize an ignored local state directory:
personal-liquidity init --state-dir private
personal-liquidity doctor --state-dir private
The agent then:
- extracts candidate facts from the easiest form you have;
- inspects existing canonical state;
- identifies newer, stale, duplicate, missing, or conflicting facts;
- runs
preview-update; - applies only a valid real update;
- recomputes
doctor,status,forecast, or a hypotheticalscenario; - explains the result and its uncertainty in plain language.
Screenshots, XLSX files, PDFs, and natural language are interpreted by the host AI runtime. The Python entrypoint receives normalized JSON operation payloads and maintains canonical CSV/JSON state. Capability discovery exposes each operation's required arguments, schema paths, mutation flag, and effects.
Reading a result
data_completenessdescribes the source facts:complete,estimated, orincomplete.forecast_readinessdescribes the projected path.readinessis the compatibility alias for the relevant canonical field.survives_horizon: nullmeans a material blocker prevents a supported conclusion.- Recurring forecast events retain
source: recurring.csv. - Scenario results state
canonical_state_mutated: false.
The engine reports uncertainty instead of replacing missing facts with optimistic assumptions.
Machine operations
personal-liquidity is the canonical public CLI and capability owner. python personal_liquidity.py remains a source-checkout compatibility entry point.
- inspect:
capabilities,doctor,status,timeline,forecast; - update real state:
preview-update, thenapply-update; - explore hypotheticals:
scenario,compare,optimize; - track change over time:
checkpoint,diff,reconcile; - create local state:
init.
Success returns JSON with exit code 0. Invalid input, an invalid preview, or a failed doctor result returns JSON with a nonzero exit code so agents and automation can rely on both the payload and process status.
Privacy
Canonical state is plaintext local CSV, JSON, and JSONL under the directory you select. The usual private/ location is ignored by Git, but ignore rules are not encryption, access control, backup isolation, or secure deletion. Protect the directory with operating-system permissions, disk protection, and a deliberate backup policy.
The deterministic engine does not upload state. A cloud AI runtime may receive prompts, screenshots, spreadsheets, PDFs, pasted text, tool arguments, and results while normalizing the input. Use an offline runtime when those materials must remain on your machine.
Normal modeling does not require full account/card numbers, CVV, PIN, bank passwords, authentication tokens, or identity documents. Use synthetic values in every public issue and pull request. See Privacy and Local private state.
Development
Requirements: Python 3.11, 3.12, or 3.13; there are no third-party runtime dependencies.
python -m unittest discover -s tests -v
python scripts/audit_public_tree.py .
uv build --no-sources
See Contributing, Security, and Releasing.
Personal Liquidity is licensed under AGPL-3.0-only.
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 personal_liquidity-0.2.0.tar.gz.
File metadata
- Download URL: personal_liquidity-0.2.0.tar.gz
- Upload date:
- Size: 60.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
96cc5a834077a563a970142208de7aeccc81afabddff217cf27950f4f339cfdf
|
|
| MD5 |
b771d344dd9ef9137356cd1ba09635ff
|
|
| BLAKE2b-256 |
fa96f8b0378d366b84cf966b64ff4da8f5dc2dda0188147be550018b82e05571
|
Provenance
The following attestation bundles were made for personal_liquidity-0.2.0.tar.gz:
Publisher:
release.yml on squarepots/personal-liquidity
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
personal_liquidity-0.2.0.tar.gz -
Subject digest:
96cc5a834077a563a970142208de7aeccc81afabddff217cf27950f4f339cfdf - Sigstore transparency entry: 2580008644
- Sigstore integration time:
-
Permalink:
squarepots/personal-liquidity@96d81c14f40913df49ba64482775e5b4428e432b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/squarepots
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@96d81c14f40913df49ba64482775e5b4428e432b -
Trigger Event:
push
-
Statement type:
File details
Details for the file personal_liquidity-0.2.0-py3-none-any.whl.
File metadata
- Download URL: personal_liquidity-0.2.0-py3-none-any.whl
- Upload date:
- Size: 65.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9b7c87a488f184c58f96c7e9a1dd60c702147e3a6198f41ff0eb6e208ff5f224
|
|
| MD5 |
8cef6039ad7e9c1c11a77d24150e7da6
|
|
| BLAKE2b-256 |
075750f3753cb62eb523605bd52327991e90bf3946029f6159334f70010a07a2
|
Provenance
The following attestation bundles were made for personal_liquidity-0.2.0-py3-none-any.whl:
Publisher:
release.yml on squarepots/personal-liquidity
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
personal_liquidity-0.2.0-py3-none-any.whl -
Subject digest:
9b7c87a488f184c58f96c7e9a1dd60c702147e3a6198f41ff0eb6e208ff5f224 - Sigstore transparency entry: 2580008651
- Sigstore integration time:
-
Permalink:
squarepots/personal-liquidity@96d81c14f40913df49ba64482775e5b4428e432b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/squarepots
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@96d81c14f40913df49ba64482775e5b4428e432b -
Trigger Event:
push
-
Statement type: