Skip to content
Back to skills

Harness Start Work

ASecurity

> Claim a tracker issue by assigning it to the current user. The assignment is > the work-start signal: a project board's status-sync automation reacts to it > and moves the card to "In progress", so the board stays truthful without > anyone dragging cards.

  • 21 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 23, 2026
toolsrustbashreactnodegit

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 23, 2026

npx -y skills add Intense-Visions/harness-engineering --skill harness-start-work --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Harness Start Work?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Harness Start Work
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/intense-visions-harness-start-work/badge)](https://www.skillsdirectory.com/skills/intense-visions-harness-start-work)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
# Harness Start Work

> Claim a tracker issue by assigning it to the current user. The assignment is
> the work-start signal: a project board's status-sync automation reacts to it
> and moves the card to "In progress", so the board stays truthful without
> anyone dragging cards.

## When to Use

- When you (or an agent) pick up an issue and are about to start work on it.
- At the start of a feature or bug fix, before opening a branch or PR, so the
  board reflects who is working on what.
- As the first step of any "work this issue" flow — it is the entry contract for
  the `In progress` column.
- After `harness-roadmap-pilot` has selected the next item: that skill scores and
  picks; this one performs the tracker-side mechanics of starting it.
- NOT to move a card to `In review` — a PR that closes the issue does that, if
  the project automates it.
- NOT to set human-judgment columns like `Blocked` or `Ready for QA`. Automation
  never owns those; set them yourself.
- NOT to edit the board's Status field directly. Assign the issue and let the
  board move itself.
- NOT when the project has no issue tracker integration — there is nothing to
  assign, and this skill has no value.

## Configuration

Everything project-specific is configuration; the skill itself hardcodes no
board, workflow, repository, or wrapper script. In `harness.config.json`:

```json
{
  "skills": {
    "startWork": {
      "assignCommand": "node scripts/start-work.mjs",
      "statusSyncWorkflow": "Project Board → In progress",
      "boardUrl": "https://github.com/orgs/acme/projects/20",
      "tokenSecret": "BOARD_PROJECT_TOKEN"
    }
  }
}
```

| Key                  | Meaning                                                                 | If absent                                            |
| -------------------- | ----------------------------------------------------------------------- | ---------------------------------------------------- |
| `assignCommand`      | A repo wrapper that takes the issue number and performs the assignment. | Fall back to `gh issue edit <n> --add-assignee @me`. |
| `statusSyncWorkflow` | Display name of the workflow that moves the card.                       | Skip the workflow check; verify the assignment only. |
| `boardUrl`           | Where a human can see the board, for reporting.                         | Omit it from output.                                 |
| `tokenSecret`        | Name of the secret the automation uses, for escalation messages.        | Describe the failure without naming a secret.        |

**The skill degrades honestly.** With no configuration it still assigns the
issue via `gh` and verifies the assignment — it simply cannot claim the board
moved, and must not say that it did.

## Process

### Phase 1: ASSIGN — Claim the issue

1. Confirm the target issue number. Accept it with or without a leading `#`
   (e.g. `123` or `#123`).
2. Read `skills.startWork` from `harness.config.json`.
3. Assign the issue:
   - If `assignCommand` is configured, run it from the project root with the
     issue number as its argument.
   - Otherwise run `gh issue edit <issueNumber> --add-assignee @me`.

   Either path needs only the runner's own `gh` auth with repo scope — **not** a
   Projects credential. The board write happens server-side in the project's own
   automation, under its own secret.

4. If the command exits non-zero, read its message. The common causes are `gh`
   not authenticated (`gh auth status`) or an issue number that does not exist in
   this repository. Fix and retry — do **not** fall back to editing the board by
   hand.

### Phase 2: VERIFY — Confirm the board moved itself

1. Confirm the assignment landed:

   ```bash
   gh issue view <issueNumber> --json assignees --jq '.assignees[].login'
   ```

   An empty result is a failure, not a pass. Do not proceed to report success.

2. If `statusSyncWorkflow` is configured, the automation fires on the
   `issues.assigned` event. Give it a few seconds, then confirm:

   ```bash
   gh run list --workflow="<statusSyncWorkflow>" --limit 1 \
     --json conclusion --jq '.[0].conclusion'   # expect: success
   ```

3. If no `statusSyncWorkflow` is configured, **say so** rather than implying the
   board moved. Report: "assigned; no status-sync workflow is configured, so the
   board state was not verified."

4. Do NOT manually set the Status field. A card that did not move is a
   credential or workflow problem (see Escalation), not a reason to edit the
   board.

## Harness Integration

- **`harness skill run harness-start-work --issue <n>`** — Run this skill.
- **`harness skill validate harness-start-work`** — Validate this skill before
  shipping changes to it.
- **`harness-roadmap-pilot`** — Selects and scores the next item. This skill is
  the tracker-side step that follows it; roadmap-pilot decides _what_, this
  performs _starting_ it.
- Composes with whatever status-sync automation the project runs. This skill is
  the human/agent entry point; those workflows perform the board writes. The
  seam between them is the `issues.assigned` event, not a shared credential.

## Success Criteria

- The target issue is assigned to the current user, verified via
  `gh issue view <n> --json assignees` returning a non-empty login.
- When `statusSyncWorkflow` is configured, its most recent run concludes
  `success` and the card reads `In progress`.
- When it is not configured, the report explicitly states the board was not
  verified rather than implying it moved.
- No manual edit was made to the board's Status field.

## Examples

### Example A: a project with a configured wrapper and status sync

```bash
$ harness skill run harness-start-work --issue 123
Assigning issue #123 to you (@me)…
✓ Assigned #123.

$ gh run list --workflow="Project Board → In progress" --limit 1 --json conclusion --jq '.[0].conclusion'
success
# The board card for #123 now reads: In progress
```

Continue with the work; when you open a PR that closes #123, the project's
`In review` automation moves the card again.

### Example B: a project with no board automation configured

```bash
$ harness skill run harness-start-work --issue 88
No skills.startWork config found — using `gh issue edit 88 --add-assignee @me`.
✓ Assigned #88 to @bstevenski.
⚠ No statusSyncWorkflow is configured, so board state was NOT verified.
```

The honest report is the deliverable here. The skill did what it could and said
what it could not confirm.

## Rationalizations to Reject

| Rationalization                                                     | Reality                                                                                                                                                                                     |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| "I'll just drag the card to In progress on the board myself."       | The point of this skill is that assignment drives the board. A hand-dragged card drifts the moment the automation next runs; assign the issue and let the workflow own Status.              |
| "I don't need to assign it — I'll remember I'm working on it."      | An unassigned issue never reaches `In progress`, so nobody else can see who is on what. Assignment is the entry contract, not a formality.                                                  |
| "The assignment didn't move the card, so I'll set Status manually." | A card that did not move signals a credential or workflow failure. Fixing Status by hand hides the breakage so it recurs on the next issue. Escalate the workflow failure instead.          |
| "I'll set it to In review now since I'm about to open the PR."      | This skill only starts work. `In review` is driven by the PR. Setting it early desyncs the board from reality.                                                                              |
| "No workflow is configured, but the card probably moved anyway."    | "Probably moved" is not verification. With no configured workflow this skill cannot confirm board state, and must report that it did not — an unverified claim is worse than an absent one. |
| "`gh issue view` returned nothing, but the edit command exited 0."  | A zero exit with an empty assignee list means the assignment did not land. Trust the observed state, not the exit code.                                                                     |

## Escalation

- **When the assignment succeeds but the card never moves to `In progress`:**
  Inspect the workflow run — `gh run list --workflow="<statusSyncWorkflow>" --limit 1`.
  A failure resolving the project node usually means the automation's token lost
  repository access. Report: "status sync failed for issue #N — the board token
  likely lacks repo Issues access; it needs re-scoping." Do not patch the board
  by hand.
- **When `gh` reports the issue does not exist:** Confirm you are in the correct
  repository and the number is right. A number from another repository will not
  resolve.
- **When no `skills.startWork` config exists and the project clearly has a board:**
  Do not guess the workflow name. Assign the issue, report that board state was
  unverified, and suggest adding the config block.

## Skill Test Scenarios

### Scenario 1: Rationalization — "I'll just drag the card myself"

Input: The agent is asked to start work on #123 and considers opening the board
UI to move the card instead of assigning the issue.
Expected: The agent rejects the shortcut per the Rationalizations table, assigns
the issue, and lets the automation move the card.

### Scenario 2: Rationalization — "The card didn't move, so I'll set Status manually"

Input: The assignment landed, but the card is still in `Backlog` after the
workflow ran.
Expected: The agent does NOT edit Status. It inspects the workflow run,
identifies the credential failure, and escalates.

### Scenario 3: Honest degradation — no configuration present

Input: A project with no `skills.startWork` block and no known workflow name.
Expected: The agent assigns via `gh`, verifies the assignee, and explicitly
reports that board state was not verified — rather than asserting the card moved.

### Scenario 4: Escalation — issue number does not resolve

Input: `--issue 99999`, where #99999 is not an issue in this repository.
Expected: The agent reads the non-zero exit, does not retry blindly, does not
touch the board, and reports the likely cause (wrong repo or bad number).

Files in this skill

  • SKILL.md10.5 KB
  • skill.yaml1.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…