Install
openclaw skills install @denniscriss/ibd-companionAI-assisted, local-first IBD recordkeeping for Crohn's disease and ulcerative colitis.
openclaw skills install @denniscriss/ibd-companionUse this skill only for the user's private IBD tracking, including Crohn's disease and ulcerative colitis. The SQLite database is the sole source of truth. Keep health data out of Git, MEMORY.md, ordinary notes, Notion, and other channels.
Base tracker: scripts/ibd_db.py.
Care-context extension: scripts/ibd_care.py.
Both use ${IBD_DB_PATH:-${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/private/ibd/ibd.sqlite3}. Opening through ibd_care.py ensures the current private database structure is available without copying medical facts.
On first use, either script creates an empty private database at that path if it does not already exist. Creating an empty database does not authorize recording medical facts or creating external reminders.
When a user first asks to start or set up IBD tracking, run ibd_care.py overview to inspect the private database. If profile, treatment plan, review plan, confirmed baseline, and symptom logs are all absent, offer an optional stepwise setup; do not require every step.
Offer one item at a time, always allowing fill now / skip for now / return later:
injections records.If only some setup elements are absent, offer only those. If the user only asks to record a symptom, checkup, infusion, or report, complete that request without forcing onboarding; mention missing setup only afterwards when relevant. Never infer a treatment schedule, review cadence, diagnosis date, baseline, affected location, or clinician conclusion from historical records. At the end of setup, use current-summary or overview to show configured and still-optional areas.
disease_profile stores confirmed disease type, earliest symptom date, an optional link to the actual diagnosis checkups record, and sparse timeless notes. It does not store current status, affected locations, a standalone diagnosis date, treatment state, symptom-baseline content, or dated medical events. Procedures, admissions, complications, and other dated facts belong in checkups/review history.injections stores infusion facts. A blood draw is one checkups(kind='lab') row, optionally linked to the injection it monitors. Its values live once in checkup_results.review_episodes is one diagnosis/large-review parent. review_components links its lab, endoscopy, CT, MRI/MRE, pathology, visit, or assessment checkups. A lab can simultaneously belong to an injection and a review without copying the lab or its results.checkup_results; versioned narrative reports and private attachment references belong in checkup_reports.treatment_plans generates injections and optional injection-monitoring labs; review_plans generates calendar-month large-review parents. There is no parallel followup plan layer. A one-off visit or test is a direct checkups fact, while a multi-test review uses the review hierarchy.checkup_assessments is tied to a completed assessment-bearing checkup, which can be a component of a review. It is never generated from metrics or symptoms.symptom_baselines stores draft, candidate, confirmed, and historical versions. Only one explicitly confirmed baseline is enabled; it must never be silently re-learned from recent logs.ibd_care.py set-profile only for disease type, earliest symptom date, diagnosis-checkup link, and small timeless notes. A dated procedure, admission, complication, symptom episode, or clinician conclusion must be recorded in its dated medical record and must not be duplicated in profile notes.current-summary resolves the unique explicitly confirmed row from symptom_baselines dynamically.checkups record first, then link it with --diagnosis-checkup-id.checkups record. A large review itself is a review_episodes parent, not a checkups row.review_components(role='lab') link. Never copy its values into a second lab row.schedule-review, then link its actual tests using link-review-component. Use review-detail to read the parent and every linked child.checkup_results. Use report-provided values, units, reference bounds, and abnormal flags only. Never fill a missing range or flag from a generic threshold.add-checkup-report for endoscopy, CT, MRI/MRE, pathology, visit, or other report wording. Preserve original wording; optional findings/impression are transcriptions, not model-generated interpretations. An attachment reference must remain in private storage.record-checkup-assessment on the completed assessment-bearing visit/checkup only when the clinician's conclusion or the user's explicit confirmed transcription supports it. Link that checkup to the review using role assessment or visit.ibd_db.py metric-list and use an existing definition when it matches the same measurement.ibd_db.py metric-add using a stable lowercase snake_case code.lab checkup for the source draw, then record the value with add-result. Preserve the report's actual unit, reference range, and abnormal flag; a default unit is only a prompt.metric-deactivate to stop new entries while retaining historical results.create-manual-baseline; it starts as draft.generate-baseline-candidate can be run only on an explicitly requested date range. It requires at least seven days logged as usual or explicit return-to-usual and stores the dates/method as evidence.confirm-baseline. The user must explicitly confirm it before it becomes the enabled baseline.generate-injections or generate-reviews through a clearly stated planning horizon after the user has created or changed a plan. Preview the generated events to the user; creating database rows is permitted only as part of an explicitly requested plan setup or generation.lab checkup. It may create pending database reminder rows; it never creates an external Apple Reminder without explicit approval.review_plans for multi-test large reviews. The interval is in calendar months, not approximate day counts. Separate bounded plans may represent phases such as an explicitly confirmed first-year cadence and a later annual cadence.generate-reviews creates review parents and internal review reminders only. It does not invent which tests will be required; add/link component tests only from an explicit plan or actual record.Continue using ibd_db.py record-symptom, daily-summary, factor-term-add, and record-factor.
day_total only when cumulative as of the observation, or increment only when newly added after prior entries. Ask when ambiguous.back_to_usual=1 only when a return to usual/baseline is explicit. Improvement alone remains NULL.raw_label; do not merge distinct factors without clear meaning.period-summary --analysis may describe days explicitly recorded as usual, but those descriptive values are not a confirmed baseline and must not update one.reminder-link, and update the internal reminder status through reminder-status. Do not create a cron job or external reminder merely because a planned injection/checkup exists.ibd_care.py current-summary: thin profile/diagnosis link, latest confirmed checkup assessment, latest completed review, active treatment plan, and confirmed symptom baseline.ibd_care.py overview when review episodes/plans, treatment occurrence provenance, and pending baseline drafts/candidates are also needed.ibd_care.py review-detail --id <review-id> for one review's linked checks, atomic results, current reports, and current confirmed assessments.ibd_db.py period-summary --analysis.In a natural-language summary: