本文へ移動
cccskills
無料GitHub で公開

start-project

This skill should be used only when the user explicitly types "/start-project" (optionally with a slug). It begins a new tracked JellyRock project under docs/projects/, running scaffold-project.sh to create PLAN.md from docs/projects/_TEMPLATE.md and index it in the projects README, then walking the user through the Charter. For multi-session work that crosses a phase boundary or carries a decision worth recording as an ADR in docs/adr/. Do not auto-invoke on vague phrases like "let's start something"; for a single-session fix just do the work and capture any tail via /log followup.

日本語の概要は準備中です。原文の説明を表示しています。

jellyrock/jellyrockスター 46(GitHub 46 + cccskills 0)

実行スコア 未検証

インストール方法を見る

含まれるファイル(6)

  • SKILL.md13.5 KB
  • mailbox.sh1.7 KB
  • projects-dir.sh3.6 KB
  • projects-write.sh7.1 KB
  • repo-key.sh2.5 KB
  • scaffold-project.sh14.8 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Start Project

Contract

Goal. Begin a new tracked, multi-session project in the projects folder and bind the session to the project lifecycle. This is the front door for work that's too big for a single ad-hoc fire: it spans two or more sessions, crosses at least one phase boundary, or carries at least one decision worth recording. The PLAN starts as a lightweight stub that grows: enough structure to track the work, not a heavyweight charter ceremony. The skill splits along the cost boundary. The deterministic scaffold (collision-check, create the dir, copy the template, fill dated frontmatter, index the README row) is a zero-cost script; the judgment, co-designing the Charter (Goal / Success criteria / Out of scope / Phases) interactively with the user, stays in skill prose. That Charter co-design is real reasoning work (scoping a multi-session effort, drafting from incomplete information, iterating until the boundaries are right), which is why the skill is pinned at the judgment-grade tier even though its mechanics are scripted. Started by the agent it runs on the session's own model and effort; its pin applies when it is typed. Getting the Charter wrong front-loads drift across every session that follows.

Inputs. The arguments are an optional kebab-case slug. If present, use it. If absent, propose a short kebab-case slug from the work the user describes and confirm it before scaffolding. The projects folder is wherever start-project/projects-dir.sh says (docs/projects/ unless this machine maps the repo elsewhere); the script creates its template and index when they are missing. The skill also expects the user to be available to co-design the Charter: this is not a fire-and-forget scaffold.

Outputs.

  • A new YYYY-MM-{{slug}}/PLAN.md in the projects folder (where YYYY-MM is the current month), scaffolded from the project template, with the Charter filled in collaboratively, the Phases roughed in, Status at the first phase, and a kickoff in the template's skeleton. Where the projects folder is committed, the scaffold is committed at creation (a template stub; the Charter body commits later via /end-session).
  • Frontmatter set: project: = slug, status: active, created: and last-updated: = today (real dates from date, not a model guess), and waits-on: when the project cannot start until something else finishes.
  • A one-line entry in the projects folder's README.md active-projects table.
  • A first dated line in the Session log, a PLAN that passes resume-state.sh --check, and this session's claim on the project recorded.
  • The session-binding statement surfaced to the user (this session, and every future session on this project, must end with /end-session).

Success criteria.

  • A duplicate slug is caught before anything is scaffolded. By the scaffold script's own rule, an existing YYYY-MM-{{slug}}/ directory (including under _archive/) stops the skill and routes the user to /resume-project; a slug that only ends another project's name is not a duplicate.
  • The Charter is co-designed, not invented: Goal/Success/Out-of-scope are drafted from what's known and then iterated with the user; scope the skill is unsure about is asked, never assumed.
  • The PLAN is a single file: Charter, Phases, Status, kickoff, Reference and log all live in PLAN.md, never split across files (only DECISIONS.md sits beside it, and /end-session makes that).
  • status: active and the README index entry are both written, so the state-briefing and resume skills can find the project.
  • A project that waits on another project or a followup says so in waits-on:, and a project spun off from another is added to that project's waits-on: when it holds the parent up, so the briefing can show when either is unblocked.
  • Where the projects folder is committed, the scaffold PLAN.md and README row are committed at creation (path-restricted), so nothing pushed before /end-session can link to a PLAN missing from the tree. In this repo that commit is not pushed; in a projects home (a repo of its own) it is committed and pushed there. Where the folder is gitignored, there is nothing to commit.
  • The session is explicitly bound to the lifecycle, and the user is told /end-session is the mandatory close.

