Write TypeScript hooks that run when work items change, on a schedule you describe in plain words, or across thousands of work items at once — and see exactly what every run did: structured logs, timing, the returned value, and errors mapped to the exact line of your code. Every save is versioned. Every mistake is one click from undone.
Install once, run the pre-filled sample to prove the connection, then save your first hook. Everything happens in one admin page inside Jira — no external service, no signup.
A one-time install, done by a Jira admin.
From the Atlassian Marketplace listing (once live), click Get it now and choose your site. The app installs through Atlassian's Forge platform — there is no separate download.
read:jira-work, write:jira-work, read:jira-user, and storage:app — read and write work items, read user profiles, and store your scripts. No admin scopes, no external network access.
Go to Settings (⚙) → Apps → Hooks. Only Jira admins can open the app or author scripts — enforced on every backend call, not just the page.
The Overview tab shows your hooks, last run, and running jobs at a glance.
It comes pre-filled. Click Run and you should see a green OK with your display name and recent work items — proof the app can reach your Jira.
Scripts get a typed jira API — search, get, comment, update, transition, iterate — plus jira.request for any Jira REST endpoint. Toggle Dry run to rehearse with writes suppressed and logged.
Bind it to one of ten work-item events, or build a schedule in plain words — every weekday at 09:00 becomes cron automatically, with a preview of the next runs. Scope it to specific projects, types, or changed fields with pickers loaded from your Jira.
Every triggered run is recorded: logs, timing, returned value, and line-numbered errors, replayable any time. Automation that fails tells you it failed.
Give your script a JQL and it runs once per matching item in the background — live progress, error samples, cancel any time, dry-run respected.
Need help or spotted a bug? Use the Report a bug and Suggest an improvement links in the app sidebar, or email support@taskhooker.com.
TypeScript or JavaScript — not Groovy, not a proprietary DSL. A curated, typed Jira API plus an escape hatch to any REST endpoint.
Created, updated, deleted, assigned, commented, worklogs, links, attachments, versions — each hook limited to the projects, types, or changed fields you pick.
"Every weekday at 09:00" becomes cron automatically, with the next three runs previewed in your local time. Custom cron for power users.
issue in hooked("stale-bugs") runs your script to decide what matches, and eleven built-ins — linkedIssuesOf, epicsOf, hasComments, hasWorklogs and more — work with no script at all, under the names ScriptRunner users already type. Broken queries degrade to no-match, never a broken filter.
Structured logs, duration, the returned value, and errors mapped to your exact line — for manual, event, scheduled, and bulk runs alike.
Every save keeps the previous 20 versions. A hook that broke at 3 a.m. is one click from the version that worked.
Flip a toggle and every write is suppressed and logged instead of sent. Simulate events. Rehearse a 10,000-item bulk change before making it.
Run a script over any JQL in the background — queued, batched, with live progress, per-item error samples, and cancel.
The app lives in Jira admin settings and every backend call independently verifies Administer Jira permission.
ScriptRunner for Jira Cloud is mid-migration from Atlassian Connect to Forge: saved Enhanced Search filters are being flagged incompatible, Behaviours is being folded into the main app, and the timeline has slipped to late 2026. Hooks was born on Forge — the destination they're migrating to — so there is no legacy to carry and nothing to break.
Every run — including the 3 a.m. ones — stores replayable logs, timing, results, and line-numbered errors. The category's oldest complaint, solved structurally.
Automatic on every save, restore in one click. No scripting tool in the category does this.
Rehearse any script or bulk change with writes suppressed and logged. No equivalent exists in ScriptRunner.
ScriptRunner Cloud stores scripts and logs on the vendor's own AWS (EU or US only). Hooks stores everything in Forge storage on your site — zero external egress, following your data residency.
The language your team already writes, with a typed API — not a JVM dialect with cloud-only restrictions.
Hooks is deliberately focused. Today ScriptRunner still offers more surface area:
Not in Hooks at launch — Atlassian's UI-Modifications API is still maturing, and we'd rather ship it well than ship it now.
ScriptRunner's catalog is a decade deep. Hooks ships the most-used recipes as one-click examples and closes the rest with plain TypeScript — while its JQL functions and scripted field are already built on the native Forge mechanisms ScriptRunner is still migrating to.
Waiting on Atlassian's Forge workflow modules to stabilise; on the roadmap the moment they do.
If your ScriptRunner usage is listeners, scheduled jobs, bulk fixes, and console scripting — the large majority of real-world usage — Hooks covers it with better visibility, versioning, and safety.
A Jira Cloud Forge app for writing automation in TypeScript or JavaScript instead of a proprietary scripting language. Scripts run from an in-product console, automatically on work-item events, on a schedule, or as background bulk jobs — and every run records its logs, timing, result, and line-numbered errors so automation never fails silently.
Yes. Hooks covers the core ScriptRunner for Jira Cloud workflow — event listeners, scheduled jobs, bulk operations, and an ad-hoc console — and adds replayable run records, automatic versioning with rollback, and dry-run. It's built natively on Forge with zero external egress, so scripts never leave Atlassian's infrastructure.
Ten kinds: work item created, updated, deleted, and assigned; comments; worklogs; links; attachments; and project version changes. Each hook can be scoped to specific projects, work item types, or (for updates) specific changed fields — picked from your Jira, not typed by hand.
Yes. Describe the schedule in plain words — every 15 minutes, every weekday at 09:00, monthly on day 1 — and the builder writes the cron for you, previewing the next three runs in your local time. Custom cron is available too. Schedules are checked every five minutes.
TypeScript or JavaScript — no Groovy, no proprietary language. Scripts get a small, typed Jira API (search, get, comment, update, transition, iterate) plus a generic escape hatch to call any Jira Cloud REST endpoint.
Write a script, give it a JQL, and Hooks runs it once per matching work item in the background — no browser timeout. Live progress, per-item error samples, cancel any time, and dry-run respected so you can rehearse first.
A toggle that suppresses every write to Jira — comments, updates, transitions — and logs what would have been sent instead. Reads run for real, so the log shows exactly what the script would have done. You can also simulate a work-item event from the console.
Yes, two ways. Built-in functions with the names ScriptRunner users already know — linkedIssuesOf("…"), subtasksOf("…"), parentsOf("…") — work in any search with no script at all. And issue in hooked("my-hook") runs a saved script of your own, which returns a JQL fragment or a list of work item keys. Broken queries degrade to a valid no-match result instead of breaking your filter, and script failures are recorded in Run history.
Yes. Hooks provides a read-only Scripted field whose value is computed per work item by your onField script — shown on the issue view, stored, and searchable in JQL. The classic ScriptRunner scripted-field pattern, running natively on Forge.
Not at launch. Live form-field rules depend on Atlassian's UI-Modifications API, which is still maturing. Rather than ship a half-working version, Hooks focuses on what it can do excellently today — Behaviours-style rules are on the roadmap.
In Atlassian-encrypted Forge storage tied to your Jira site — scripts, versions, run history, and job records alike. The app makes zero external network calls: no vendor servers, no analytics, no third parties.
Jira administrators only. The app lives in Jira's admin settings, and every backend endpoint independently verifies the caller holds the Administer Jira permission.
Hooks is in development, planned for the Atlassian Marketplace with a free tier for small teams (up to 10 users) and paid above that. Pricing is final at launch.
Every function runs inside Atlassian's sandboxed runtime. The app operates no external servers — unlike Connect-era scripting apps.
Scripts, versions, and run history live in Forge Key-Value Store, encrypted at rest by Atlassian and tied to your site's data residency.
No analytics, no telemetry, no third-party APIs. Your automation code and its logs never leave Atlassian's infrastructure.
Read exactly what the app accesses and stores in the Privacy and Security pages.