{"id":22602611,"url":"https://github.com/brianhicks/montage","last_synced_at":"2025-07-19T14:32:38.751Z","repository":{"id":265901444,"uuid":"787865203","full_name":"BrianHicks/montage","owner":"BrianHicks","description":null,"archived":false,"fork":false,"pushed_at":"2024-04-17T10:28:08.000Z","size":487,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-15T13:46:43.695Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","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/BrianHicks.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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-04-17T10:28:05.000Z","updated_at":"2024-04-18T20:23:20.000Z","dependencies_parsed_at":null,"dependency_job_id":"ef2c89f0-7a38-44dd-9205-4476dd160cd3","html_url":"https://github.com/BrianHicks/montage","commit_stats":null,"previous_names":["brianhicks/montage"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/BrianHicks/montage","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrianHicks%2Fmontage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrianHicks%2Fmontage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrianHicks%2Fmontage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrianHicks%2Fmontage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BrianHicks","download_url":"https://codeload.github.com/BrianHicks/montage/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrianHicks%2Fmontage/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265947490,"owners_count":23853382,"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":"2024-12-08T12:25:41.931Z","updated_at":"2025-07-19T14:32:38.745Z","avatar_url":"https://github.com/BrianHicks.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Montage\n\nYou know montages, right? Sylvester Stalone punching meat and running up stairs? That kinda thing. Where you make progress *snap* like that. The real world doesn't work like that, which sucks, so I Frankensteined some custom software together to keep me on track.\n\nIt does some cool stuff:\n\n- It makes me call my shots. What am I doing? Until when?\n- It annoys me when I'm not doing the thing I said I was gonna do\n- It lets me hook into those things to write down what I did for the day\n\nTo use it:\n\n1. Be me, or at least be named Brian, or at least be OK with being called Brian by a computer (by default.)\n2. Use macOS, OmniFocus for tasks, and Obsidian (or other Markdowny thing) for notes.\n\n## How to use!\n\nBefore you start, run `montage serve` in some terminal or background job and leave it running. That's the part that manages all the state.\n\nThen start a task! If you just wanna use the command line you can run `montage start \"some thing you wanna do\" --duration 25`. The number there is how long you're gonna be doing the thing.\n\nYou can also run `montage break --duration 5` (minutes again there) to take a break.\n\nThe rest is integrations.\n\n### Vex\n\n`montage vex` will keep track of what you're doing and start saying things every two seconds (by default) when the time you gave expires or you've been working too long. Just keep it running in some terminal.\n\n`vex` can also run scripts for you if you'd like to automatically hook up things happening on the system to (e.g.) make your life more annoying or write reports somewhere automatically. See the sample scripts at `sample_scripts/` for how they'll be called.\n\nCheck out `montage vex --help` for other useful things this command can do.\n\n### Xbar\n\nYou can run `montage xbar` to get a status bar appropriate for controlling tasks in [xbar](https://xbarapp.com/) \n\n### OmniFocus\n\nThere's a OmniFocus plugin here, at `Montage.omnifocusjs`. Point OmniFocus at it and click buttons to start tasks and breaks.\n\n### Watch\n\n`montage watch` will give a debug view of whatever tasks you want. You can't use it for much more than debugging right now, and it'll probably be removed.\n\n### Report\n\n`montage report` will give you a report for the day's work in Markdown, suitable for copying to a journal or log. It'll also tell you how much time was spent on tasks and short breaks (less than 15 minutes.) You can get a summary of longer breaks if you want it by passing `--include-long-breaks-in-summary`, but that doesn't tend to be super helpful information for me so I turn it off by default.\n\nYou can also call it like `montage report FIRST_DATE SECOND_DATE` to get a report for all the sessions in those two dates, inclusive.\n\nIn either case, you can pass `--no-log` or `--no-task-totals` to turn off those sections of the report.\n\n## License\n\nBSD 3-Clause\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrianhicks%2Fmontage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrianhicks%2Fmontage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrianhicks%2Fmontage/lists"}