2024-07-09 14:56:08 +00:00
# mostr
2024-07-30 18:04:54 +00:00
An immutable nested collaborative task manager, powered by nostr!
2024-07-09 14:56:08 +00:00
## Quickstart
2024-07-29 11:20:49 +00:00
First, start a nostr relay, such as
- https://github.com/coracle-social/bucket for local development
2024-07-29 19:56:30 +00:00
- https://github.com/rnostr/rnostr for production use
Run development build with:
2024-07-09 14:56:08 +00:00
2024-07-29 11:20:49 +00:00
cargo run
2024-07-30 18:04:54 +00:00
A `relay` list and private `key` can be placed in config files
under `${XDG_CONFIG_HOME:-$HOME/.config}/mostr/` .
Currently, all relays are fetched and synced to,
separation is planned -
ideally for any project with different collaborators,
an own relay will be used.
If not saved, mostr will ask for a relay url
(entering none is fine too, but your data will not be persisted between sessions)
and a private key, alternatively generating one on the fly.
Both are currently saved in plain text to the above files.
2024-07-29 19:56:30 +00:00
Install latest build:
2024-07-30 18:04:54 +00:00
cargo install --path .
2024-07-24 22:02:26 +00:00
2024-07-30 18:04:54 +00:00
Creating a test task externally:
`nostril --envelope --content "test task" --kind 1621 | websocat ws://localhost:4736`
2024-07-24 22:02:26 +00:00
2024-07-30 18:04:54 +00:00
To exit the application, press `Ctrl-D` .
## Basic Usage
### Navigation and Nesting
Create tasks and navigate using the shortcuts below.
2024-08-01 18:40:15 +00:00
Whichever task is active (selected)
2024-07-30 18:04:54 +00:00
will be the parent task for newly created tasks
and automatically has time-tracking running.
To track task progress,
simply subdivide the task -
checking off tasks will automatically update the progress
for all parent tasks.
Generally a flat hierarchy is recommended
with tags for filtering,
since hierarchies cannot be changed.
Filtering by a tag is just as easy
2024-08-01 18:40:15 +00:00
as activating a task and more flexible.
2024-07-30 18:04:54 +00:00
Using subtasks has two main advantages:
- ability to accumulate time tracked
- swiftly navigate between related tasks
Thus subtasks can be very useful for specific contexts,
for example a project or a specific place.
On the other hand, related tasks like chores
should be grouped with a tag instead.
### Collaboration
Since everything in mostr is inherently immutable,
live collaboration is easily possible.
After every command,
mostr checks if new updates arrived from the relay
and updates its display accordingly.
If a relay has a lot of events,
initial population of data can take a bit -
but you can already start creating events without issues,
updates will be fetched in the background.
For that reason,
it is recommended to leave mostr running
as you work.
### Time-Tracking
The currently active task is automatically time-tracked.
To stop time-tracking completely, simply move to the root of all tasks.
2024-07-24 22:02:26 +00:00
## Reference
2024-07-25 19:40:35 +00:00
### Command Syntax
2024-07-29 10:37:05 +00:00
`TASK` creation syntax: `NAME: TAG1 TAG2 ...`
2024-07-24 22:02:26 +00:00
- `TASK` - create task
- `.` - clear filters and reload
2024-07-29 10:37:05 +00:00
- `.TASK`
2024-08-01 18:40:15 +00:00
+ activate task by id
2024-07-29 10:37:05 +00:00
+ match by task name prefix: if one or more tasks match, filter / activate (tries case-sensitive then case-insensitive)
+ no match: create & activate task
- `.2` - set view depth to `2` , which can be substituted for any number (how many subtask levels to show, default 1)
2024-08-01 18:40:15 +00:00
- `/[TEXT]` - like `.` , but never creates a task
2024-08-08 18:10:17 +00:00
- `|[TASK]` - (un)mark current task as procedure or create and activate a new task procedure (where subtasks automatically depend on the previously created task)
2024-07-24 22:02:26 +00:00
2024-07-30 18:04:54 +00:00
Dots can be repeated to move to parent tasks.
2024-07-24 22:02:26 +00:00
2024-08-06 21:06:09 +00:00
- `:[IND][COL]` - add property column COL at IND or end, if it already exists remove property column COL or IND (1-indexed)
2024-08-08 12:09:39 +00:00
- `*[TIME]` - add timetracking with the specified offset (empty: list tracked times)
2024-08-02 17:40:42 +00:00
- `>[TEXT]` - complete active task and move to parent, with optional state description
- `<[TEXT]` - close active task and move to parent, with optional state description
- `!TEXT` - set state for current task from text
2024-08-01 17:04:56 +00:00
- `,TEXT` - add text note (comment / description)
2024-08-01 17:00:45 +00:00
- `@` - undoes last action (moving in place or upwards or waiting a minute confirms pending actions)
2024-08-07 12:03:29 +00:00
- `wss://...` - switch or subscribe to relay
2024-07-25 07:50:53 +00:00
2024-07-29 08:15:13 +00:00
Property Filters:
2024-08-08 10:04:22 +00:00
- `#TAG` - set tag filter (empty: list all used tags)
- `+TAG` - add tag filter
- `-TAG` - remove tag filters
2024-08-10 12:44:52 +00:00
- `?STATE` - filter by state (type or description) - plain `?` to reset, `??` to show all
2024-07-29 08:15:13 +00:00
2024-07-30 18:04:54 +00:00
State descriptions can be used for example for Kanban columns or review flows.
2024-07-29 11:20:49 +00:00
An active tag or state filter will also set that attribute for newly created tasks.
2024-07-24 22:02:26 +00:00
2024-07-25 19:51:12 +00:00
### Available Columns
2024-07-24 22:02:26 +00:00
- `id`
- `parentid`
- `name`
- `state`
2024-07-29 11:20:49 +00:00
- `hashtags`
2024-07-30 06:09:54 +00:00
- `tags` - values of all nostr tags associated with the event, except event tags
- `desc` - last note on the task
- `description` - accumulated notes on the task
2024-07-24 22:02:26 +00:00
- `path` - name including parent tasks
- `rpath` - name including parent tasks up to active task
2024-07-30 14:11:43 +00:00
- `time` - time tracked on this task
- `rtime` - time tracked on this tasks and all recursive subtasks
- `progress` - recursive subtask completion in percent
- `subtasks` - how many direct subtasks are complete
2024-08-08 18:10:17 +00:00
- TBI `depends`
2024-07-24 22:02:26 +00:00
2024-07-30 06:09:54 +00:00
For debugging: `props` , `alltags` , `descriptions`
2024-07-30 18:04:54 +00:00
## Nostr reference
Mostr mainly uses the following NIPs:
2024-08-07 12:04:18 +00:00
- Kind 1 for task descriptions
2024-07-30 18:04:54 +00:00
- Issue Tracking: https://github.com/nostr-protocol/nips/blob/master/34.md
+ Tasks have Kind 1621 (originally: git issue - currently no native markdown support)
+ Kind 1622 may be used for task comments or replace Kind 1 for descriptions
2024-08-07 12:04:18 +00:00
+ Kind 1630-1633: Task Status (1630 Open, 1631 Done, 1632 Closed, 1633 Pending)
2024-07-30 18:04:54 +00:00
- Implementing proprietary Kind 1650 for time-tracking
Considering to use Calendar: https://github.com/nostr-protocol/nips/blob/master/52.md
- Kind 31922 for GANTT, since it has only Date
- Kind 31923 for Calendar, since it has a time
2024-07-24 22:02:26 +00:00
2024-07-13 13:00:42 +00:00
## Plans
2024-08-08 18:10:17 +00:00
- Remove state filter when moving up?
2024-08-01 11:07:40 +00:00
- Task markdown support? - colored
- Time tracking: Ability to postpone task and add planned timestamps (calendar entry)
2024-07-30 18:04:54 +00:00
- Parse Hashtag tags from task name
- Unified Filter object
-> include subtasks of matched tasks
- Relay Switching
- Speedup: Offline caching & Expiry (no need to fetch potential years of history)
+ Fetch most recent tasks first
+ Relay: compress tracked time for old tasks, filter closed tasks
+ Relay: filter out task state updates within few seconds, also on client side
### Conceptual
The following features are not ready to be implemented
because they need conceptualization.
Suggestions welcome!
2024-08-10 12:44:52 +00:00
- Priorities
- Dependencies (change from tags to properties so they can be added later? or maybe as a state?)
- Templates
- Ownership
2024-07-30 18:04:54 +00:00
- Combined formatting and recursion specifiers
+ progress count/percentage and recursive or not
+ Subtask progress immediate/all/leafs
+ path full / leaf / top
### Interfaces
- TUI: Clear terminal? Refresh on empty prompt after timeout?
- Kanban, GANTT, Calendar
2024-07-29 19:56:30 +00:00
- Web Interface, Messenger integrations