{"id":26492949,"url":"https://github.com/nomicode/next","last_synced_at":"2026-01-12T11:25:03.462Z","repository":{"id":205684758,"uuid":"16260346","full_name":"nomicode/next","owner":"nomicode","description":"Probabilistic task rotation system","archived":false,"fork":false,"pushed_at":"2023-11-05T22:31:31.000Z","size":6,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2023-11-06T00:25:16.300Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nomicode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2014-01-26T19:50:53.000Z","updated_at":"2023-11-06T00:25:17.721Z","dependencies_parsed_at":null,"dependency_job_id":"58b4fa8f-33cb-49d0-9263-3e725be916ed","html_url":"https://github.com/nomicode/next","commit_stats":null,"previous_names":["nomicode/next"],"tags_count":null,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nomicode%2Fnext","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nomicode%2Fnext/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nomicode%2Fnext/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nomicode%2Fnext/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nomicode","download_url":"https://codeload.github.com/nomicode/next/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244588112,"owners_count":20477260,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2025-03-20T09:37:35.283Z","updated_at":"2025-03-20T09:37:35.945Z","avatar_url":"https://github.com/nomicode.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"next\n====\n\n\"What should I do next?\"\n\nIs that a question you frequently ask yourself? Are you happy with the answers? Do you regularly make bad decisions about how to spend your time? Are there things that you know you should be working on, but you just keep overlooking? Do not worry, my friend. Help is at hand!\n\nConfigure this tool by writing an XML tree (yes, ugh, I know, but the data is heirarchical and XML is a great fit) that corresponds to the things you think you should be working on. (I'll add examples later, yo.) When you run this tool, it will filter the tree based on how you invoke it, and choose a single thing for you to work on. You can filter with xpath, or tags. The tree itself can be weighted!\n\nHere's an example decision tree:\n\n```\n\u003croot\u003e\n  \u003cafternoon\u003e\n    \u003coutside\u003e\n      \u003ceat-stuff tags=\"hungry\"\u003e\n      \u003cbike-ride\u003e\n      \u003cwalk\u003e\n    \u003c/outside\u003e\n    \u003cinside\u003e\n      \u003ceat-stuff tags=\"hungry\"\u003e\n      \u003cchat-with-friends/\u003e\n      \u003ccomputer-games weight=\"2\"/\u003e\n    \u003c/inside\u003e\n  \u003c/afternoon\u003e\n  \u003cevening\u003e\n    \u003ceat-stuff tags=\"hungry\"\u003e\n      \u003ceat-in/\u003e\n      \u003ceat-out/\u003e\n    \u003c/eat-stuff\u003e\n    \u003cmovie\u003e\n    \u003cwatch-tv/\u003e\n    \u003cchat-with-friends/\u003e\n    \u003ccomputer-games weight=\"2\"/\u003e    \n  \u003c/evening\u003e\n\u003c/root\u003e\n```\n\nThis is just an example. As you can see, I like chatting with friends, eating stuff, and playing computer games. (Obviously a bad example, as this is exactly the sort of stuff this tool was designed to help me avoid.) And I've chosen to order my activites by time of day. But you can choose any system you like. Perhaps you'd prefer to organise it by location, or context, or someething else!\n\n_@@ Remove the eating example. It doesn't make any sense to configure time for eating!_\n\nSome example queries:\n\n```\nnext.py //afternoon/inside\n```\n\nThis asks for a task based on the xpath selection of `afternoon/inside`. We'll have a 50% chance of playing computer games, and a 25% chance of eating stuff or chatting with friends.\n\nNote: elements were originally designed to encode context or groupings. So, for example, you might have one set of tasks that you want to pick from when you at at the office, and another when you at home. Or you might have one set on weekdays, and another on weekends.\n\nSimilarly, being able to group tasks into a heirarchy allows you to assign weights in a more isolated fashion. Perhaps on an evening, you have two primary focuses: input and ouput. (For example, reading blog posts v.s writing blog posts.) You could then say that you want to spend 60% of your time on output, and 40% of your time on input. But then _within_ those groupings, you can have more groupings, and assign weights to them without worring about how those weights effect weights in other parts of the tree.\n\n\n```\nnext.py //evening +hungry\n```\n\nThis asks for a task based on the xpath selection of `evening` matching the tags `hungry`. With our example configuration, we'll have a 50/50 chance of eating in or eating out.\n\nNote: tags were originally designed to encode mood or energy levels. So you can tag some tasks as being suited for a certain energy level. When you are in that mood, or have that energy, you can specify that when requesting a new task. In this way, while the system is probabilistic, the tasks assigned can be suited to your cognitive state.\n\n@@ This was originally written as a command for an IRC bot, so the command syntax is a little weird for a CLI tool. I plan to refactor this.\n\nSynax:\n\n```\nnext.py FLAGS XPATHS TAGS\n```\n\nFLAGS can be:\n\n```\n:stats\n```\n\nPrint outcome probability stats for your selection (helpful for debugging, so that you know your configuration is doing what you expect it to do!)\n\n```\n:tags\n```\n\nPrint the tags that apply to your selection (helpful for debugging your configuration, or just getting a sense for what's available)\n\nXPATHS can be:\n\n\n```\n/whatever\n```\n\nUse this to specify a part of your configuration tree. Can chain as many as you like. Only nodes that can be reached from parts of the tree you select will be available for selection\n\nTAGS can be:\n\n```\n+foo\n```\n\nRestrict selection to nodes that have the `foo` tag\n\n```\n-bar\n```\n\nRestrict selection to nodes that do not have the `bar` tag\n\n@@ These docs are incomplete and need improving!\n\nGeneral idea:\n\n- dishes out new activities\n- random weighted decision tree\n- .tree choose\n- .dm (dungeon master) (or does it stand for decision matrix? hehe)\n- random time table\n- random periods\n\nI don't like the current name and want to pick a new one.\n\nName ideas:\n\n- coin flip\n  - plenty of cultural currency (har har) in this idea already\n  - living your life by the flip of a coin\n- taskmaster\n- task rotation system\n  - stochastic task rotation system (strs)\n- activity roster\n- activity dice\n- activity cards\n- roll\n- deal\n\nFunctionality:\n\ntree of tasks, and you can specify weightings and tags at any level\nso if top nodes are A and B at 50% each, then the algo chooses one of them first, before descending to child nodes and doing the same again\nsearch query can include or exclude tags, +/-\nupdate scripts:\n\ngo through file and look for \"id\" notes, and if it matches, update the sub-weight or whatever\nanything that does not fit gets put into an uncategorised section with a weight of zero, or an alert is sent\nconfig formats:\n\ncan i assemble the json from a spreadsheet? something that gives me a table view to edit with. perhaps even sucking directly from a google doc?\nis there a visual json editor?\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnomicode%2Fnext","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnomicode%2Fnext","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnomicode%2Fnext/lists"}