# LifeOS > A personal secretary for life admin, built from strands: small definitions that turn the rules of one > corner of life (a car's MOT, a pet's worming, a darts league, a book club) into dated tasks, events, > people, money and email. Two kinds share one catalogue: declarative strands (JSON anyone or any LLM can > write) and native strands (shipped code: the League and the Club). ## Write a strand - [Developer guide (markdown)](https://somethinger.com/developers.md): every capability with an example, publishing, and the line between declarative and native strands. - [Strand contract (JSON, v1.1.0)](https://somethinger.com/developers/strand-contract.json): the full vocabulary plus a skeleton with every optional key — validate your output against it. - [Developer guide (HTML)](https://somethinger.com/developers) ## Look around - [Find a league](https://somethinger.com/leagues): public league pages — tables, fixtures, results. - [Strand catalogue](https://somethinger.com/strands): official and native strands (sign-in required to install). ## Rules of thumb for generated strands - Paths are `config.`, or `.` inside a forEach; text placeholders are `{{.}}`. - Dates are ISO YYYY-MM-DD; money is integer pence; every optional date rule needs a fallback. - Named functions (`{ "fn": ... }`) are planned, not yet accepted. Native strands are not user-submittable.