Life Manager
August 12, 2026 Β· View on GitHub
Life Manager manages your body, mind, and money. It is a personal manager that turns goals into completed real-world actions. It acts within delegated boundaries, verifies what happened, and reports the result in plain language with evidence in Telegram.
| Organ | What Life Manager manages |
|---|---|
| Daily | Calendar, event and accelerator applications, job applications, priorities, and follow-through |
| Physical / Mental | Routines, wellbeing, and continuity of care |
| Financial | Net worth, cash flow, spending, income opportunities, and risk-managed investing |
Open Life Manager Β· Start in Telegram Β· View the source
Start locally and keep your data on your machine; move to the web/cloud service when you want an always-on manager. Both surfaces use the same core, evidence ledger, and human-readable reporting contract. Life Manager never guarantees wealth or investment returns, and it never reports an attempted action as completed without a receipt.
Life Manager is the product. Anicca is the company name only when a form explicitly asks for it.
π ζ₯ζ¬θͺη README γ―γγ‘γ β
Repository SSOT: this repository, Daisuke134/life-manager, is the only Life Manager code, spec, release, workflow, and deployment source. Daisuke134/life-manager-v0 is a read-only migration source until its required-code and runtime-reference counts reach zero. The current ordered execution plan and remaining work are maintained in docs/superpowers/specs/2026-08-01-dais-life-manager-five-phase-execution-spec.md; repository consolidation history remains in docs/superpowers/specs/2026-07-19-anicca-one-repo-consolidation-spec.md.
Quick start
Use it β cloud (nothing to install)
Start in Telegram, or open the
web app. The always-on service runs the scheduler, the connectors, and the
authenticated /panel; you talk to it in Telegram and it reports back there with receipts.
Run it yourself β local (your machine holds the data)
Requires Docker. The local stack is Postgres + an object store + the API, scheduler, and worker β the same core the cloud runs.
git clone https://github.com/Daisuke134/life-manager ~/life-manager && cd ~/life-manager
./scripts/local-up.sh
That is the whole thing. It writes deploy/local/.env if you don't have one (generating a password for the
local object store instead of shipping one), brings up postgres Β· object store Β· api Β· scheduler Β· worker, and
waits until every service reports healthy before printing anything β so "it started" means it can serve, not
just that containers exist. First run builds the image and takes a few minutes.
./scripts/local-up.sh status what is running
./scripts/local-up.sh logs follow the logs
./scripts/local-up.sh down stop it (your data survives)
The API listens on http://localhost:18788 and the worker exposes health on :18790 (both overridable in
deploy/local/.env). Your data stays in the local Postgres and object store β nothing is shipped anywhere by
running this.
Secrets are referenced, never inlined. Jobs carry secret://β¦ references and resolve them from the local
keychain or a tenant vault; see apps/life-manager/.env.example for the shape
(TELEGRAM_BOT_TOKEN_REF, POSTIZ_ACCESS_TOKEN_REF, REVENUECAT_API_KEY_REF, β¦). Connect your own Telegram bot
token this way to talk to a local instance.
Not what you wanted?
If you came here for the self-funded agent β the wallet-holding loop that earns its own compute β that is a
different thing and it lives in docs/agent-economy.md. It shares this repository and
this core, but it is not the product described above.
One product, two execution surfaces
Life Manager is one product in one repository. βLocal Life Managerβ and the web app are not separate products or repositories; they are two execution surfaces powered by the same core, capabilities, and state contracts.
LIFE MANAGER
one product Β· one repository
β
βββββββββββββββββββββ΄ββββββββββββββββββββ
β β
LOCAL / SELF-HOSTED WEB / CLOUD
deploy/local/compose.yaml apps/landing
β onboarding UI
βΌ β
apps/life-manager βΌ
api Β· scheduler Β· worker apps/life-manager
β Telegram Β· voice
βΌ scheduler Β· /panel
postgres Β· object store β
(your machine) βΌ
β user-scoped services
βββββββββββββββββββββ¬ββββββββββββββββββββ
β
shared economy and infrastructure
runtime/loop Β· runtime/compute-proxy Β· services/x402-*
| Path | Role | What it is not |
|---|---|---|
apps/life-manager/ | The product core: Telegram, scheduling, calls, authenticated /panel, billing, and user workflows. Runs both locally (compose) and in the cloud (Railway) | Not the whole repository |
deploy/local/ | The local execution surface β compose stack, ports, local-only credentials | Not a separate βlocal editionβ product |
apps/landing/ | The Life Manager onboarding web subset | Not the old multi-product Anicca website |
runtime/loop/, install.sh, start-local.sh | The self-funded agent loop β see docs/agent-economy.md | Not how you start Life Manager |
runtime/compute-proxy/, services/ | Self-pay inference and x402 settlement/API infrastructure | Not user-facing apps |
skills/ | Shared capabilities used by local and cloud execution | Not independent products |
apps/job-search-loop/, control-room/, adapters/ | Supporting operations, fleet documentation, and integrations | Not another Life Manager codebase |
docs/, specs/ | Current SSOT, evidence, and retained architecture history | Historical files are not automatically current authority |
Some internal package names, environment variables, service labels, and older documents still use anicca. In this repository, Anicca is the company/technical namespace; Life Manager is the product. A remaining anicca identifier does not imply a second product or another canonical repository.
Connector agent β how event applications work
Connector is the local Life Manager agent that searches eight Tokyo event railsβLuma, Connpass, Peatix, Meetup, Doorkeeper, Eventbrite, TECH PLAY, and KokuchProβremoves unsafe or conflicting candidates, applies through one owned browser page, verifies the provider result, and reports an evidence-backed outcome in Telegram. It is not a blind form-filler: a click is never treated as success by itself.
flowchart LR
TRIGGER["Daily launchd trigger<br/>or supervised launchd kickstart"] --> ENTRY["run.sh<br/>single lock + heartbeat"]
ENTRY --> CAL["Google Calendar<br/>14-day busy inventory"]
CAL --> RAIL["One CloakBrowser target<br/>one owned page"]
subgraph LOOP["Forward-only provider loop"]
PROVIDERS["Luma β Connpass β Peatix β Meetup<br/>β Doorkeeper β Eventbrite β TECH PLAY β KokuchPro"]
DISCOVER["Provider discovery<br/>privacy-safe count audit"]
GATE{"Free Β· open Β· Tokyo Β· in window<br/>and Calendar-safe?"}
NEXT["Next candidate<br/>or next provider"]
PROVIDERS --> DISCOVER --> GATE
GATE -->|No| NEXT --> PROVIDERS
end
RAIL --> PROVIDERS
GATE -->|Yes| NAV["Navigate on the same page"]
NAV --> PRE{"Official parent / child-frame readback<br/>already registered?"}
PRE -->|Yes| SUPPORT
PRE -->|No| CACHE["Verified action cache"]
CACHE -->|registered / pending| SUPPORT
CACHE -->|not completed| DIRECT["Provider script-first action"]
DIRECT -->|completed| POST
DIRECT -->|effect unknown| CIRCUIT
DIRECT -->|safe not completed| HARNESS["Bounded Browser Harness<br/>observe β propose β operate"]
HARNESS -->|completed| POST{"Official parent / child-frame readback<br/>registered or pending?"}
HARNESS -->|safe failure / auth required| NEXT
POST -->|No / safe failure| NEXT
POST -->|Yes| SUPPORT
subgraph EVIDENCE["External proof β agent self-report is insufficient"]
SUPPORT{"Evidence adapter<br/>available?"}
PROVE["Provider receipt / state"] --> GCAL["Idempotent Calendar write<br/>plus independent readback"]
GCAL --> PNG["Privacy-safe screenshot<br/>and SHA-256"]
PNG --> TG["Telegram message + photo<br/>positive provider IDs"]
TG --> BUNDLE["Durable applied_bundle"]
end
SUPPORT -->|Yes| PROVE
SUPPORT -->|No| EVIDPENDING["Acceptance pending<br/>no applied_bundle claim"]
NEXT -->|All exhausted| NOEFFECT["completed_no_effect<br/>healthy external write 0"]
HARNESS -->|effect unknown| CIRCUIT["circuit_open<br/>effect unknown Β· evidence failure Β· safety threshold"]
EVIDPENDING --> CIRCUIT
BUNDLE --> REPORT["Durable wake report"]
NOEFFECT --> REPORT
CIRCUIT --> REPORT
REPORT --> CLEAN["Release owned target and lock<br/>leave unrelated tabs untouched"]
CLEAN --> TERMINAL{"Terminal result"}
TERMINAL -->|applied_bundle / completed_no_effect| HEALTHY["worker_finished<br/>process exit 0"]
TERMINAL -->|circuit_open| FAILED["worker_failed<br/>non-zero exit"]
ENTRY -. startup / contract error .-> FAILED
stateDiagram-v2
[*] --> Discovered
Discovered --> Skipped: paid / closed / out of window / conflict
Discovered --> Absent: eligible and not registered
Discovered --> Registered: official pre-readback
Absent --> Registered: one verified final effect
Absent --> EffectUnknown: mutation happened, readback not proven
Registered --> EvidenceSupport
EvidenceSupport --> AppliedBundle: adapter + provider + Calendar + artifact + Telegram verified
EvidenceSupport --> AcceptancePending: adapter or live bundle unavailable
Skipped --> ReportedNoEffect
EffectUnknown --> CircuitOpen
AcceptancePending --> CircuitOpen
AppliedBundle --> Cleaned
ReportedNoEffect --> Cleaned
CircuitOpen --> Cleaned
Cleaned --> [*]
| Provider | Production rail | Acceptance status |
|---|---|---|
| Luma | Discovery, action, readback, evidence | Live bundle proven |
| Connpass | Discovery, action, readback, evidence | Live bundle proven |
| Peatix | Discovery, action, readback, evidence | Live bundle proven |
| Meetup | Discovery, action, readback, evidence | Connected; current strict candidates conflict with Calendar |
| Doorkeeper | Discovery, action, readback, evidence | Connected; all four current eligible candidates conflict with Calendar, so live bundle remains pending |
| Eventbrite | Three-page discovery, ticket/attendee/final action, child-frame readback, evidence | Connected; current production inventory has no eligible candidate, so external write is correctly zero |
| TECH PLAY | RSS/detail discovery, input/review/final action, registered readback, evidence | Connected; all three current eligible candidates conflict with Calendar, so live bundle remains pending |
| KokuchPro | Official listing/detail discovery, strict free/Tokyo/open gate, entry/login readback, bounded Harness | Connected; current official first page has no event inside the 14-day window. Login is classified as auth_required and safely hands off without private-value or retry effects |
Safety invariants: one schedule owner, one browser target per wake, final mutation at most once, effect_unknown means no retry, private form values never enter action history, and only an applied_bundle proves a new completed application. completed_no_effect is a healthy process result with zero new external writes. Current evidence and remaining gates live in the Connector execution SSOT.
Current canonical acceptance: PR #1936 established the production baseline at 4f1960592, and follow-up PR #1947 merged the final documentation plus provider-specific fallback budget fix at f1a13b2e7. The post-baseline production wake traversed all seven configured providers and KokuchPro on one owned page, reused existing bundles without a duplicate external effect, delivered a positive Telegram receipt, restored the exact unrelated browser pages, released the lock, and exited zero. Generic providers now fail closed above the Browser Harness 10-step limit while TECH PLAY retains its reviewed 15-step flow. The only remaining event-rail work is conditional: Meetup, Doorkeeper, Eventbrite, and TECH PLAY need a future Calendar-safe live candidate before their first real applied_bundle can be proven.
What's real today (honest)
| Capability | Status |
|---|---|
Local stack (deploy/local/compose.yaml) β postgres Β· object store Β· api Β· scheduler Β· worker | Runs β the five services come up healthy and stay up (observed running for days on the maintainer's machine). |
Cloud service (apps/life-manager, node server.js on Railway) | Deployed β the scheduler and API are the same code the local stack runs. |
| Telegram reporting with receipts | Live β every report carries a message id, and a send that fails is not recorded as sent. |
Calendar, connectors, coverage (lib/calendar-*, lib/connector-*) | Implemented, coverage still moving β per-connector state and gaps are tracked in the execution spec rather than claimed here. |
| Financial organ (net worth, cash flow, payouts, ledgers) | Partial β the ledger and payout jobs exist; their current health is tracked in the execution spec. Nothing here is an investment guarantee. |
| The self-funded agent economy | Separate track β status and on-chain evidence in docs/agent-economy.md. |
North Star (immutable)
Reduce suffering.
No killing (PΔαΉΔtipΔtΔ veramaαΉΔ«).
These two lines are SHA-256 hash-pinned and cannot be changed by any skill, self-edit loop, or PR.
Links
- Product: https://aniccaai.com/lm Β· Telegram
- Live dashboard (auto-updated): https://aniccaai.com/dashboard
- The agent economy underneath:
docs/agent-economy.md - Repository (whole product): https://github.com/Daisuke134/life-manager