Work your Jira backlog directly from a FRAME session
I created a jira-cli skill with the skill-creation cartridge - Jira work items become first-class citizens in any FRAME session.
One line in CLAUDE.md is all it takes to pull Jira work items directly into a FRAME session. Here’s what that looks like in practice.
In CLAUDE.md I added the following lines:
## Skills
- jira-cli — Jira issue tracker (project: FRAME)
That’s all what’s needed.
❯ list all open work items
⏺ Skill(jira-cli) ⎿ Successfully loaded skill
⏺ Here are all open work items in the FRAME project:
In Progress (1)
| Key | Type | Summary |
|---|---|---|
| FRAME-2 | Story | Task 42 |
To Do (14)
| Key | Type | Summary |
|---|---|---|
| FRAME-19 | Task | Minor code cleanup: fix docstring contradiction and extract duplicated patch text |
| FRAME-18 | Task | Test cleanup: add missing edge case tests and remove stale TDD docstrings |
| FRAME-17 | Task | Fix README docs: PyYAML claim and missing env vars |
| FRAME-16 | Bug | Use atomic writes in patch_gsd.sh |
| FRAME-15 | Bug | Emit warning on notebook deletion failure |
| FRAME-14 | Task | Replace deprecated datetime.utcnow() |
| FRAME-13 | Bug | Fix auth error misclassification on TOCTOU race |
| FRAME-12 | Task | Resolve max_cache_age_days implementation gap |
| FRAME-11 | Task | Replace personal path in README and man page examples |
| FRAME-10 | Bug | Fix _get_daily_limit() crash on non-numeric or zero env var |
| FRAME-9 | Bug | Add — separator guard to nlm positional args |
| FRAME-8 | Task | Pre-release gitignore cleanup: untrack .claude/, .frame/, .DS_Store |
| FRAME-7 | Bug | Fix YAML serialization: quote URL and file path values |
| FRAME-4 | Subtask | Sub-Task 2.1 |
15 open items total: 6 bugs, 7 tasks, 1 story, 1 subtask.
These items were generated by a code-audit cartridge run against the notebooklm skill project.
After running /frame load sw-development:
…
⏺ What are we building? Give me a one-line description — specific enough that “done” is unambiguous.
✻ Brewed for 1m 3s
❯ load work item FRAME-7. Fix the issue and also update the work item correctly in jira in between and at the end
⏺ Skill(jira-cli) ⎿ Successfully loaded skill
⏺ Bash(jira issue view FRAME-7) ⎿ 🐞 Bug 🚧 To Do ⌛ Thu, 26 Mar 26 👷 Unassigned 🔑️ FRAME-7 💭 0 comments 🧵 0 linked
# Fix YAML serialization: quote URL and file path values
… +18 lines (ctrl+o to expand)
⏺ FRAME-7 loaded. The goal and acceptance criteria are well-defined. Let me work through SHAPE.
Goal: Fix YAML serialization in scripts/research.py — apply json.dumps() wrapping (or switch to yaml.dump()) to URL and file path values in _write_recipe (lines 371-376) and _build_cache_content (line 106), so values containing : or # don’t corrupt the recipe or cache files.
Does that capture the goal accurately, or do you want to adjust the wording?
❯ fits
⏺ FRAME ▸ Working on an existing codebase. → Create a branch for this session? (y / skip)
⏺ User answered Claude’s questions: ⎿ · Create a feature branch for this fix? → Yes (Recommended)
⏺ Branch name — I’ll use fix/frame-7-yaml-quoting. Confirm, or type a different name?
❯ yes
Branch created. Stack is Python 3.11 / stdlib / pytest 8.x — consistent with the existing codebase.
Constraints — are there any hard constraints on how to fix this? The ticket suggests two options: json.dumps() wrapping (consistent with existing style) or switching to yaml.dump(). Any preference, or shall I recommend?
❯ recommend
⏺ Recommendation: json.dumps() wrapping — it’s consistent with how name, description, and queries are already handled in the same functions. yaml.dump() would be a larger refactor with more test surface area, and the ticket is specifically a contained fix.
Constraint recorded as: no new dependencies; apply json.dumps() to URL/path values only — consistent with existing style.
Agreed?
❯ agreed
⏺ References — any coding conventions or style guides I should follow? Or skip — I’ll read the existing code patterns directly.
❯ skip
⏺ Acceptance Criteria — from the ticket:
▎ All URL/path values in _write_recipe and _build_cache_content are quoted; a URL containing : or # round-trips correctly through write/load.
Does that cover it, or anything to add?
❯ yes
⏺ Out of scope — what are we explicitly not building? Suggested: no changes to yaml.dump() refactor, no other YAML fields, no recipe format changes. Confirm or adjust?
❯ confirm
⏺ Path decision: This is a contained fix — two specific lines in one file, implementation approach is unambiguous, no design uncertainty. Recommend skipping DESIGN.
Full SHAPE summary to confirm before closing the gate:
Goal : Fix YAML serialization in scripts/research.py — apply json.dumps() to URL/path values in _write_recipe (lines 371-376) and _build_cache_content (line 106) Stack : Python 3.11, stdlib, pytest 8.x Branch : fix/frame-7-yaml-quoting Constraints: No new dependencies; json.dumps() only — consistent with existing style References : none Acceptance : All URL/path values in _write_recipe and _build_cache_content are quoted; a URL containing : or # round-trips correctly through write/load Out of scope: yaml.dump() refactor, other YAML fields, recipe format changes Path : Contained fix (SHAPE → BREAKDOWN → BUILD → CHECK; DESIGN skipped)
Does this look right?
❯ yes
… Claude Code doing its thing … … …
⏺ FRAME ▸ Session complete.
Project : Fix YAML serialization — URL/path quoting in scripts/research.py
Cartridge: sw-development v1.0
Units : 1 complete
Branch : merged into master
PROJECT.md updated with Handoff. Safe to /clear.
Jira item FRAME-7 was set to Done in the end and got a proper comment:
Fixed in branch fix/frame-7-yaml-quoting.
Applied json.dumps() to bare URL/path list items in three locations:
- _build_cache_content (line 113): source_urls list items
- _write_recipe (line 408): urls list items
- _write_recipe (line 412): files list items
Consistent with existing json.dumps() usage for name/description/queries. 5 round-trip tests added (F-005, F-008); 176/176 passing.
Claude Code does the heavy lifting — you stay in control by answering its questions at each step.