{"id":34095214,"url":"https://github.com/danielonsecurity/utms-core","last_synced_at":"2026-03-12T19:15:32.140Z","repository":{"id":268179091,"uuid":"902431420","full_name":"danielonsecurity/utms-core","owner":"danielonsecurity","description":"Universal Time Modeling System - Rethinking Time","archived":false,"fork":false,"pushed_at":"2025-08-28T14:46:17.000Z","size":27527,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-14T09:14:02.766Z","etag":null,"topics":["flexible","hy","hylang","lisp","python","research","science","time","time-management","time-measurement","timekeeping","timetracking","universal"],"latest_commit_sha":null,"homepage":"https://utms.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danielonsecurity.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-12-12T14:54:56.000Z","updated_at":"2025-11-22T19:32:04.000Z","dependencies_parsed_at":null,"dependency_job_id":"8e228fe4-cd9e-4954-8480-b08c5dc926da","html_url":"https://github.com/danielonsecurity/utms-core","commit_stats":null,"previous_names":["danielonsecurity/utms","danielonsecurity/utms-core"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/danielonsecurity/utms-core","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielonsecurity%2Futms-core","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielonsecurity%2Futms-core/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielonsecurity%2Futms-core/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielonsecurity%2Futms-core/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danielonsecurity","download_url":"https://codeload.github.com/danielonsecurity/utms-core/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielonsecurity%2Futms-core/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30439658,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T14:34:45.044Z","status":"ssl_error","status_checked_at":"2026-03-12T14:09:33.793Z","response_time":114,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flexible","hy","hylang","lisp","python","research","science","time","time-management","time-measurement","timekeeping","timetracking","universal"],"created_at":"2025-12-14T15:09:39.396Z","updated_at":"2026-03-12T19:15:32.129Z","avatar_url":"https://github.com/danielonsecurity.png","language":"Python","readme":"# UTMS-Core — Universal Time Modeling System\n\n\u003e **Programmable Time. Semantically Rich. Model-Driven.**\n\n**UTMS-Core** is the foundation of the **Universal Time Modeling System**, a programmable framework for modeling, tracking, and reasoning about time. It allows you to define **semantic**, **relative**, and **conditionally-resolved** time entities using a Lisp-based language (**Hy**).\n\nUTMS is not a calendar, clock, or task manager. It's a **temporal substrate**: time as programmable code.\n\n\n![UTMS Web UI overview](docs/images/habits-ui.png)\n![Arduino Prototype](docs/images/arduino-setup.jpg)\n\n\n## 🚀 What UTMS Can Do\n\nUTMS is not just a scheduler—it’s a programmable time engine. You define *when*, *why*, and *how* things happen, and UTMS orchestrates your life accordingly. Here's what’s already possible:\n\n| Use Case                         | Description                                                                                                                                                    |\n|----------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| ⌨️ Arduino-driven task execution  | Tap a key on your custom keypad before sleep, and UTMS tracks the event, suspends your laptop, logs the interruption, and timestamps it semantically.          |\n| 🎶 Focus automation              | Start coding on a `#utms` entity, and UTMS automatically opens Emacs, starts a focus playlist in your music player, and logs duration for later review.        |\n| 📚 Semantic time logging         | Log \"break\", \"interruption\", or \"deep work\" with one command. UTMS records exact time, context, and activation reason—without needing to predefine categories. |\n| 🕸️ Chain reactions                | A single event (e.g., \"wake up\") can trigger a chain: stop sleep logging, start morning routine, preload calendar, run mood check-in, notify assistant agent.  |\n| 🧠 Reflective feedback           | At day’s end, UTMS can auto-prompt you with reflection questions based on logged entities: \"Why was your coding block interrupted at 15:04?\"                   |\n| ⚙️ Custom automation              | Define arbitrary behavior in Hy: \"If I'm coding and it's raining, and it's before 5pm, auto-delay my walking routine and update calendar\".                     |\n| 🔗 Multi-modal interaction       | Use CLI, web UI, Arduino devices, or even dynamic time prompts to interact. All components sync via the same programmable time core.                           |\n\nEvery \"thing\" you care about in time becomes a **first-class entity**: an event, an anchor, a habit, a measurement, a phase, a condition. Each entity can store logic, activation conditions, relative timing, and HyLisp expressions.\n\n\u003e 🧠 “Time” in UTMS isn’t a number. It’s an intelligent, contextual fabric for living.\n\n\n---\n\n## ⚠️ Status: Experimental\n\n- This repo contains the **core engine**, not a standalone tool.\n- The CLI is legacy. UTMS is now modular: Web UI, API, hardware integrations exist in separate repositories.\n- Installation is non-trivial and not documented. Intended for developers comfortable with Python, Hy, and reading source code.\n\n---\n\n## 🔍 What Is UTMS?\n\nUTMS reimagines time as something you **define**, **query**, and **compose**.\n\nInstead of tracking what happened, you model why and how things relate across time:\n\n- \"Breakfast = 30 minutes after wakeup\"\n- \"Mark task as done if any subtasks are started\"\n- \"Trigger reminder only if it’s not raining\"\n\nTime becomes a **semantic object graph**, not a flat schedule.\n\n---\n\n## 🧠 Core Concepts\n\n### 🧱 Time Entities\n\nUTMS models time through composable entities:\n- `Task` — events with optional conditions\n- `Anchor` — reference points (e.g. “sunrise”, “boot time”)\n- `Variable` — dynamic or fixed data\n- `Condition` — logical expressions for activation/resolution\n- `Metric` — anything numeric tracked over time\n- `Pattern` — recurring time blocks (e.g., Pomodoro, lunar cycles)\n\nAll are defined in **Hy**, a Lisp dialect embedded in Python. Note\nthat the user doesn't have to write all this code, in fact the user\nshould never have to write code unless they want to, all of this code\nis automatically generated from the frontend.\n\nDefine a new entity type TASK:\n\n```hy\n(def-entity \"TASK\" entity-type\n  (title {:type \"string\" :label \"Title\" :required True})\n  (description {:type \"string\" :label \"Description\" :default_value \"\"})\n  (context {:type \"entity_reference\" :label \"Context\" :reference_entity_type \"context\"})\n  (priority {:type \"integer\" :label \"Priority\" :default_value 0})\n  (status {:type \"string\" :label \"Status\" :default_value \"pending\"})\n  (deadline {:type \"datetime\" :label \"Deadline\" :default_value None})\n  (creation_date {:type \"datetime\" :label \"Created\" :default_value current-time})\n  (occurrences {:type \"list\" :item_schema_type \"OCCURRENCE\"})\n  (active-occurrence-start-time {:type \"datetime\"})\n  (exclusive_resource_claims {:type \"list\" :item_type \"string\" :label \"Exclusive Resource Claims\" :default_value []})\n  (on-start-hook {:type \"code\" :label \"Code to run on start\"})\n  (on-end-hook {:type \"code\" :label \"Code to run on end\"})\n)\n```\n\nDefine a new TASK:\n```hy\n(def-task \"UTMS coding\"\n  (active-occurrence-start-time None)\n  (context (entity-ref \"context\" \"default\" \"UTMS\"))\n  (creation_date None)\n  (deadline None)\n  (description None)\n  (exclusive_resource_claims [\"USER_PRIMARY_FOCUS\"])\n  (occurrences [{:start_time (datetime 2025 6 13 17 37 32 14816) :end_time (datetime 2025 6 13 17 37 36 346748) :notes \"\" :metadata {}}])\n  (on-start-hook (do (shell \"notify-send 'working on UTMS'\") (shell \"/home/daniel/bin/ytmusic.py\" :bg True)))\n  (priority 0)\n  (status \"\")\n  (title \"UTMS coding\")\n)\n```\n\n\n# 🧬 Programmable Time\nUTMS treats time like a data structure:\n - Relative: \"15m after X\", \"if condition Y\"\n - Composable: tasks depend on anchors, variables, sensors\n - Contextual: multiple timelines (personal, project, cosmic)\n - Meta-Temporal: models can operate over simulations or nested timelines\n\n# 🛠️ Project Structure\n```\nutms-core/\n├── core/            # Time engine (Hy DSL, units, formats, models)\n├── cli/             # Legacy CLI (shell, commands, clock)\n├── web/             # Web API + templates (FastAPI, Jinja)\n├── utils/           # Display, filesystem, parsing, hy helpers\n├── utms_types/      # Typed protocols and domain models\n├── resources/       # Default entities, patterns, prompts\n```\n\n# 🧰 Features\n\n| Feature                           | Status         |\n|-----------------------------------|----------------|\n| Hy-based time DSL                 | ✅ Stable      |\n| Arbitrary time units              | ✅ Working     |\n| Relative + absolute time modeling | ✅ Working     |\n| Conditional activation            | ✅ Working     |\n| Persistent entity storage         | ✅ Partial     |\n| Web API                           | ✅ In progress |\n| Web UI                            | 🟡 Early dev   |\n| Arduino integration               | 🟡 Prototyped  |\n| Entity macros                     | 🔜 Planned     |\n| Probabilistic durations           | 🔜 Planned     |\n| Multi-threaded timelines          | 🔜 Planned     |\n\n\n# 📦 Installation\n⚠️ Currently only usable from source. No pip/conda install.\n\nDetailed installation instructions will be added later on.\n\n# 🌐 Web API + UI\nThis repo includes a FastAPI backend.\n\n```\npython utms/web/main.py\n```\n\nFrontend development is moving to [utms-frontend](https://github.com/danielonsecurity/utms-frontend).\n\n# 🤖 External Integrations\n[utms-arduino](https://github.com/danielonsecurity/utms-arduino): LCD display, sensors, input devices\n\nHardware triggers: time-driven events from sensors, physical anchors\n\nAI-assist: optional resolution help via LLMs (non-core)\n\n# 🧭 Vision\nUTMS is designed to be a universal protocol for time modeling.\nIt enables:\n\n - Personal tracking beyond schedules\n - Simulation of causal time chains\n - Emergent task activation\n - Interdisciplinary time modeling (scientific, phenomenological, project-based)\n\nIt offers a programmable substrate to build new apps, agents, devices,\nand models—where time is the first-class citizen.\n\n“Calendars are for dates.\nUTMS is for everything else.”\n\n# 🤝 Contributing\nThis project is pre-alpha and still evolving.\n\nWays to help:\n\n- Try writing your own entities and patterns\n- Help build the web UI\n- Extend the plugin system\n- Suggest ideas in issues\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielonsecurity%2Futms-core","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanielonsecurity%2Futms-core","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielonsecurity%2Futms-core/lists"}