Skip to main content
Fibonacci reads your repositories and your trackers the way you do, then does the follow-up you’d otherwise do by hand. Describe the job in one sentence:
Get issue 23 from GitHub in the abc repo, find the key issues and make a fix.md, send it to xyz, set a one-on-one with xyz, and update the work in Trello.
Fibonacci turns that into a workflow and runs it:
  • The issue is read with its whole discussion. abc is found among the repositories your token can see, so you don’t have to type owner/abc.
  • fix.md is written by Claude from the issue, and travels as a real file: attached to the email and to the Trello card.
  • xyz gets the email and a calendar invitation with a Google Meet link, at 10:00 on the next business day in your calendar’s time zone, because you didn’t name a time.
  • The card for issue 23 moves to In Progress and gets a comment saying what happened.
  • If you didn’t give xyz’s email, Fibonacci asks for it as an input before the run. It never guesses an address.
The GitHub tools read. The only GitHub writes are reviewing and commenting on a pull request. Changes go to Jira and Trello, and messages to people, where your org’s governance rules can hold or block them.

Connect your accounts

Each person adds their own credentials to their Secrets Locker (Dashboard → Secrets Locker; Organization → Integrations → Developer tools walks through each one). Runs act as that person, with their permissions.
For reading, give the token read access to Metadata, Contents, Issues, Pull requests, Commit statuses and Checks on the repositories you want. Add Pull requests: write only if workflows should post reviews or PR comments. If your organization uses SAML single sign-on, authorize the token for it (Configure SSO → Authorize).

GitHub: read, check, maintain, document

Every GitHub tool takes the repository the way you’d write it: owner/name, a github.com link, or just the name. Issues and pull requests can be 23, #23, owner/name#23 or their link. Something that isn’t a number (23a) is refused before anything is called, with an explanation.
Hand an issue to an LLM step with {{read_issue.text}}. Named fields like .text reach the step in full, while a whole node output ({{read_issue}}) is cut to about 6,000 characters.

Jira and Trello: keep the timeline current

  • Names, not IDs. Boards by name or link, lists by name ("In Progress"), cards by link or, with a board, by their name ("#23" finds “#23 Login times out”). If a name matches two cards or no list, the step stops and says which ones exist.
  • Markdown in, Markdown out. Jira’s rich-text format is converted both ways, so headings, lists and code blocks survive.
  • Statuses move the right way. status: "Done" uses the transition that leads to Done from where the issue is; if there isn’t one, the error lists where it can go.

Files, people and meetings


The example, as a workflow

This is the shape the generator produces for the request at the top (you can also write it yourself, in the API or the SDK):
Run it with {"xyz_email": "xyz@acme.com", "trello_board": "Sprint 12"}. The issue read, the 1:1 and the card move happen in parallel; the email and the Trello note wait for fix.md.
Templates work inside lists and objects too: ["{{input.xyz_email}}"] resolves to the address.

More recipes

List open GitHub issues in acme/api labelled bug, rank them by impact, and open a Jira task in OPS with the ranking, assigned to me.
github_list_issues (labels bug) → LLM ranks them → jira_create_issue with the ranking as the description and assignee: "me". Save the workflow and run it whenever you triage, or from your own scheduler through the execute API.
Check CI on main in acme/web; if it’s failing, DM me which checks failed and the last three commits.
github_get_checks (no ref = default branch) → github_list_commits (limit: 3) → slack_send_message to @me with {{checks.summary}}, with a condition on {{checks.state}} equals failure so nothing is sent when it’s green.
Summarize what I committed in acme/api since yesterday, post it to #standup, and mark the card “Token refresh” on Sprint 12 done.
github_list_commits with since: "{{yesterday}}" and author → LLM summary → slack_send_message and trello_update_card (list: "Done").
List PRs in acme/web with no update for a week, with who they’re waiting on, and email me the list.
github_list_pull_requests gives days_since_update and requested_reviewers → LLM writes the digest → gmail_send to me.
Write release notes for acme/api from commits since 2026-10-01 and the CHANGELOG, and attach them to the Jira release ticket OPS-140.
github_list_commits + github_get_file (CHANGELOG.md) → LLM → jira_add_comment with attachment_name: "release-notes.md".
A workflow has a fixed set of steps: it can summarize a list into one ticket, message or document, but not create one ticket per item. For per-item work, run a workflow once per item through the API.

Governance for developer data

  • Issue text is untrusted. Anyone who can open an issue writes it, so github_get_issue and github_list_issues label their output internal and untrusted. With the rule template “Approve sends that mix web content with internal data” active, an email or comment built from an issue waits for a human. That stops a prompt injection hidden in an issue from mailing out your code.
  • Side effects are honest. Reads are read; creating or moving tickets and cards is write; comments, emails and invitations are egress (they reach people). A read_only role can run the read tools and nothing else.
  • Every call is on the receipt. GET /runs/{id}/authorization shows each tool call, its labels and the rule that decided it.

When something fails

Errors say what to change, and a failure that retrying can’t fix (a bad token, a missing permission, an unknown board) fails the step once instead of three times: