/f1-test-drive
Orchestrate F1 test drives to validate the Cyrus agent system end-to-end across issue-tracker, EdgeWorker, and activity rendering.
$ npx -y skills add cyrusagents/cyrus --skill f1-test-drive --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/f1-test-drive
Context preview
The summary Claude sees to decide when to auto-load this skill.
Orchestrate F1 test drives to validate the Cyrus agent system end-to-end across issue-tracker, EdgeWorker, and activity rendering.
SKILL.md
f1-test-drive.SKILL.mdname: f1-test-drive
description: Orchestrate F1 test drives to validate the Cyrus agent system end-to-end across issue-tracker, EdgeWorker, and activity rendering.
F1 Test Drive
Run comprehensive F1 test drives that validate the full pipeline:
- Issue-tracker behavior
- EdgeWorker execution flow
- Activity rendering/output quality
Mission
Execute test drives that verify:
1. Issue-tracker correctness 2. EdgeWorker worktree/session behavior 3. Activity output visibility and formatting
Test Drive Protocol
Phase 1: Setup
1. Create a fresh test repository (if needed):
cd apps/f1
./f1 init-test-repo --path /tmp/f1-test-drive-<timestamp>
2. Start F1 server:
CYRUS_PORT=3600 CYRUS_REPO_PATH=/tmp/f1-test-drive-<timestamp> bun run apps/f1/server.ts &
3. Verify server health:
CYRUS_PORT=3600 ./f1 ping
CYRUS_PORT=3600 ./f1 status
Phase 2: Issue-Tracker Verification
1. Create test issue:
CYRUS_PORT=3600 ./f1 create-issue \
--title "<issue title>" \
--description "<issue description>"2. Verify issue ID and issue creation response.
Phase 3: EdgeWorker Verification
1. Start agent session:
CYRUS_PORT=3600 ./f1 start-session --issue-id <issue-id>
2. Monitor activities:
CYRUS_PORT=3600 ./f1 view-session --session-id <session-id>
3. Verify:
- session started
- activities appear
- agent is processing issue
Phase 3.5: Slack Chat Session Verification (optional)
Use when validating the Slack → ChatSessionHandler → ClaudeRunner path. F1 exposes a test-only endpoint `/cli/dispatch-chat` that injects a synthetic `app_mention` event without going through Slack signature verification (`SlackChatAdapter` no-ops Slack API calls when `slackBotToken` is undefined).
1. Dispatch a synthetic chat event:
CYRUS_PORT=3600 ./f1 start-chat-session \
--channel C_TEST_CHAN \
--user U_TEST_USER \
--text "hello"The response contains a `threadKey` of the form `<channel>:<ts>`. Reuse the same `--thread-ts` to address the same chat thread on subsequent dispatches.
2. Verify shared auto-memory wiring:
- The chat workspace exists at `<cyrusHome>/slack-workspaces/<sanitized-threadKey>/`.
- The shared auto-memory directory exists (or is lazily creatable) at `<cyrusHome>/slack-memory/`.
- The `claude_query_options` event emitted by `ClaudeRunner` carries `cqo.settingsAutoMemoryDirectory=<cyrusHome>/slack-memory`.
3. Verify per-thread workspace isolation alongside shared memory:
- Dispatch a second event in a different channel/thread.
- Confirm a separate `slack-workspaces/<other-thread-key>/` directory exists (workspaces remain isolated).
- Confirm both dispatches' telemetry resolve to the **same** `slack-memory` path (memory is shared).
Phase 4: Renderer Verification
1. Validate activity payload quality:
- expected types (for example `thought`, `action`, `response`)
- timestamps present
- content well-formed and readable
2. Validate pagination behavior:
CYRUS_PORT=3600 ./f1 view-session --session-id <session-id> --limit 10 --offset 0
Phase 5: Cleanup
1. Stop active session:
CYRUS_PORT=3600 ./f1 stop-session --session-id <session-id>
2. Stop background server process.
Reporting Format
Write report under `apps/f1/test-drives/`:
# Test Drive #NNN: [Goal Description]
**Date**: YYYY-MM-DD
**Goal**: [One sentence]
**Test Repo**: [Path]
## Verification Results
### Issue-Tracker
- [ ] Issue created
- [ ] Issue ID returned
- [ ] Issue metadata accessible
### EdgeWorker
- [ ] Session started
- [ ] Worktree created (if applicable)
- [ ] Activities tracked
- [ ] Agent processed issue
### Renderer
- [ ] Activity format correct
- [ ] Pagination works
- [ ] Search works
## Session Log
[commands + key outputs + pass/fail]
## Final Retrospective
[what worked, issues, recommendations]
Pass/Fail Criteria
Pass when:
1. Server starts 2. Issue created successfully 3. Session starts and activities appear 4. Activity payloads are coherent 5. Session stops cleanly 6. No unhandled errors
Fail when:
- server startup fails
- issue creation fails
- session does not start
- no activities after reasonable wait
- malformed activity data
- unhandled exceptions
Important Notes
- Prefer fixed port `3600` unless already in use.
- Use fresh test repos per drive.
- Preserve failed state when debugging.
- For major runner/harness changes, run at least one F1 end-to-end validation before merge.
Multi-Harness Note
This skill is intentionally harness-agnostic:
- Claude subagents can call this skill.
- Codex/OpenCode workflows can reference the same skill content.
- Harness-specific adapters should be thin wrappers around this canonical skill.
Read more
name: f1-test-drive description: Orchestrate F1 test drives to validate the Cyrus agent system end-to-end across issue-tracker, EdgeWorker, and activity rendering.
F1 Test Drive
Run comprehensive F1 test drives that validate the full pipeline:
- Issue-tracker behavior
- EdgeWorker execution flow
- Activity rendering/output quality
Mission
Execute test drives that verify:
1. Issue-tracker correctness 2. EdgeWorker worktree/session behavior 3. Activity output visibility and formatting
Test Drive Protocol
Phase 1: Setup
1. Create a fresh test repository (if needed):
cd apps/f1 ./f1 init-test-repo --path /tmp/f1-test-drive-<timestamp>
2. Start F1 server:
CYRUS_PORT=3600 CYRUS_REPO_PATH=/tmp/f1-test-drive-<timestamp> bun run apps/f1/server.ts &
3. Verify server health:
CYRUS_PORT=3600 ./f1 ping CYRUS_PORT=3600 ./f1 status
Phase 2: Issue-Tracker Verification
1. Create test issue:
CYRUS_PORT=3600 ./f1 create-issue \
--title "<issue title>" \
--description "<issue description>"2. Verify issue ID and issue creation response.
Phase 3: EdgeWorker Verification
1. Start agent session:
CYRUS_PORT=3600 ./f1 start-session --issue-id <issue-id>
2. Monitor activities:
CYRUS_PORT=3600 ./f1 view-session --session-id <session-id>
3. Verify:
- session started
- activities appear
- agent is processing issue
Phase 3.5: Slack Chat Session Verification (optional)
Use when validating the Slack → ChatSessionHandler → ClaudeRunner path. F1 exposes a test-only endpoint `/cli/dispatch-chat` that injects a synthetic `app_mention` event without going through Slack signature verification (`SlackChatAdapter` no-ops Slack API calls when `slackBotToken` is undefined).
1. Dispatch a synthetic chat event:
CYRUS_PORT=3600 ./f1 start-chat-session \
--channel C_TEST_CHAN \
--user U_TEST_USER \
--text "hello"The response contains a `threadKey` of the form `<channel>:<ts>`. Reuse the same `--thread-ts` to address the same chat thread on subsequent dispatches.
2. Verify shared auto-memory wiring:
- The chat workspace exists at `<cyrusHome>/slack-workspaces/<sanitized-threadKey>/`.
- The shared auto-memory directory exists (or is lazily creatable) at `<cyrusHome>/slack-memory/`.
- The `claude_query_options` event emitted by `ClaudeRunner` carries `cqo.settingsAutoMemoryDirectory=<cyrusHome>/slack-memory`.
3. Verify per-thread workspace isolation alongside shared memory:
- Dispatch a second event in a different channel/thread.
- Confirm a separate `slack-workspaces/<other-thread-key>/` directory exists (workspaces remain isolated).
- Confirm both dispatches' telemetry resolve to the **same** `slack-memory` path (memory is shared).
Phase 4: Renderer Verification
1. Validate activity payload quality:
- expected types (for example `thought`, `action`, `response`)
- timestamps present
- content well-formed and readable
2. Validate pagination behavior:
CYRUS_PORT=3600 ./f1 view-session --session-id <session-id> --limit 10 --offset 0
Phase 5: Cleanup
1. Stop active session:
CYRUS_PORT=3600 ./f1 stop-session --session-id <session-id>
2. Stop background server process.
Reporting Format
Write report under `apps/f1/test-drives/`:
# Test Drive #NNN: [Goal Description] **Date**: YYYY-MM-DD **Goal**: [One sentence] **Test Repo**: [Path] ## Verification Results ### Issue-Tracker - [ ] Issue created - [ ] Issue ID returned - [ ] Issue metadata accessible ### EdgeWorker - [ ] Session started - [ ] Worktree created (if applicable) - [ ] Activities tracked - [ ] Agent processed issue ### Renderer - [ ] Activity format correct - [ ] Pagination works - [ ] Search works ## Session Log [commands + key outputs + pass/fail] ## Final Retrospective [what worked, issues, recommendations]
Pass/Fail Criteria
Pass when:
1. Server starts 2. Issue created successfully 3. Session starts and activities appear 4. Activity payloads are coherent 5. Session stops cleanly 6. No unhandled errors
Fail when:
- server startup fails
- issue creation fails
- session does not start
- no activities after reasonable wait
- malformed activity data
- unhandled exceptions
Important Notes
- Prefer fixed port `3600` unless already in use.
- Use fresh test repos per drive.
- Preserve failed state when debugging.
- For major runner/harness changes, run at least one F1 end-to-end validation before merge.
Multi-Harness Note
This skill is intentionally harness-agnostic:
- Claude subagents can call this skill.
- Codex/OpenCode workflows can reference the same skill content.
- Harness-specific adapters should be thin wrappers around this canonical skill.
Your (Claude Code|Codex|Cursor|Gemini) powered (Linear|GitHub|GitLab|Slack) agent.
Repo: cyrusagents/cyrus
Other skills on cyrus.
- /google
Search the web for information. Use when you need to look something up, find current information, or research a topic.
Open skill - /release-core-test
Invoke when dev-testing a Cyrus change that spans CYPACK (edgeworker + CLI) and CYHOST (Vercel-hosted GUI) and the hosted GUI needs to point at an unreleased `cyrus-core` from this repo. Publishes `cyrus-core` (and `claude-runner` if needed) as a `-test.N` prerelease under the
Open skill - /cyrus-setup-claude-auth
Configure Claude Code authentication for Cyrus — API key, OAuth token, or third-party provider.
Open skill - /cyrus-setup-endpoint
Configure the public webhook endpoint for Cyrus — ngrok, Cloudflare Tunnel, or custom URL.
Open skill - /cyrus-setup-github
Configure GitHub for Cyrus — gh CLI login and git config for PRs, with optional webhook setup to enable @mention responses in PR comments, automated rebases and merges, and auto-fixing based on CI failures (coming soon).
Open skill - /cyrus-setup-gitlab
Configure GitLab authentication for Cyrus — glab CLI login and git config for creating merge requests.
Open skill

