Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

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 9/23/2026
toolsrustbashreactnodegit

Security Analysis

A100/100

Scanned 9/23/2026

Install to Claude Code

$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 automatically 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-d48cfc7d/badge)](https://www.skillsdirectory.com/skills/intense-visions-harness-start-work-d48cfc7d)

More formats (shields.io, HTML) on the badges page.

Download Zip
Files
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).

Attribution

Intense-VisionsIntense-Visions
View sourceMore from Intense-Visions →
SSkills DirectorySkills Directory

Your tool, in front of Claude Code builders.

3 founder slots · $299/mo · GSC-verified traffic · sponsors can never buy grades.

See placements

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 (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Your tool, in front of Claude Code builders.

3 founder slots · $299/mo · GSC-verified traffic · sponsors can never buy grades.

See placements

Related Skills

ucoz-landing-skill

Playbook for creating and editing uCoz landing pages via MCP tools (`templates_tool`, `ftp_tool`, `modules_tool`). Use for tasks such as: "build a landing page", "update the homepage as a landing page", "create a promo page on the homepage", "add a lead form / menu / SEO to the homepage". Homepage: `page_list`, `page_get`; first publish — `page_update` with full `page_tmpl`; HTML edits after generation — `patch_template` (module_id=2, template_id=1), not `update_template`. Activate the mail f...

107 votes

Paperclip

Interact with the Paperclip control plane API for task coordination and governance. Use when checking assignments, updating issue status, posting comments, delegating work, managing routines, or calling Paperclip API endpoints.

805541 votes

Daw Music

Digital Audio Workstation usage, music composition, interactive music systems, and game audio implementation for immersive soundscapes.

761 votes

Instantly Rdsthomas Mission Control

Instantly.ai cold email outreach API - manage campaigns, leads, accounts, and analytics. Use for cold email automation, lead management, campaign creation/monitoring, and email account warmup.

761 votes

Caveman Compress

Compress natural language memory files (CLAUDE.md, todos, preferences) into caveman format to save input tokens. Preserves all technical substance, code, URLs, and structure. Compressed version overwrites the original file. Human-readable backup saved as FILE.original.md. Trigger: /caveman-compress FILEPATH or "compress memory file"

1066600 votes
View all in tools →