en un clic
f1-test-drive
// Orchestrate F1 test drives to validate the Cyrus agent system end-to-end across issue-tracker, EdgeWorker, and activity rendering.
// Orchestrate F1 test drives to validate the Cyrus agent system end-to-end across issue-tracker, EdgeWorker, and activity rendering.
| 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. |
Run comprehensive F1 test drives that validate the full pipeline:
Execute test drives that verify:
Create a fresh test repository (if needed):
cd apps/f1
./f1 init-test-repo --path /tmp/f1-test-drive-<timestamp>
Start F1 server:
CYRUS_PORT=3600 CYRUS_REPO_PATH=/tmp/f1-test-drive-<timestamp> bun run apps/f1/server.ts &
Verify server health:
CYRUS_PORT=3600 ./f1 ping
CYRUS_PORT=3600 ./f1 status
Create test issue:
CYRUS_PORT=3600 ./f1 create-issue \
--title "<issue title>" \
--description "<issue description>"
Verify issue ID and issue creation response.
Start agent session:
CYRUS_PORT=3600 ./f1 start-session --issue-id <issue-id>
Monitor activities:
CYRUS_PORT=3600 ./f1 view-session --session-id <session-id>
Verify:
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).
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.
Verify shared auto-memory wiring:
<cyrusHome>/slack-workspaces/<sanitized-threadKey>/.<cyrusHome>/slack-memory/.claude_query_options event emitted by ClaudeRunner carries cqo.settingsAutoMemoryDirectory=<cyrusHome>/slack-memory.Verify per-thread workspace isolation alongside shared memory:
slack-workspaces/<other-thread-key>/ directory exists (workspaces remain isolated).slack-memory path (memory is shared).Validate activity payload quality:
thought, action, response)Validate pagination behavior:
CYRUS_PORT=3600 ./f1 view-session --session-id <session-id> --limit 10 --offset 0
Stop active session:
CYRUS_PORT=3600 ./f1 stop-session --session-id <session-id>
Stop background server process.
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 when:
Fail when:
3600 unless already in use.This skill is intentionally harness-agnostic:
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).
Configure Slack integration for Cyrus — create a Slack app from manifest, then guide the user to save credentials.
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 npm `test` dist-tag so CYHOST can install it via `cyrus-core@test` without affecting the `latest` dist-tag or shipping a real release.
Create a Linear OAuth application and configure Cyrus to use it — supports agent-browser automation or guided manual setup.
Print a summary of the Cyrus setup and offer to start the agent.
Run all quality checks (tests, lint, typecheck), fix failures, update the changelog, commit, push, and create/update the pull request or merge request.