mirror of
https://github.com/GothenburgBitFactory/timewarrior.git
synced 2025-07-07 20:06:39 +02:00
119 lines
4.1 KiB
Text
119 lines
4.1 KiB
Text
Timewarrior Project
|
|
===================
|
|
Timewarrior is a program that records tagged time blocks that represent tracked
|
|
time. This data is then used to create reports that show how that time was spent.
|
|
|
|
To make this task easier, and more useful, Timewarrior can access holidays, a
|
|
pre-defined working schedule, and support flexible time/date specifications,
|
|
implement a simple stop-watch tracking feature, generate custom reports, and
|
|
apply a set of rules to impose constraints and check the data.
|
|
|
|
Using a hook scripts, Timewarrior can be used as a backend time-tracking
|
|
feature for Taskwarrior, any other program, or as a standalone utility.
|
|
|
|
Timewarrior aims to be the tool of choice if you need to track time and generate
|
|
timesheets.
|
|
|
|
|
|
Goals
|
|
-----
|
|
- Provide a personal tools to easily track time spent and generate reports with
|
|
low friction.
|
|
- Support all workflows.
|
|
- Provide an extension-friendly tool.
|
|
- Support policies via the rules system.
|
|
- Integrate with Taskwarrior, Tasksh.
|
|
- Store data in plain UTF-8 text.
|
|
|
|
|
|
Non-Goals
|
|
---------
|
|
- Completely independent from Taskwarrior, Taskserver, Tasksh.
|
|
- No cloud support, no sync support, all data is local. Tracked time is
|
|
sensitive personal data and will not be transmitted.
|
|
- No explicit multi-user support, although using tags to track individuals is
|
|
possible.
|
|
- There is no hook system as Timewarrior is a data sink, not a data source.
|
|
- No features without a compelling use case.
|
|
|
|
|
|
Tags
|
|
----
|
|
Tags represent tracking categories. Tags are arbitrary UTF8 strings. A tag may
|
|
be a single unquoted word, or a quoted string if it includes spaces.
|
|
|
|
A tag may be used without being defined, but if a tag is defined, then it may
|
|
have associated metadata, such as a start date representing the first date on
|
|
which it may be used, and an end date, when it expires. A tag may have a budget,
|
|
which is the maximum trackable time for a period.
|
|
|
|
An interval may have multiple tags associated with it, but the tags apply to the
|
|
whole interval only. In this example, there are overlapping tags:
|
|
|
|
$ timew start tag1
|
|
...
|
|
$ timew start tag2
|
|
...
|
|
$ timew stop tag1
|
|
...
|
|
$ timew stop
|
|
|
|
By default, when the interval for 'tag2' starts, the interval for 'tag1' is
|
|
automatically stopped, because tags do not overlap. This then makes the next
|
|
command ('timew stop tag1') yield an error, because 'tag1' was not active. If
|
|
however, both 'tag1' and 'tag2' are defined with the 'overlap' metadata, then
|
|
there will not be an automatic stop for 'tag1'.
|
|
|
|
|
|
Macros
|
|
------
|
|
A macro is a keyword that can take arguments, and expands to a set of one or
|
|
more other timew commands, with some dynamic aspect. For example, the macro
|
|
named 'staff meeting' could be an interval that is on Wednesdays at 10:00, and
|
|
has a set of associated tags. This would then create an appropriately tagged
|
|
interval.
|
|
|
|
|
|
Commands
|
|
--------
|
|
The command set will include:
|
|
|
|
define Modify configuration
|
|
track Record tracked time
|
|
report Run a report
|
|
undo Undo a change
|
|
tags Show all tags
|
|
gaps Show untracked gaps in the schedule
|
|
import Import JSON data
|
|
export Export JSON data
|
|
help Show help text
|
|
x Run extension 'x'
|
|
|
|
There will be built-in commands, and an extensions mechanism that allows reports
|
|
to be added as extensions, while being handled as though they were built-ins.
|
|
|
|
|
|
Undo
|
|
----
|
|
All commands that change configuration or data need to be logged as-is in the
|
|
undo.data file, so that an 'undo' command can later rewind the changes properly.
|
|
|
|
All undo will happen at the command level, not the delta level. That means if
|
|
one command results in three changes, a single 'undo' command will revert the
|
|
three changes associated with the one command.
|
|
|
|
|
|
Extensions
|
|
----------
|
|
A simple extension mechanism allows custom reports to be written and shared.
|
|
Most reports will be external scripts that use the extension API.
|
|
|
|
|
|
--- Raw Notes ---
|
|
|
|
- Need syntax to adjust any recorded data.
|
|
|
|
- It should be forgiving when you forgot to stop a task. Maybe a specific
|
|
command, instead of "stop" use "forgot" or directly "edit". Then I would
|
|
like to express either "stopped 30min ago" or "it lasted only 1hour”.
|
|
|