Skip to content

feat: expand internal skills across agent harnesses - #7

Merged
sparkus merged 3 commits into
mainfrom
fm/fm-cross-harness-skills
Aug 3, 2026
Merged

feat: expand internal skills across agent harnesses#7
sparkus merged 3 commits into
mainfrom
fm/fm-cross-harness-skills

Conversation

@sparkus

@sparkus sparkus commented Aug 3, 2026

Copy link
Copy Markdown
Owner

Intent

Make firstmate's internal skills discoverable on grok and codex, not just claude, and add one new agent-only skill for ticket-queue discipline. This is firstmate's own shared tracked material.

VERIFY first (do not skip): confirm with evidence what grok, codex, and claude actually resolve for project-level skills - which paths each harness reads, that a symlink is not assumed to work without observation, and that git preserves mode-120000 symlinks. Record findings in the PR body / maintainer verification doc. Key observed fact: a grok 0.2.118 session in this worktree loaded firstmate-coding-guidelines from the project path (.../.grok/skills/... which is a symlink to .agents/skills), NOT from ~/.grok/skills (skill absent from user home); confirmed via grok inspect --json source.type=project. Codex codex-cli 0.146.0-alpha.9.2 via codex debug prompt-input listed skill root r0=.../firstmate/.agents/skills and Available skills including firstmate-coding-guidelines and ticket-queue-discipline. Claude discovery remains via .claude/skills symlink. All three harness skill paths committed as git mode 120000.

Wire discovery so .agents/skills remains the single canonical source (no duplicated skill content). Match the claude pattern for .codex/skills and .grok/skills symlinks to ../.agents/skills. Document verified evidence.

Add ONE agent-only internal skill ticket-queue-discipline under .agents/skills with metadata.internal: true and user-invocable: false. Trigger: before claiming, dispatching, closing, or auditing tracker-backed ticket work. Content is JUDGMENT ONLY: one authoritative live tracker; claim atomically at dispatch; verify acceptance criteria against code and merge history at pickup; close with satisfied-by naming the merged PR; decision classes with one-line reasons; convergence; every decision becomes an executable test; evidence honesty.

Acceptance: verified evidence of what each harness resolves in PR body; single canonical .agents/skills; new skill loads on all three harnesses; existing claude discovery unbroken and proven by CI symlink invariants. Stay inside skill discovery plus the one new skill.

PR must open against captain fork (sparkus/firstmate), base origin/main - not upstream kunchenguid.

What Changed

  • Add Codex and Grok project-discovery symlinks to the canonical .agents/skills tree, with CI invariants matching Claude so all three harnesses share one tracked source.
  • Add the agent-only ticket-queue-discipline skill for live-tracker claims, acceptance and merge verification, decision escalation, convergence, executable tests, and honest close-out evidence.
  • Document verified runtime discovery for Claude, Codex, and Grok, including resolved project paths, symlink behavior, and git mode 120000 preservation.

Risk Assessment

✅ Low: Captain, the prior finding is resolved with honest Claude runtime evidence, the explicitly authorized post-merge confirmation remains clearly bounded, and the source wiring is canonical and well-contained.

Testing

Baseline scope checks, live three-harness discovery, project-versus-user provenance, symlink and canonical-source verification, and the focused documentation contract passed; initial budget-capped Claude probes were retried successfully without the artificial cap, reviewer-visible evidence was captured, and the raw debug log was replaced by a sanitized excerpt.

