What if you could enjoy the dynamic nature of professional Applicant Tracking Systems combined with the timeless simplicity of tracking tools like Excel?
Welcome to Tether, a free offline desktop application built for the everyday Hiring Manager (HM) such as yourself! Our application enables you to record applicant and interviewer details, schedule interviews, and access a high-level overview of applicant/interviewer/interview statistics. Tether is optimised for the HM that prefers a core set of features supported by a minimal, but smart, interface with no dependency on the internet.
If you have found yourself here in this user guide, it probably means you need some help setting up and/or using our application. Thus, our user guide serves to
There is also a List of Contents at the start, and a Glossary and FAQ section at the end to ease and expedite your perusal of our user guide.
Ready to make hiring management easy for yourself? Let's get started!
This crucial section is where your journey with Tether starts. Here, you may learn the context for Tether, how to set up and run Tether, the structure of the application, and where to find help quickly if you need it. For terms which we feel may be a little technical or require further contextualising, we add numbering like so [0] beside them and then define those terms in our Glossary.
Tether is not your typical application that you may download off an app-store and directly launch from your desktop. It is an offline application that launches from and runs entirely through your computer's Command Line Interface (CLI) [1] which is a medium through which you directly interact with your computer system.
The way Tether works is, once you set up and launch the application from the CLI (as you will learn below in Quick Start), you type-in commands into a Graphical User Interface (GUI) [2] to use the application. We employ this modus operandi to cut down on visual-noise such as buttons and click-away popups, and allow you to focus your hands only on the keyboard.
In short, if you can type fast, Tether can get your hiring management tasks done faster than traditional GUI apps.
Further, the data you create on Tether will not be saved in any online platform, but locally in your computer in a json [3] file. You may even directly edit your data in this file if need be and the changes will be reflected when you (re)launch Tether. The benefit of this is that if you need a quicker way of fixing or updating your data than using commands on our application, the json file is at your disposal.
Below you will see a listing and explanation of the exact commands you will need to use our available features.
Ensure you have Java 11 or above installed in your Computer. This is a crucial step as Java, one of the world's most prominent programming languages, is the backbone of how our application operates.
tether.jar
file.Click to download the latest tether.jar
from here.
Open your file manager (search for File Explorer in your computer for Windows, or Finder for Mac), and navigate to your downloads section
Copy the downloaded tether.jar
to a new folder that you will use as the home folder for Tether (from here on, let tether_folder refer to this home folder). You may choose to create this new folder in the downloads section as well, for later convenience.
Open a command line interface (Command Prompt in Windows or Terminal in Mac) and follow these steps:
cd
("change directory") to navigate to the folder you put the jar file in.
cd downloads
and press enter to navigate into downloads and then type cd tether_folder
to navigate into your tether_foldercd
and then simply drag and drop the tether_folder into the terminal. Press enter and you will directly find yourself in the tether_folder.java -jar tether.jar
command and press enter to run the application. A GUI similar to the below should appear in a few seconds. Note how the app contains some sample data.Before delving into the features, we want you to give you a brief tour on how to use our application.
java -jar
, the data folder should be automatically created in the same tether_folder that you created to store the tether.jar
file.
tether.jar
file. The path to saved data will not update itself if you move the data folder.Simply execute help
or press the Help button in the taskbar to launch a help window that shows the list of commands.
Now that we've gone over the basics, let's dive into how you may use Tether for your most essential hiring management tasks!
Notes about the command format:
Most commands are in the format commandname [parameters]
.
Take note of parameters [5] that have special prefixes such as n/
for name and e/
for email.
Command names are case-sensitive.
e.g if you type in ADD_APPLICANT
instead of add_applicant
, it is interpreted as an invalid command.
Tether will give appropriate feedback if any parameter constraints for commands are violated. However, this feedback may not always be very specific as to exactly which parameters are violated and in what way. To help you in this matter, we do list parameter constraints along with the commands that first use them (i.e. the same parameter constraints will not be explained everytime the parameter is used, only the first time).
Tether will ignore leading and trailing whitespaces for all parameters except for the filter_by_status
command.
Tether will ignore extraneous parameters for commands that do not take in any parameters (help
, clear
, exit
, view_overall_statistics
). For example, if you attempt to execute help 123
, it will be interpreted as help
.
If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.
Consequences of adding invalid values for fields:
The application may not load any data at all upon launch.
The application may fill up with incoherent data.
One of the first steps in the hiring pipeline is when an applicant submits their name for consideration.
To record an applicant and their contact details in Tether, simply execute add_applicant n/NAME p/PHONE e/EMAIL
and the applicant will appear under the Persons column as seen via the example usage below.
Example Usage:
add_applicant n/Wesley Yu p/88889999 e/wesleyyu@gmail.com
Parameter Constraints:
Notes:
~(sameEmail || samePhone) = ~sameEmail && ~ samePhone = differentEmail && differentPhone
.remark
command (described below).Now that you know how to add an applicant, it would be nice to record their position in your hiring pipeline at any given time for later review. This is where tagging applicants by status is handy.
Simply execute applicant_status PHONE s/STATUS
where PHONE is the target applicant's phone number and STATUS may only be any one of:
Example Usage
applicant_status 98362254 s/accepted
.Parameter Constraints
s/accepted
is as valid as s/AcCepTed
.add_applicant PHONE s/accepted s/rejected
, then only the last status will be considered i.e, the applicant's status will become rejected.add_applicant PHONE s/accepted rejected
, then an error will be displayed since "accepted rejected" is not any one of the valid statuses. Simply put, the clause immediately following an s/
prefix is considered as one status.Notes:
applicant_status
command overwrites the applicant's current status. Ultimately, we want you to be able to pivot your applicants to any stage of the hiring pipeline.Recording all potential applicants is one thing, but to meaningfully schedule interviews for them, you also need a host of interviewers and their details.
To record an interviewer and their contact details in Tether, simply execute add_interviewer n/NAME p/PHONE e/EMAIL
and the interviewer will appear under the Persons column as seen via the example usage below.
Example Usage
add_interviewer n/Yash p/99998888 e/yash@gmail.com
Notes:
remark
command (described below).Now that you know how to add an interviewer, it would be nice to record their availabilities at any given time for subsequent interview scheduling. Happily however, there are no commands here to manage interviewer statuses manually!
Tether is capable of tagging an interviewer with a status automatically when an interview concerning the respective interviewer is added. As a specific example, if an interview is scheduled between applicant Wesley and interviewer Yash, then Yash is given a status of interview with wesley. If an interviewer has no scheduled interviews, then their status will be free.
At any time, an interviewer's status can only either be free or a list of interview with... for all the applicants they are interviewing.
As more interviews are added, the interviewer's statuses stack on top of each other like so:
Conversely, if an interview is deleted, the respective status is automatically removed from the interviewer's status stack.
Once you have Persons in Tether, wouldn't it be nice to annotate them with helpful remarks?
Simply execute remark INDEX r/REMARK
where INDEX is the serial number of the person in the list and the REMARK will appear under the respective person.
Example Usage
remark 1 r/Confident
would add the
Confident remark to the person at number 1.Parameter Constraints
remark -2 r/Confident
when there can't be a negative amount of people, or remark 100 r/Confident
when there's only 20 people, will both lead to errors.Notes
remark INDEX
without any parameters, at all the remark of the person at that index will be removed.Now comes a very meaty part of hiring management - scheduling interviews. And to do so, simply execute add_interview desc/DESCRIPTION date/DATE st/START_TIME et/END_TIME a/APPLICANT_PHONE_NUMBER i/INTERVIEWER_PHONE_NUMBER
The following example usage demonstrates the effect of adding an interview in this manner:
Example Usage
add_interview desc/Technical Round date/2024-11-11 st/12:00 et/15:00 a/12345678 i/87654321
.Parameter Constraints
desc/
.YYYY-MM-DD
format.HH:MM
or HH:MM:SS
format, and the start-time cannot precede the end-time. Timings follow the 24-hour format.Notes:
a/
or an applicant phone number after i/
), Tether will indicate to you that the phone number you keyed in is not a valid applicant or interviewer phone number.When you've added several applicants or interviewers to Tether, it's helpful to see them all together with their details.
The list of persons and their details is typically shown on the left side of the screen in the GUI, and it updates automatically whenever new persons are added. However, there are also commands like find
and filter
(explained below) that can change the list shown. If you've used any of these commands and want to go back to seeing the original, unfiltered list of persons, just use the command list_persons
.
Similar to persons, after adding several interviews to Tether, it's useful to see them all together with their details.
The list of interviews and their details is usually displayed on the right side of the GUI, and it updates automatically when new interviews are added. However, there is a filter
command (explained below) that can change the list displayed. If you've used this command and want to return to seeing the original, unfiltered list of interviews, simply use the command list_interviews
.
After adding multiple persons into Tether, you may find yourself having to manually scroll to locate a specific person.
The find
command is useful here to save you time in locating such persons provided you already know at least one of
the following 3 details of the person: their email, name or phone number.
find
can also be used to find multiple persons at once. You can provide multiple parameters after the initial
find_email
, find_phone
or find_name
and all persons that match any of the parameters for these commands will be displayed.
To find a person or persons, execute find_email/name/phone PARAMETER1 PARAMETER2...
such as in the example usages illustrated below:
Example Usage:
Single Parameter:
Executing find_name Alice
will list all persons containing the name Alice
:
Multiple Parameters:
Executing find_phone 123 456
will list all persons with the phone number 123
or 456
as seen below:
Notes:
find
command queries the original unfiltered list of persons each time, meaning that sequentially executed find
commands are not applied on top of the previous ones.find_name Alice
will bring up Alice and Alice Yeoh but find_name Ali
will not return any matches.find_email Alice
.
find_phone
should only be followed by valid phone number(s), not a mix of phones, emails and names.What if you have no information about an applicant or interviewer's name, phone or email though? Fret not, for the filter_by_status
command enables you to narrow down the current list of persons on the basis of their current status.
Simply execute filter_by_status STATUS
, and the displayed list will update to show only persons with the required STATUS.
Example Usage
filter_by_status free
will display all interviewers with status free.filter_by_status resume review
will display all applicants with status resume review.Parameter Constraints
Notes
filter_by_status free
, you will need to list_persons
again before applying filter_by_status interview with wesley
.
list_persons
, then the filters will stack on top of the other and you will be searching for interviewers with status interview with wesley among interviewers with status free, which will logically result in finding no interviewers at all.filter_by_status interview with wes
will not match an interviewer with status interview with wesley.Navigating through a dense schedule to find specific interviews can be daunting.
Tether simplifies this with the filter_interviews_by_date DATE
command, allowing you to instantly locate all interviews scheduled for the given DATE.
To view your full interview schedule, simply use the list_interviews
command.
Example Usage
filter_interviews_by_date 2024-05-05
.Parameter Constraints
Notes
filter_interviews_by_date 2024-05-05
, and if there exists interviews on that date, you will need to list_interviews
again before applying filter_interviews_by_date 2024-06-06
.If you're confident in removing a person from Tether if - for example - an interviewer leaves your company or an applicant is out of the hiring process, then execute delete_person PHONE
and the person with the given PHONE will be removed permanently.
Example Usage:
delete_person 81239123
would delete that
person.If you're confident in unscheduling an interview, perhaps due to changed availability or an unexpected clash, then execute delete_interview INDEX
and the interview numbered at INDEX will be removed permanently.
Example Usage:
delete_interview 1
would delete the first interview in the list.Core features such as adding, finding, status management and deleting are likely going to be your bread and butter as a hiring manager. However, often you may be tasked to analyse and report certain statistics that may be tedious to compute manually.
Tether has some basic support for viewing statistics, particularly:
A simple example usage would be view_overall_statistics
to get a result as such:
If you made multiple mistakes and wish to rebuild your hiring data from scratch, the clear
command deletes all existing data in Tether, giving you the fresh start you require.
Notes
If you're clocking out for the day, either execute exit
directly or press the File button in the taskbar and then press Exit to quit Tether.
Tether's person and interview data are saved in the hard disk [7] automatically after any command that changes the data.
There is no need to save manually.
Tether is always a Work-In-Progress as we are constantly refining our application for your needs. Listed below are some of our planned enhancements as well as current limitations, to keep you abreast of the current state of our application.
edit
command to amend any of the fields of a person or interview.tag
command and t/
parameter to add and edit custom tags for persons/interviews.undo
and redo
for commands.a-z
(both lower and uppercase) and numbers 0-9
.Q: How do I transfer my data to another Computer?
A: Install the app in the other computer and overwrite the empty data file it creates with the file that contains
the data of your previous Tether home folder.
Action | Format, Examples |
---|---|
Add Applicant | add_applicant n/NAME p/PHONE e/EMAIL e.g., add_applicant n/John Doe p/81239123 e/johndoe123@gmail.com |
Change Applicant Status | applicant_status PHONE s/STATUS e.g., applicant_status 81239123 s/accepted |
Add Interviewer | add_interviewer n/NAME p/PHONE e/EMAIL e.g., add_interviewer n/Jane Doe p/81239123 e/janed@example.com |
Change Interviewer Status | interviewer_status PHONE s/STATUS e.g., interviewer_status 81239123 s/free |
Add a Remark to Person | remark INDEX r/REMARK e.g, remark 1 r/Confident |
Add Interview | add_interview desc/DESCRIPTION date/DATE st/START_TIME et/END_TIME a/APPLICANT_PHONE i/INTERVIEWER_PHONE e.g., add_interview desc/Interview with John date/2024-11-11 st/10:00 et/11:00 a/81239123 i/91238123 |
Delete Person | delete_person PHONE e.g., delete_person 81239123 |
Delete Interview | delete_interview INDEX e.g., delete_interview 1 |
List Interviews | list_interviews |
List Persons | list_persons |
Find Persons | find_email/name/phone PARAMETER1 PARAMETER2... e.g., find_name Alice or find_phone 123 456 789 |
Filter Persons by Status | filter_by_status STATUS e.g., filter_by_status free |
Filter Interviews by date | filter_interviews_by_date DATE e.g., filter_interviews_by_date 2024-05-05 |
View Overall Statistics | view_overall_statistics |
Clear All Existing Data | clear |
Exit | exit |
Help | help |