Failure modes to avoid.

  • Scaffolding over an existing slug. Always check for a collision (active and archived) with the script first. A silent overwrite destroys a real project's history.
  • A pre-check that disagrees with the scaffold. A hand-written glob (*-{{slug}}) flags a slug that merely ends another project's name; the script's --check uses the scaffold's own rule.
  • Inventing scope to fill the Charter. If the Goal or Success criteria aren't clear from the conversation, ask a clarifying question in chat; do not guess a scope and write it as if confirmed. A fabricated Charter is worse than an empty one.
  • Splitting the PLAN. Charter, Phases, Status, kickoff, Reference and log stay in one PLAN.md. Don't break them into sibling files for tidiness.
  • Silently rewriting the Charter as scope drifts. Intent stays mutable under the lightweight model: there's no mandatory immutability flip. But scope changes are recorded as dated decisions in the Status section (a big shift gets an explicit scope-cut decision), not by quietly editing the Charter in place. That preserves the original intent as an anchor you can diff against.
  • Forgetting to bind the session. The session-end discipline is the whole point of the lifecycle. If the binding statement isn't surfaced, the project can drift into an un-closed session and its state never gets written back.
  • Reaching for /start-project on work that's actually ad-hoc. A single-session fix doesn't earn a PLAN. Over-scaffolding turns a 20-minute job into lifecycle ceremony.

When not to use.

  • The work fits in one session, doesn't cross a phase boundary, and carries no decision worth recording. Do it without a PLAN; capture any deferred tail via /log followup.
  • The project already exists. Use /resume-project {{slug}} to pick it up: /start-project refuses duplicates by design.
  • You want to triage what to work on next rather than commit to a new tracked effort. That's /focus (or /catchup for a state briefing); /start-project assumes the decision to start is already made.
  • The "project" is really a decision that needs deliberation, not multi-session execution. A decision is recorded with /log decision; only wrap it in a project if the execution spans sessions.

Implementation

The mechanics are scripts beside this skill: scaffold-project.sh (the collision check and the scaffold) and projects-dir.sh (where projects live), plus /resume-project's resume-state.sh for the PLAN check and the claim. Repo facts this skill reads: this repo's public posture; anything else a new project needs here (a file a hook regenerates from the projects folder, a risk every Charter in this repo should name) is in this skill's ## This repo, when it has one.

Step 1: Determine the slug

Use the slug the user passed. If none, propose a short kebab-case slug from the work they describe and confirm it; the script adds the YYYY-MM- prefix itself.

Step 2: Check the slug is free

Run bash .claude/skills/start-project/scaffold-project.sh --check {{slug}}. It writes nothing. Exit 1 with "already exists" means the project is there: stop and route the user to /resume-project {{slug}}. Exit 1 for a bad slug: propose another. Exit 0: go on. (The scaffold re-checks atomically in Step 4; this check only keeps the Charter co-design from being spent on a taken slug.)

Step 3: Co-design the Charter with the user (the judgment)