Evidence: Live Claude/Codex/Grok discovery transcript
^D��Harness versions:
grok 0.2.118 (1e1687c1cf6a) [stable]
codex-cli 0.146.0-alpha.9.2
2.1.220 (Claude Code)
Grok project skill resolution:
{
  "skill": {
    "name": "ticket-queue-discipline",
    "description": "Agent-only judgment for tracker-backed ticket work. Load before claiming, dispatching, closing, or auditing tickets in a project tracker so readiness, claims, and close reasons stay tied to live canon rather than scratch state.",
    "source": {
      "type": "project",
      "path": "/Users/agwerschky/.no-mistakes/worktrees/e661563b090a/01KZ4B0458NGJFN2BJ5QTM3VFN/.grok/skills/ticket-queue-discipline/SKILL.md"
    },
    "userInvocable": false
  }
}
Codex project skill resolution:
- `r0` = `/Users/agwerschky/.no-mistakes/worktrees/e661563b090a/01KZ4B0458NGJFN2BJ5QTM3VFN/.agents/skills`
- ticket-queue-discipline: Agent-only judgment for tracker-backed ticket work. Load before claiming, dispatching, closing, or auditing tickets in a project tracker so readiness, claims, and close reasons sta (file: r0/ticket-queue-discipline/SKILL.md)
Claude project skill invocation:
{"type":"assistant","content":[]}
{"type":"assistant","content":[{"type":"tool_use","id":"toolu_01Fxx6vSWX3kyjSYevRNjZ3F","name":"Skill","input":{"skill":"ticket-queue-discipline"},"caller":{"type":"direct"}}]}
{"type":"user","content":[{"type":"tool_result","tool_use_id":"toolu_01Fxx6vSWX3kyjSYevRNjZ3F","content":"Launching skill: ticket-queue-discipline","is_error":null}]}
{"type":"user","content":[]}
{"type":"assistant","content":[{"type":"text","text":"LOADED ticket-queue-discipline."}]}
{"type":"result","subtype":"success","result":"LOADED ticket-queue-discipline.","is_error":false}
�[?25h
Evidence: Mode-120000 and canonical-source transcript
^D��Target commit: 5939a39fbf2e52a6fe8e22a56d42cfdc2c8a65b0
Tracked harness link modes and blob identity:
120000 2b7a412b8fa0fb7e985b0793321bd4e698f2b6cd 0	.claude/skills
120000 2b7a412b8fa0fb7e985b0793321bd4e698f2b6cd 0	.codex/skills
120000 2b7a412b8fa0fb7e985b0793321bd4e698f2b6cd 0	.grok/skills
Resolved link targets:
.claude/skills -> ../.agents/skills
.codex/skills -> ../.agents/skills
.grok/skills -> ../.agents/skills
Tracked ticket skill sources:
.agents/skills/ticket-queue-discipline/SKILL.md
Frontmatter contract:
---
name: ticket-queue-discipline
description: >-
  Agent-only judgment for tracker-backed ticket work.
  Load before claiming, dispatching, closing, or auditing tickets in a project tracker
  so readiness, claims, and close reasons stay tied to live canon rather than scratch state.
user-invocable: false
metadata:
  internal: true
---

# ticket-queue-discipline
Evidence: Grok project provenance transcript
^D��/Users/agwerschky/.grok/skills/firstmate-coding-guidelines/SKILL.md absent
/Users/agwerschky/.grok/skills/ticket-queue-discipline/SKILL.md absent
{
  "skill": {
    "name": "ticket-queue-discipline",
    "source": {
      "type": "project",
      "path": "/Users/agwerschky/.no-mistakes/worktrees/e661563b090a/01KZ4B0458NGJFN2BJ5QTM3VFN/.grok/skills/ticket-queue-discipline/SKILL.md"
    },
    "userInvocable": false
  }
}
Evidence: Sanitized Claude project-root and SkillTool excerpt
^D��24:2026-08-03T17:47:16.949Z [DEBUG] Loading skills from: managed=/Library/Application Support/ClaudeCode/.claude/skills, user=/Users/agwerschky/.claude/skills, project=[/Users/agwerschky/.no-mistakes/worktrees/e661563b090a/01KZ4B0458NGJFN2BJ5QTM3VFN/.claude/skills]
229:2026-08-03T17:47:22.578Z [DEBUG] SkillTool returning 2 newMessages for skill ticket-queue-discipline
230:2026-08-03T17:47:22.578Z [INFO] [Stall] tool_dispatch_end tool=Skill toolUseId=toolu_01YGMQ7hkxPCC5TUbaFokkFm outcome=ok durationMs=1
Evidence: Focused documentation contract test
^D��FM_TEST_BEGIN 2026-08-03T17:51:52Z tests/fm-documentation-audiences.test.sh family=pure-contract-unit expected_gate_skip=none
ok - documentation inventory classifies every maintained prose surface exactly once
ok - classification, setup routing, and maintained-prose scope fail safely
ok - required documentation owner pointers cannot silently disappear
ok - local links resolve while dates, versions, commands, and incident prose remain semantically reviewed
FM_TEST_END 2026-08-03T17:51:53Z tests/fm-documentation-audiences.test.sh exit=0 duration_ms=624 gate_skip=false
FM_TEST_SUMMARY total=1 failed=0 skipped_gate=0 duration_ms=676
FM_TEST_SUMMARY_FAMILY family=pure-contract-unit count=1 duration_ms=624 failed=0
FM_TEST_SLOWEST rank=1 script=tests/fm-documentation-audiences.test.sh duration_ms=624

Pipeline

Updates from git push no-mistakes

✅ **intent** - passed

✅ No issues found.

✅ **Rebase** - passed

✅ No issues found.

🔧 **Review** - 1 issue found → auto-fixed ✅
  • 🚨 docs/verification/harness-skill-discovery.md:71 - Intent requires “confirm with evidence what ... claude actually resolve[s],” says a symlink must not be assumed to work without observation, and requires the new skill to load on all three harnesses. This Claude section only runs readlink, checks the pre-existing afk file, and inspects Git mode; it never observes Claude resolving or loading ticket-queue-discipline. Record Claude runtime discovery evidence for the new project skill, or obtain explicit approval to treat filesystem/CI invariants as the proxy.

🔧 Fix: Record Claude runtime skill resolution evidence
✅ Re-checked - no issues remain.

✅ **Test** - passed

✅ No issues found.

  • git status --short --branch; git rev-parse HEAD; git diff --name-status 4e01d7fc449d4ffff932f172721f1fea53dfa6e6..5939a39fbf2e52a6fe8e22a56d42cfdc2c8a65b0
  • grok inspect --json filtered to ticket-queue-discipline, with user-home absence checks
  • codex debug prompt-input "x" filtered to project root r0 and ticket-queue-discipline
  • claude -p --output-format stream-json --verbose --no-session-persistence --permission-mode dontAsk --tools Skill ...
  • git ls-files -s .claude/skills .codex/skills .grok/skills with readlink, readability, canonical-body cmp, and tracked-source checks
  • bin/fm-test-run.sh tests/fm-documentation-audiences.test.sh after the documentation correction
✅ **Document** - passed

✅ No issues found.

✅ **Lint** - passed

✅ No issues found.

✅ **Push** - passed

✅ No issues found.

sparkus added 3 commits August 3, 2026 11:26
…-discipline

Wire .grok/skills and .codex/skills as symlinks to the canonical
.agents/skills tree (matching .claude/skills), record verified
harness discovery evidence, and add an agent-only skill for
tracker-backed ticket judgment.
@sparkus
sparkus merged commit 2ef842c into main Aug 3, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant