rivet-dev/gigacode-api-sanity
Compare GigaCode's OpenCode-compatible HTTP/SSE API with native OpenCode in isolated temporary workspaces. Use when asked to sanity-check, re-test, or manually validate Claude Sonnet streaming, multi-turn sessions, tool calls, permissions, file edits, cancellation, or post-cancel reuse.
npx skills add https://github.com/rivet-dev/agentos --skill gigacode-api-sanity
Run a black-box parity check. Do not modify product source or disturb an existing daemon.
pwd and jj log -r @; record the revision and both runtime versions.2468/2469.opencode serve in its workspace. Start GigaCode in its workspace with unique state and port environment variables. Prefer the current checkout; disclose any installed-runtime fallback./event before creating a session and preserve the unmodified SSE stream./global/health and /provider. Require a working Claude Sonnet credential on both sides before judging model behavior. For GigaCode, pin Sonnet with GIGACODE_SESSION_ENV_JSON, for example {"ANTHROPIC_MODEL":"claude-sonnet-4-6"}.Treat authentication failure as a setup limitation, not an API deviation. Do not claim full parity without a valid native Sonnet run.
Use direct HTTP requests and save status, headers, body, timing, and SSE frames for every step:
POST /session; record the complete response.POST /session/{id}/message prompts in the same session. Make turn two depend on turn one.api-edit.txt with exact contents using a tool. Poll GET /permission, reply once through POST /permission/{id}/reply, and verify both the tool-part lifecycle and host file contents.POST /session/{id}/prompt_async. Use a command such as touch <workspace>/sleep-started && sleep 20, poll permissions concurrently, and approve the tool if required. Wait for either the marker file or the tool part to be running before calling POST /session/{id}/abort. The marker proves the command actually began even when an implementation publishes tool events late. Merely observing the session as busy can mean the model is still deciding what tool to call and does not validate tool-process cancellation./session/status.Use equivalent prompts and the same Sonnet release. Allow provider/model identifiers to differ only where the implementations require it.
Report a compact table with surface | native | GigaCode | deviation | severity. Check:
session.created payloads/session/statusCall out known compatibility-sensitive details explicitly: opaque versus numeric event IDs, idle status entries, session metadata fields, session.updated, and native-only catalog/plugin/diff events. Separate deliberate boundary differences from regressions.
~/.agents/friction/*.md entry without duplicating an existing issue.Take rivet-dev/gigacode-api-sanity from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.