Atlassian Forge · Jira Cloud · Zero external egress

Jira automation you can
actually see.

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.

Hook escalate-stale-bugs onSchedule · 0 9 * * 1-5 ✓
Run OK · 412 ms · 7 log lines ✓
Log Escalated BUG-231, BUG-245 → commented + assigned
Version v14 — previous 20 kept, roll back in one click ✓

How it works

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.

Set it up — about two minutes

A one-time install, done by a Jira admin.

  1. Install the app on your Jira Cloud site.

    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.

  2. Approve the permissions.

    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.

  3. Open Hooks from Jira admin settings.

    Go to Settings (⚙) → Apps → Hooks. Only Jira admins can open the app or author scripts — enforced on every backend call, not just the page.

Use it — first hook in five minutes

The Overview tab shows your hooks, last run, and running jobs at a glance.

  1. Run the sample script in the Console.

    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.

  2. Write your automation in TypeScript.

    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.

  3. Save it as a hook and pick when it runs.

    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.

  4. Enable it — then watch it in Run history.

    Every triggered run is recorded: logs, timing, returned value, and line-numbered errors, replayable any time. Automation that fails tells you it failed.

  5. Need to change 10,000 work items? Use a bulk job.

    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.

What you get

Considering ScriptRunner — or leaving it?

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.

Where Hooks is ahead

  1. Observability, not guesswork.

    Every run — including the 3 a.m. ones — stores replayable logs, timing, results, and line-numbered errors. The category's oldest complaint, solved structurally.

  2. Version history and rollback.

    Automatic on every save, restore in one click. No scripting tool in the category does this.

  3. Dry-run before you commit.

    Rehearse any script or bulk change with writes suppressed and logged. No equivalent exists in ScriptRunner.

  4. Your scripts stay in Atlassian.

    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.

  5. TypeScript, not Groovy.

    The language your team already writes, with a typed API — not a JVM dialect with cloud-only restrictions.

Where ScriptRunner is ahead — honestly

Hooks is deliberately focused. Today ScriptRunner still offers more surface area:

  1. Behaviours (dynamic form rules).

    Not in Hooks at launch — Atlassian's UI-Modifications API is still maturing, and we'd rather ship it well than ship it now.

  2. Breadth of the built-in script library.

    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.

  3. Workflow post-functions and validators.

    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.

Frequently asked questions

What is Hooks for Jira?

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.

Is Hooks a ScriptRunner alternative?

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.

Which Jira events can trigger a hook?

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.

Can hooks run on a schedule?

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.

What language are hooks written in?

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.

How do bulk operations work?

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.

What is dry-run mode?

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.

Does Hooks support custom JQL functions?

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.

Does Hooks support scripted fields?

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.

Does Hooks support Behaviours (dynamic form rules)?

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.

Where do my scripts and data live?

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.

Who can create and run hooks?

Jira administrators only. The app lives in Jira's admin settings, and every backend endpoint independently verifies the caller holds the Administer Jira permission.

Is Hooks free?

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.

Built on Forge — your scripts stay in Atlassian