Skip to content

Commit efe628d

Browse files
authored
Merge pull request #237 from PostHog/tom/self-driving-jira-source
feat(self-driving): add Jira as a connected-tool inbox source
2 parents 3acc65d + 5c22549 commit efe628d

4 files changed

Lines changed: 11 additions & 9 deletions

File tree

context/skills/self-driving/description.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Each step file points to the next. Run them in order. **Start by reading `refere
1717
- **Trust the setup report.** `./posthog-setup-report.md` is ground truth for what is instrumented. Scan the codebase only for what the report won't cover.
1818
- **Every write must be idempotent.** List before you create. A duplicate `inbox-source-configs-create` returns 400 — recover by finding the existing row's `id` and calling `inbox-source-configs-partial-update` with `enabled: true`.
1919
- **Never disable a source the user already enabled.** You only switch things on (and tune scouts off); existing enabled rows are someone's deliberate choice.
20-
- **Never enable a connected-tool source the user hasn't confirmed they use.** GitHub Issues, Linear, Zendesk, and pganalyze are ask-then-connect, never blind.
20+
- **Never enable a connected-tool source the user hasn't confirmed they use.** GitHub Issues, Linear, Zendesk, pganalyze, and Jira are ask-then-connect, never blind.
2121
- **Stay off the internal surfaces.** Don't call `signals-scout-emit-signal` or any scratchpad-write tool, and don't change a scout's `emit` flag or `run_interval_minutes` — on configs, this skill only flips `enabled`. **Built-in scout bodies are never edited.** New scout skills are created in exactly one place: step 6b, and only ones the user approved there.
2222
- **Keep the scout troop small.** Every enabled scout is a recurring LLM spend. Step 6 enables only `signals-scout-general` plus the **one or two** specialists for the products this project uses most — never error tracking or session replay (those reach the inbox as native sources) — and step 6b adds **at most two** custom scouts. Everything else stays disabled.
2323
- **Batch your questions.** `wizard_ask` has a small per-run budget; one multi-select beats four yes/nos. Don't skip a step or drop a connector (e.g. Linear) or custom scouts setup to save calls.

context/skills/self-driving/references/2-read-context.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ Load the local tools via `ToolSearch select:Read,Glob,Grep`. Reach the PostHog t
3838
- **Logs**: is the PostHog logs product in use (per the profile)?
3939
- **CSP**: is a Content-Security-Policy with PostHog CSP reporting configured?
4040
- **Support**: does the team use PostHog support/conversations (per the profile)?
41-
- **Issue trackers**: any hints of Linear, Zendesk, or pganalyze (you will still ask in step 5 — hints only shape the question, they never authorize enabling).
41+
- **Issue trackers**: any hints of Linear, Zendesk, pganalyze, or Jira (you will still ask in step 5 — hints only shape the question, they never authorize enabling).
4242

4343
Do NOT crawl the whole source tree. If a question can't be answered cheaply, record "unknown" and move on — unknowns default to asking the user about sources; for scouts, an unconfirmed surface won't rank among the most-used products, so step 6 won't enable its scout.
4444

context/skills/self-driving/references/4-sources.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,6 @@ Reach the source-config tools through the PostHog `exec` tool — `info` then `c
4040
- `llm_analytics` (internal-only, not a user-facing responder)
4141
- `logs` (not a v1 responder)
4242
- Anything with `source_type` `evaluation` or `alert_state_change`
43-
- The connected-tool sources (`github`, `linear`, `zendesk`, `pganalyze`) — those are step 5, ask-first.
43+
- The connected-tool sources (`github`, `linear`, `zendesk`, `pganalyze`, `jira`) — those are step 5, ask-first.
4444

4545
Record every enable/skip decision with its reason — the report needs them.

context/skills/self-driving/references/5-connected-tools.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ next_step: 6-scouts.md
44

55
# Step 5 — Connected-tool sources (ask, then connect)
66

7-
External tools can feed the inbox too: GitHub Issues, Linear, Zendesk, and pganalyze. Each needs a **data warehouse source** before its signal source produces anything — a source row without the warehouse connection is dormant: harmless, but silent until the source syncs. Never enable one the user hasn't confirmed.
7+
External tools can feed the inbox too: GitHub Issues, Linear, Zendesk, pganalyze, and Jira. Each needs a **data warehouse source** before its signal source produces anything — a source row without the warehouse connection is dormant: harmless, but silent until the source syncs. Never enable one the user hasn't confirmed.
88

