openevidence-ci-integration
Provides CI/CD configuration and testing utilities for clinical AI applications using OpenEvidence.
Install
mkdir -p .claude/skills/openevidence-ci-integration && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/8918" && unzip -o skill.zip -d .claude/skills/openevidence-ci-integration && rm skill.zipInstalls to .claude/skills/openevidence-ci-integration
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Ci Integration for OpenEvidence.Key capabilities
- →Run unit tests with mocked evidence queries
- →Validate clinical citation extraction
- →Test live API connectivity
- →Verify query formatting in CI pipelines
How it works
The integration uses GitHub Actions to run unit tests with mocked client responses and integration tests that validate live API connectivity for clinical queries.
Inputs & outputs
When to use openevidence-ci-integration
- →Configure GitHub Actions for medical AI
- →Test clinical evidence retrieval logic
- →Validate API integration in CI
- →Mock evidence queries for unit tests
About this skill
OpenEvidence CI Integration
Overview
Set up CI/CD for OpenEvidence clinical decision support integrations: run unit tests with mocked evidence query and citation responses on every PR, validate live API connectivity for clinical queries on merge to main. OpenEvidence provides AI-powered medical evidence retrieval and clinical decision support, so CI pipelines verify query formatting, evidence parsing, citation extraction, and response quality scoring.
GitHub Actions Workflow
# .github/workflows/openevidence-ci.yml
name: OpenEvidence CI
on:
pull_request:
paths: ['src/openevidence/**', 'tests/**']
push:
branches: [main]
jobs:
unit-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: '20' }
- run: npm ci
- run: npm test -- --reporter=verbose
integration-tests:
if: github.ref == 'refs/heads/main'
needs: unit-tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: '20' }
- run: npm ci
- run: npm run test:integration
env:
OPENEVIDENCE_API_KEY: ${{ secrets.OPENEVIDENCE_API_KEY }}
Mock-Based Unit Tests
// tests/openevidence-service.test.ts
import { describe, it, expect, vi } from 'vitest';
import { queryEvidence, extractCitations } from '../src/openevidence-service';
vi.mock('../src/openevidence-client', () => ({
OpenEvidenceClient: vi.fn().mockImplementation(() => ({
query: vi.fn().mockResolvedValue({
answer: 'Current evidence supports early intervention with GLP-1 agonists...',
confidence: 0.92,
citations: [
{ title: 'NEJM 2025 Meta-Analysis', doi: '10.1056/NEJMoa2501234', year: 2025 },
{ title: 'Lancet Diabetes Review', doi: '10.1016/S2213-8587(25)00123', year: 2025 },
],
evidenceLevel: 'high',
}),
listQueries: vi.fn().mockResolvedValue({
queries: [{ id: 'q_abc', question: 'GLP-1 efficacy', status: 'completed' }],
}),
})),
}));
describe('OpenEvidence Service', () => {
it('queries clinical evidence with citations', async () => {
const result = await queryEvidence('GLP-1 agonist efficacy for type 2 diabetes');
expect(result.confidence).toBeGreaterThan(0.9);
expect(result.citations).toHaveLength(2);
});
it('extracts citation DOIs from response', async () => {
const citations = await extractCitations('q_abc');
expect(citations[0].doi).toMatch(/^10\.\d+/);
});
});
Integration Tests
// tests/integration/openevidence.integration.test.ts
import { describe, it, expect } from 'vitest';
const hasKey = !!process.env.OPENEVIDENCE_API_KEY;
describe.skipIf(!hasKey)('OpenEvidence Live API', () => {
it('queries clinical evidence', async () => {
const res = await fetch('https://api.openevidence.com/v1/query', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.OPENEVIDENCE_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ question: 'Aspirin dosing for secondary prevention' }),
});
expect(res.status).toBe(200);
const body = await res.json();
expect(body).toHaveProperty('answer');
expect(body).toHaveProperty('citations');
});
});
Error Handling
| CI Issue | Cause | Fix |
|---|---|---|
401 Unauthorized | Invalid API key | Regenerate at openevidence.com account settings |
| Empty citations array | Query too vague for evidence matching | Use specific clinical terms with condition and intervention |
| Low confidence score | Insufficient published evidence | Check evidence level field and handle low confidence gracefully |
| Rate limit (429) | Too many queries in test suite | Add throttling between clinical queries (1 req/sec) |
| Response timeout | Complex query requiring deep search | Increase fetch timeout to 30s for clinical evidence lookups |
Resources
Next Steps
See openevidence-deploy-integration.
When not to use it
- →Environments without Node.js 20
- →Workflows requiring non-clinical AI testing
Prerequisites
Limitations
- →Rate limit of 1 request per second for clinical queries
- →Requires specific clinical terms for evidence matching
How it compares
It provides specific clinical validation logic for evidence parsing and citation extraction rather than generic API testing.
Compared to similar skills
openevidence-ci-integration side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| openevidence-ci-integration (this skill) | 0 | 27d | Review | Intermediate |
| twinmind-local-dev-loop | 1 | 27d | Caution | Beginner |
| write-test | 1 | 5mo | Review | Advanced |
| deepgram-hello-world | 1 | 27d | Review | Beginner |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by jeremylongshore
View all by jeremylongshore →You might also like
twinmind-local-dev-loop
jeremylongshore
Set up local development workflow with TwinMind API integration. Use when building applications that integrate TwinMind transcription, testing API calls locally, or developing meeting automation tools. Trigger with phrases like "twinmind dev setup", "twinmind local development", "twinmind API testing", "build with twinmind".
write-test
useautumn
Write integration tests for the Autumn billing system. Use when creating tests, writing test scenarios for billing/subscription features, track/check endpoints, or when the user asks about testing, test cases, or QA.
deepgram-hello-world
jeremylongshore
Create a minimal working Deepgram transcription example. Use when starting a new Deepgram integration, testing your setup, or learning basic Deepgram API patterns. Trigger with phrases like "deepgram hello world", "deepgram example", "deepgram quick start", "simple transcription", "transcribe audio".
groq-hello-world
jeremylongshore
Create a minimal working Groq example. Use when starting a new Groq integration, testing your setup, or learning basic Groq API patterns. Trigger with phrases like "groq hello world", "groq example", "groq quick start", "simple groq code".
speak-hello-world
jeremylongshore
Create a minimal working Speak language learning example. Use when starting a new Speak integration, testing your setup, or learning basic Speak API patterns for language tutoring. Trigger with phrases like "speak hello world", "speak example", "speak quick start", "simple speak lesson".
exa-local-dev-loop
jeremylongshore
Configure Exa local development with hot reload and testing. Use when setting up a development environment, configuring test workflows, or establishing a fast iteration cycle with Exa. Trigger with phrases like "exa dev setup", "exa local development", "exa dev environment", "develop with exa".