Install
$ agentstack add skill-ksed8-cc-loopkit-testing ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Testing
A test earns its place by failing when the behavior breaks and passing otherwise. Tests that never fail are noise; tests coupled to implementation break on every refactor. Aim for the first, avoid the second.
What to test (and what not to)
- Test behavior and contracts, not implementation details. Assert on what a function returns / what the user sees, not which private helper it called.
- Prioritize by risk × traffic: money, auth, permissions, data integrity, and anything in
lib/auth/get thorough coverage. Trivial getters and framework glue don't. - Cover the boundaries where bugs live: empty, one, many; null/undefined; zero/negative/overflow; the error path, not just the happy path.
- Every bug fix ships with a test that fails before the fix and passes after. That test is the proof the bug is gone and the guard against its return.
- Don't chase a coverage number. 100% line coverage with no assertions on behavior is theater. Coverage shows what's untested, not what's tested well.
The test pyramid
- Unit (most): pure logic, one module, no I/O — fast, run constantly.
- Integration (some): modules together, real DB/API routes — catch the wiring bugs units miss.
- E2E (few): full user flows — expensive and slower, reserve for critical paths (signup, checkout, auth).
- Invert it and your suite gets slow and flaky. Push each test to the lowest level that can still catch the bug.
Structure
- Arrange–Act–Assert, visibly separated. One logical behavior per test.
- Name tests by the behavior:
returns 401 when the session is expired, nottest auth 3. The name should read as a spec line. - Assert on specific values, not just "truthy" or "no throw".
expect(res.status).toBe(403)beatsexpect(res).toBeDefined(). - Keep tests independent and order-agnostic — no test may depend on another having run. Reset shared state (DB rows, mocks, module state) in
beforeEach/afterEach. - Prefer real objects over mocks. Mock only at the true boundary (network, clock, randomness, third-party SDKs). Over-mocking tests your mocks, not your code.
Databases (Postgres)
- Run integration tests against a real Postgres (a disposable/test database), not an in-memory fake — you want the real query planner, constraints, and types.
- Isolate tests: wrap each in a transaction and roll back, or truncate between tests. Never let one test's rows leak into the next.
- Test the migration and the constraint, not just the query: a
NOT NULL/UNIQUE/FK is behavior worth asserting. - Seed the minimum data the test needs, inline and visible — a giant shared fixture hides what the test actually depends on.
Async, time, and flakiness
awaitevery promise and assert after it resolves; a floating promise makes a green test that proves nothing.- Never
sleep(n)to wait for async — await the actual signal (the resolved value, the state change, a polled condition). Fixed sleeps are the #1 source of flakiness. - Freeze time and seed randomness. Tests that read the real clock, timezone, or
Math.random()fail intermittently. - A flaky test is a bug — in the test or the code. Quarantine it loudly, then fix the race; don't paper over it with retries.
Working with the harness
- The Stop gate runs
pnpm testbefore letting a task finish, so a red suite blocks completion — keep it green as you go, not at the end. - Run the focused test while iterating (
pnpm test/-t ""), the full suite before you consider the work done. - When you change behavior deliberately, update the test in the same change and say why in the diff — don't delete a failing test to get green.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: ksed8
- Source: ksed8/cc-loopkit
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.