Work through the three Charter fields, Goal (one sentence), Success criteria (bulleted, verifiable) and Out of scope (bulleted), and rough in the Phases, each with an id (A, B, … or 1, 2, …). Draft from what is known, then iterate with the user; ask in chat when unsure, never assume. Also raise, when they apply:

  • Posture. When this repo's public posture is public and the work will touch committed files, say so now: every commit it makes must name no other repository or host, no person, and no secret.
  • Waits. Does this project need another project (another repo's, as {{owner}}/{{name}}/{{slug}}), one of its phases, a followup, or a date (after:{{date}}) to pass first? Those become its waits-on: (Step 5). Is it spun off from a project that cannot continue until this one lands? That project's waits-on: gets this slug. The values are in waits.md.

Settle the one-line Goal before Step 4: the script writes it into the README row.

Step 4: Scaffold via the script (the mechanics)

bash .claude/skills/start-project/scaffold-project.sh {{slug}} "{{one-line goal}}"

It re-checks the collision, creates the directory, copies the project template, fills project: / status: active / created: / last-updated: with real dates, and appends the README row; with no template or README in the projects folder (a gitignored tree on a fresh clone) it creates the shared ones first. If it exits non-zero, fix the cause and re-run; never hand-scaffold around it.

Step 5: Commit the scaffold stub (where the projects folder is committed)

Commit the new PLAN and its README row now, so nothing pushed before /end-session can link to a PLAN missing from the tree. First regenerate any file this repo's hooks rebuild from the projects folder, as this skill's ## This repo says (when it has one), then:

bash .claude/skills/start-project/scaffold-project.sh --commit {{slug}} --subject "{{subject naming the slug, in this repo's commit style}}" [--with {{regenerated file}}]...

In this repo it prints committed as {{sha}} on {{branch}}: check that is the intended branch (another session may share the working tree). Do not push: that stays with /end-session. not committed: … means the folder is gitignored, and there is nothing to commit. A refusal names its cause (other edits in the README, a hook): fix it and run it again, never --no-verify.

In a projects home (a repo of its own) it commits there and pushes, and prints committed and pushed as {{sha}} to the projects home; a NOTE: line above it says what to run in that clone. A line starting scaffold-project: refused: or scaffold-project: not pushed: means nothing was committed and the stub stays in the home, uncommitted: the lines above it name the cause (the change overlaps the home's remote, a hook refused, or the remote was unreachable). Fix that cause, then run --commit again.

Step 6: Fill the PLAN

Write into the scaffolded PLAN.md, replacing each placeholder:

  • The Charter and Phases from Step 3.
  • waits-on: from Step 3 ({{slug}}, {{slug}}:{{phase id}}, fid:{{id}}, after:{{date}}, {{owner}}/{{name}}/{{slug}}; waits.md), or leave it empty. When this project holds up a parent, add this slug to the parent's waits-on: too.
  • Status: **Current phase:** A: {{name}}, Phase progress with the first phase 🚧 and the rest ⬜, and "none" for open questions until there are some. Leave the decisions list's placeholder line as it is: the decision script drops it when the first real decision arrives, and a - none line would be kept as a decision. A project that will keep a findings queue gets a ## 📋 Punch-list section right after Status, one - [ ] line per item.
  • The kickoff in the template's skeleton, for a session with no memory of this one: Starts at the first phase and its first step, what this session stopped at, questions still unanswered, then Verify first, Next in order, Required reading and Landmines as far as they are known; a part with nothing yet holds the single line none (no bullet).
  • The first dated line in the Session log.

Step 7: Check it, claim it, bind the session

Run bash .claude/skills/resume-project/resume-state.sh --check {{slug}} and fix every FAIL: it names; then bash .claude/skills/resume-project/resume-state.sh {{slug}}, which records this session's claim on the project and shows the PLAN as the next session will see it. Its DIRTY and not-pushed banners are expected here (the filled PLAN commits and pushes at /end-session); any other banner is worth a look. From this point, this session and every future session on this project are governed by the lifecycle. State to the user, and hold for the rest of this session:

This project session ends with /end-session, typed by you. It is the final step before this task is considered complete: when the work is done, it is printed as the last line for you to type, and the work is not reported done until it has run and its commit is pushed.

Hold to that: when the work is done, print /end-session alone in its own text block as the last thing in the message, and never invoke it yourself (a skill's model: and effort: pins apply only when the user types it).

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

コメント

ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。

まだコメントはありません。最初のコメントを書いてみませんか。

送信するとすぐに公開されます。メールアドレスや電話番号などの個人情報は書かないでください。URL は 2 つまでです。

0 / 1000 文字

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

同じリポジトリのスキル

catchup

無料

Session-start briefing: where did I leave off, what is in flight, what needs attention. One tested script reads git, the journal (followups, running work, cadences) and tracked projects and prints every fixed-threshold check that fires; JellyRock's own aggregator adds open PRs, high-engagement bugs, recent bug reports, current-branch CI, pending handoffs, open upstream-watch issues (Jellyfin releases and release candidates, Roku OS), recent ADRs, tech debt and architecture-doc staleness. Ends with one Suggested next move that hands off to /log, /done, /issue-triage, /runtime-triage, /ci-triage or /server-upgrade. Mandated by AGENTS.md's catchup-discipline rule: run at the start of any genuine new session, after a multi-day gap, or whenever you ask what the state of the world is.

日本語の概要は準備中です。原文の説明を表示しています。

jellyrock/jellyrock462026年10月26日 更新

ci-triage

無料

Diagnose a failed CI workflow run and fix it the /snag way. A tested read-only script fetches the run, reports every failed job and step with the log region around its errors (not the post-job cleanup), and classifies each against this repo's gates.tsv, printing the banner a gate carries when its obvious fix is the wrong one. Then: re-run only what is transient, reproduce locally, find the root cause, and show one decision screen; the chosen fix is built test-first and committed on a fix branch, never pushed. Use when a CI run failed on a pull request or on the default branch.

日本語の概要は準備中です。原文の説明を表示しています。

jellyrock/jellyrock462026年10月26日 更新

DEPRECATED, replaced by the `enrich` phase built into /crash-report. The old flow filed crash issues first and enriched them one by one afterward. The new flow (stage, then enrich, then file) pulls the dashboard backtrace before filing, so issues are born complete and architectural-class crashes go to their epic instead of becoming standalone issues. Do not invoke it for new work: run /crash-report and paste the backtraces during its enrich step. It stays only as a redirect; the `enrich-issue` script subcommand still exists as a legacy escape hatch for a crash issue filed before the change.

日本語の概要は準備中です。原文の説明を表示しています。

jellyrock/jellyrock462026年10月26日 更新

Process a Roku weekly crash-report CSV (or a zip holding one or more CSVs) into tracked GitHub issues and architectural-epic evidence, enriching before filing (stage, then enrich, then file). STAGE parses and filters the CSV, groups by pkg-path signature, builds each cited app version in a temporary git worktree, maps the transpiled `.brs` line back to the source `.bs` line, runs the GitHub dedup search, and writes a local worksheet where every crash starts pending; a mechanism hint (task-launch, network, other) orders which to pull first but never authorizes a file. ENRICH folds in the per-crash backtraces you paste from Roku's dashboard (a 7-day window, one click per crash, no bulk export), extracts each `&hNN` exception code, and routes every crash to a disposition (nothing files or aggregates without a backtrace): `file` (a scoped bug becomes a new per-signature [crash] issue, born enriched), `aggregate` (a known architectural class: `&h29` big-library too-many-task-threads, `&h23` render-thread execution timeouts, the `&hec` init `m.global.constants` race; upserted as one flat record comment per `file·function·line·version` onto the class epic, never a standalone issue), or `watch` (accepted noise, a spike comment only). FILE performs the GitHub writes (create, comment or reopen for scoped bugs; the epic record upsert for architectural classes) and writes a run-summary handoff. Dedup-aware and idempotent. Use when a fresh Roku crash CSV arrives (weekly). A deep dive on one crash goes to `/issue-triage <N>` after filing.

日本語の概要は準備中です。原文の説明を表示しています。

jellyrock/jellyrock462026年10月26日 更新

Draft a GitHub issue body for the JellyRock repo from a Reddit/Discord post or free-form bug report and submit it via forge.sh. Reads the YAML form templates under .github/ISSUE_TEMPLATE/ to know which fields are required, fills them by extracting from the input, asks for any missing required fields, validates the body matches the chosen template's schema, then runs forge.sh issue create with the auto-labels the template defines. Use when you have a user report (paste from anywhere) and want to formalize it into a properly-structured GitHub issue.

日本語の概要は準備中です。原文の説明を表示しています。

jellyrock/jellyrock462026年10月26日 更新

dep-major

無料

Walk a major dependency-version bump (a Renovate major PR, possibly a grouped one carrying several deps, or a package you name) through JellyRock's major-bump SOP so the judgment steps run the same way every time. Resolves each package and its from and to versions, fetches the upstream changelog/migration guide for that range, classifies the breaking changes, greps the codebase for the call sites those breaks actually hit, runs the mechanical gate that fits the dependency's type (a runtime BrightScript lib: validate, build, lint:bs, then test:unit and test:rta on a device; JS or Node tooling: test:scripts, then run the affected script; GitHub Actions: the PR's own CI plus a trace of the conditional paths CI doesn't exercise), and returns a go/no-go with any required migration surfaced (and applied on request). Majors never automerge (the org Renovate config), so this is the human-review path. Use when a Renovate major PR appears, or before bumping a dependency's major version by hand. Not for patch or minor bumps (those automerge after a soak) or for Jellyfin server releases (use /server-upgrade).

日本語の概要は準備中です。原文の説明を表示しています。

jellyrock/jellyrock462026年10月26日 更新

jellyrock のスキルをすべて見る

このスキルの問題を報告する