Appearance
Connect Jira, Trello, GitHub and Slack
Flightdeck reads your tickets, cards, issues and messages, and lets your agents comment, post and move work, through one client that only touches what you allow. This guide connects each service. You can connect any one of them on its own.
Two things are true for each of them:
- Credentials go in the macOS Keychain. Paste each one into its field under Settings › Integrations, or pipe it in from the command line, for example
pbpaste | flightdeck secrets set slack. A value is never shown again: the app andflightdeck secrets statusonly say whether it is set. GitHub needs no credential here: it uses your own GitHub CLI login. - Nothing is reachable until you name it. Flightdeck touches only the projects, boards and channels listed in
~/.config/flightdeck/config.toml. Anything else is refused.
Name a project
Each Jira project, Trello board or GitHub Project belongs to a project entry in config.toml, which points to a small .standup.json file, usually in the project's repository:
toml
[projects]
my-app = "~/projects/my-app/.standup.json"The sections below say what goes in that file. Because it lives in the repository, review changes to it as you would any config: it decides what Flightdeck may touch.
Jira
Flightdeck can reach Jira in two ways. An API token is quicker to set up; OAuth avoids a long-lived token.
Option A: an API token
Create an API token in your Atlassian account settings.
Store it: paste it into API token (only without OAuth) under Settings › Integrations, or run
pbpaste | flightdeck secrets set jira.Add the email address of that Atlassian account to
config.toml:toml[identity] jira_email = "you@example.com"
Option B: OAuth
- Create an OAuth 2.0 (3LO) app in the Atlassian developer console. Give it the Jira scopes
read:jira-workandwrite:jira-work, and register exactly this callback URL:http://localhost:8766/callback. - Save the app's client id in OAuth client id (or
flightdeck link config set jira.oauth.clientId <id>), and its secret in OAuth client secret (orpbpaste | flightdeck secrets set jira-oauth). - Click Connect Jira (or run
flightdeck jira auth). Atlassian's consent page opens in your browser; approve it within 5 minutes. Integrations then shows Authorized: Yes. - OAuth also needs your site's cloud id. Open
https://<your-site>.atlassian.net/_edge/tenant_infoand copy thecloudId.
Point a project at Jira
In the project's .standup.json:
json
{
"jira": {
"site": "https://your-site.atlassian.net",
"projectKey": "APP",
"cloudId": "<cloudId, for OAuth only>"
}
}Once one project works, Link project on the Tickets page sets up the next one: it reads the tracker's statuses, lets you map them to columns, and shows the change before it writes.
Check it
sh
flightdeck link status # what is set, and the last sync
flightdeck jira --project my-app projects # every project your credential can seeJira syncs every 5 minutes. The Tickets page lists the tickets assigned to you.
Slack
Flightdeck uses a Slack user token from a small Slack app of your own, so what it posts goes out as you, with a "via Flightdeck" footer.
Create a Slack app for your workspace and give it these User Token Scopes:
channels:history,im:history,chat:write,reactions:write,users:read,channels:read,groups:read,im:read,im:writeandfiles:read. Install it to your workspace and copy the user token. A missing scope fails with an error that names it.flightdeck slack exportalso needsmpim:history,mpim:readandgroups:history.Store it: paste it into User token under Settings › Integrations, or run
pbpaste | flightdeck secrets set slack.Add your own Slack user id to
config.toml:toml[identity] slack_self = "U0123456789"Add the channels Flightdeck may read under Settings › Inbox sources: pick a Channel or person, give it an Alias, choose an Inbox type, and click Add. From the command line:
shflightdeck link config set slack.channels.team C0123456789 flightdeck link config set slack.channels.team.type teamA channel's type is
teamorstandup. Your DMs are read without one.
Slack syncs every 2 minutes, reading the last 14 days of each DM and typed channel into the Inbox. flightdeck slack channels and flightdeck slack users list what your token can see.
Trello
Get your Trello API key and a token for it from Trello's developer pages.
Store both: paste them into API key and Token under Settings › Integrations, or run
pbpaste | flightdeck secrets set trello-key, then the same withtrello. They are a pair: once either is set, both must be.Point a project at its board in the project's
.standup.json:json{ "trello": { "board": "<board id>" } }To find a board's id, open the board in your browser, add
.jsonto the end of its address, and copy the first"id".
Once one Trello project works, New board on the Tickets page creates a new board with Flightdeck's columns and adds it as a project for you.
Check it
sh
flightdeck trello --project my-app listsTrello syncs every 15 minutes, and the board's cards appear on the Tickets page.
GitHub
Flightdeck works with GitHub Issues and Projects through your own GitHub CLI login. It stores no GitHub token.
Install the GitHub CLI, run
gh auth login, thengh auth refresh -s project. Settings › Integrations shows whetherghis signed in and has the project scope.Point a project at its GitHub Project (v2) and repositories in the project's
.standup.json:json{ "tracker": "github", "github": { "project": { "owner": "<owner>", "number": 2 }, "repos": ["<owner>/<repo>"] } }
Check it
sh
flightdeck github --project my-app projects # the owner's Projects
flightdeck github --project my-app statuses <owner>/<number> # one Project's Status columnsGitHub syncs every 5 minutes.
Dropbox (optional)
Agents can read and write files in the Dropbox folders you list under [dropbox] paths in config.toml. Store the app key with pbpaste | flightdeck secrets set dropbox-app-key and run flightdeck dropbox auth once. Dropbox works from the command line only.