9-
Two of these the run can connect **itself**: GitHub Issues, and Linear via a one-click OAuth link (dedicated connector files below). The other two — Zendesk and pganalyze — need API credentials this run never collects, so the run does **not** send the user to the UI and does **not** check whether they connected: it just arms the dormant responder and records a follow-up. The user finishes those later (a downstream reminder prompts them).
9+
Two of these the run can connect **itself**: GitHub Issues, and Linear via a one-click OAuth link (dedicated connector files below). The other three — Zendesk, pganalyze, and Jira — need API credentials this run never collects, so the run does **not** send the user to the UI and does **not** check whether they connected: it just arms the dormant responder and records a follow-up. The user finishes those later (a downstream reminder prompts them). (Jira's warehouse source authenticates with an Atlassian API token, not the `kind=jira` OAuth integration, so there is no one-click link to hand over — treat it exactly like Zendesk.)
1010

1111
## Status
1212

@@ -34,29 +34,31 @@ Load `wizard_ask` via `ToolSearch select:mcp__wizard-tools__wizard_ask`. Reach `
3434
{ label: "GitHub Issues", value: "github-issues" },
3535
{ label: "Linear", value: "linear" },
3636
{ label: "Zendesk", value: "zendesk" },
37-
{ label: "pganalyze", value: "pganalyze" }
37+
{ label: "pganalyze", value: "pganalyze" },
38+
{ label: "Jira", value: "jira" }
3839
]
3940
}
4041
```
4142

42-
2. Call `external-data-sources-list` once (step 2's project profile also lists warehouse sources when it exists). For each picked tool whose source already exists (`source_type` `Github` / `Linear` / `Zendesk` / `PgAnalyze`): record "already connected" — no connector flow needed, just enable its responder row (step 4 below).
43+
2. Call `external-data-sources-list` once (step 2's project profile also lists warehouse sources when it exists). For each picked tool whose source already exists (`source_type` `Github` / `Linear` / `Zendesk` / `PgAnalyze` / `Jira`): record "already connected" — no connector flow needed, just enable its responder row (step 4 below).
4344

4445
3. Dispatch each picked tool that's still missing:
4546

4647
- **GitHub Issues** → read `references/5a-github.md` and follow it.
4748
- **Linear** → read `references/5b-linear.md` and follow it.
48-
- **Zendesk / pganalyze** → this run can't create their sources (it never collects the API credentials they need), so **don't ask the user to connect them and don't verify**. Just enable the dormant responder (step 4 below) and record "picked but not connected" with a follow-up. A downstream reminder prompts the user to add the warehouse source later; the responder stays dormant (harmless) and starts emitting once that source syncs.
49+
- **Zendesk / pganalyze / Jira** → this run can't create their sources (it never collects the API credentials they need — Jira wants an Atlassian subdomain, email, and API token), so **don't ask the user to connect them and don't verify**. Just enable the dormant responder (step 4 below) and record "picked but not connected" with a follow-up. A downstream reminder prompts the user to add the warehouse source later; the responder stays dormant (harmless) and starts emitting once that source syncs.
4950

5051
4. Enable the source row (step 4's write recipe) for every tool the user picked — created, verified, and picked-but-not-connected alike (a dormant row is harmless and saves a later trip):
5152

5253
- GitHub Issues → `github` / `issue`
5354
- Linear → `linear` / `issue`
5455
- Zendesk → `zendesk` / `ticket`
5556
- pganalyze → `pganalyze` / `issue`
57+
- Jira → `jira` / `issue`
5658

5759
5. Record each picked tool's final class honestly — the report consumes these verbatim:
5860

5961
- **connected by this setup** — the connector flow created the source (you have its id; the first sync starts automatically)
6062
- **already connected** / **verified connected** — the source row was seen in `external-data-sources-list`
61-
- **picked but not connected** — the user picked the tool but no live warehouse source exists: Zendesk / pganalyze (never connected in-run), Linear when its integration didn't land, or a GitHub Issues fallback the user skipped. **Enable the dormant responder and add a "Connect <tool>…" follow-up** — this is harmless, because a responder only emits once its warehouse source actually syncs, so a dormant row just saves the user a later trip. Record it honestly — never write that the user "confirmed connecting" and never "not used". Phrase it as "you selected <tool>, but no warehouse source was detected — the responder is enabled and stays dormant until you add the source and it starts syncing", plus the follow-up with the new-warehouse-source URL
63+
- **picked but not connected** — the user picked the tool but no live warehouse source exists: Zendesk / pganalyze / Jira (never connected in-run), Linear when its integration didn't land, or a GitHub Issues fallback the user skipped. **Enable the dormant responder and add a "Connect <tool>…" follow-up** — this is harmless, because a responder only emits once its warehouse source actually syncs, so a dormant row just saves the user a later trip. Record it honestly — never write that the user "confirmed connecting" and never "not used". Phrase it as "you selected <tool>, but no warehouse source was detected — the responder is enabled and stays dormant until you add the source and it starts syncing", plus the follow-up with the new-warehouse-source URL
6264
- **not used** — the tool was **not picked** in the connected-tools multi-select. No responder, no follow-up; record "skipped (not used)".

0 commit comments

Comments
 (0)