Tau

Encrypted tasks management app using peer-to-peer network.
Multiple users can collaborate by working on the same tasks, and all users will have synced tasks.

Install

% git clone https://github.com/darkrenaissance/darkfi 
% cd darkfi
% make BINS="taud tau"
% sudo make install "BINS=taud tau"

Usage

To run your own instance check Local Deployment

% tau --help 
tau 0.3.0

USAGE:
    tau [OPTIONS] [FILTERS]... [SUBCOMMAND]

ARGS:
    <FILTERS>...    Search filters (zero or more)                                 

OPTIONS:
    -e, --endpoint <ENDPOINT>    taud JSON-RPC endpoint [default: tcp://127.0.0.1:23330]
    -h, --help                   Print help information
    -v                           Increase verbosity (-vvv supported)
    -V, --version                Print version information

SUBCOMMANDS:
    add        Add a new task.                                                    
    comment    Set or Get comment for task(s)
    export     Export tasks to a specified directory
    help       Print this message or the help of the given subcommand(s)
    import     Import tasks from a specified directory
    info       Get all data about selected task(s)
    list       List tasks
    log        Log drawdown
    modify     Modify/Edit an existing task
    open       Open task(s)
    pause      Pause task(s)
    start      Start task(s)
    stop       Stop task(s)
    switch     Switch workspace
% tau [SUBCOMMAND] --help

Quick start

Add tasks

Add a new task with the title "review tau usage" with the description text "description" set to "review tau".

tau add review tau usage "desc:review tau"

Add another task with the title "second task" assigned to dave. Because no description is set, it will open your EDITOR and prompt you for a description which allows entering multiline text.

tau add second task @dave
% tau add Third task project:tau rank:1.1
% tau add Fourth task assign:dave project:tau due:1509 rank:2.5
% tau add Five

List tasks

% tau				# all non-stop tasks
% tau list			# all non-stop tasks
% tau 1-3			# tasks 1 to 3
% tau 1,2 state:open		# tasks 1 and 2 and if they are open
% tau rank:gt:2			# all tasks that have rank greater than 2
% tau due.not:today		# all tasks that thier due date is not today
% tau due.after:0909		# all tasks that thier due date is after September 9th
% tau assign:dave		# tasks that assign field is "dave"

Filtering tasks

Note: mod commands are: start, open, pause, stop and modify.

Note: All filters from the previous section could work with mod commands.

% tau 5 stop			# will stop task 5
% tau 1,3 start			# start 1 and 3
% tau 2 pause			# pause 2
% tau 2,4 modify due:2009	# edit due to September in tasks 2 and 4 
% tau 1-4 modify project:tau	# edit project to tau in tasks 1,2,3 and 4
% tau state:pause open		# open paused tasks
% tau 3 info			# show information about task 3 (does not modify)

Comments

% tau 1 comment "content foo bar"	# will add a comment to task 1
% tau 3 comment				# will show comments on task 3 

Log drawdown

% tau log 0922			# will list assignees of stopped tasks
% tau log 0922 [<Assignee>]	# will draw a heatmap of stopped tasks for [Assignee]

Export and Import

% tau export ~/example_dir	# will save tasks json files to the path
% tau import ~/example_dir	# will reload saved json files from the path

Switch workspace

% tau switch darkfi	# darkfi workspace needs to be configured in config file

Local Deployment

Seed Node

First you must run a seed node. The seed node is a static host which nodes can connect to when they first connect to the network. The seed_session simply connects to a seed node and runs protocol_seed, which requests a list of addresses from the seed node and disconnects straight after receiving them.

# P2P accept addresses
inbound=["127.0.0.1:11001"] 

Note that the above config doesn't specify an external address since the seed node shouldn't be advertised in the list of connectable nodes. The seed node does not participate as a normal node in the p2p network. It simply allows new nodes to discover other nodes in the network during the bootstrapping phase.

Inbound Node

This is a node accepting inbound connections on the network but which is not making any outbound connections.

The external addresses are important and must be correct.

# P2P accept addresses
inbound=["127.0.0.1:11002"]

# P2P external addresses
external_addr=["127.0.0.1:11002"]

# Seed nodes to connect to 
seeds=["127.0.0.1:11001"]

Outbound Node

This is a node which has 8 outbound connection slots and no inbound connections. This means the node has 8 slots which will actively search for unique nodes to connect to in the p2p network.

# Connection slots
outbound_connections=8

# Seed nodes to connect to