Instructions, not logic
The pack tells an agent how to call the surface and how to decide when to stop. It does not implement anything the Caliper API owns.
platform3 / caliper / 1edtech / skill_pack
Instructions-only AI skill for producing real Caliper apps, reports, and probes through the live platform surface. It makes an agent useful by teaching the credential path, exact API perimeter, worked surface-call proof, and binary leak check without carrying private Caliper logic.
This deliverable is both a hosted canonical page and an installable skill directory. The pack itself has no scripts, no copied Caliper term tables, no schema parser, no normalizer, no hash implementation, and no business rules.
The pack tells an agent how to call the surface and how to decide when to stop. It does not implement anything the Caliper API owns.
Every workflow starts by opening the hosted customer website and data dictionary. Field meaning comes from those URLs.
The worked example mints a demo token, writes an event envelope, reads the event projection, and reads the envelope projection through live API calls.
Install the pack/ directory as the skill. The hosted copy is exposed under the same canonical deliverable path so another agent can inspect it without repository access.
| Path | Purpose | Load rule |
|---|---|---|
pack/SKILL.md |
Required skill manifest and core workflow. | Loaded when the user asks for a Caliper 1EdTech app, report, probe, or deliverable. |
pack/agents/openai.yaml |
UI metadata for skill lists and default invocation. | Read by compatible agent runtimes. |
references/canonical-surface.md |
Endpoint, credential, status, and deferred-behavior details. | Read when endpoint or contract specifics are needed. |
references/worked-example.md |
Runnable cURL demo that regenerates a Caliper activity receipt. | Read before building proof apps, reports, or QA probes. |
references/leak-check.md |
Binary no-leak checklist and stop conditions. | Read before final output. |
Claude Code installs filesystem skills under ~/.claude/skills/<skill-name>/SKILL.md. Codex uses ${CODEX_HOME:-~/.codex}/skills/<skill-name>/SKILL.md. Install the whole pack/ directory so the agent gets SKILL.md, OpenAI metadata, and the three references.
export BASE="https://platform3-andymontgomery-9773s-projects.vercel.app/caliper/1edtech/skill_pack"
# Claude Code
export SKILL_ROOT="$HOME/.claude/skills/timeback-caliper-1edtech"
mkdir -p "$SKILL_ROOT/agents" "$SKILL_ROOT/references"
curl -fsSL "$BASE/pack/SKILL.md" -o "$SKILL_ROOT/SKILL.md"
curl -fsSL "$BASE/pack/agents/openai.yaml" -o "$SKILL_ROOT/agents/openai.yaml"
curl -fsSL "$BASE/pack/references/canonical-surface.md" -o "$SKILL_ROOT/references/canonical-surface.md"
curl -fsSL "$BASE/pack/references/worked-example.md" -o "$SKILL_ROOT/references/worked-example.md"
curl -fsSL "$BASE/pack/references/leak-check.md" -o "$SKILL_ROOT/references/leak-check.md"
find "$SKILL_ROOT" -maxdepth 2 -type f | sort
# Codex
export SKILL_ROOT="${CODEX_HOME:-$HOME/.codex}/skills/timeback-caliper-1edtech"
mkdir -p "$SKILL_ROOT/agents" "$SKILL_ROOT/references"
curl -fsSL "$BASE/pack/SKILL.md" -o "$SKILL_ROOT/SKILL.md"
curl -fsSL "$BASE/pack/agents/openai.yaml" -o "$SKILL_ROOT/agents/openai.yaml"
curl -fsSL "$BASE/pack/references/canonical-surface.md" -o "$SKILL_ROOT/references/canonical-surface.md"
curl -fsSL "$BASE/pack/references/worked-example.md" -o "$SKILL_ROOT/references/worked-example.md"
curl -fsSL "$BASE/pack/references/leak-check.md" -o "$SKILL_ROOT/references/leak-check.md"
find "$SKILL_ROOT" -maxdepth 2 -type f | sort
Use $timeback-caliper-1edtech with my CALIPER_BASE_URL, tenant id, and bearer token. Run the worked example's smallest live proof and report the POST status, envelope hash, event type, profile, action, envelope status, and canonical docs used.
The same skill directory works across Claude Code, Codex, Claude API custom skills, and claude.ai upload flows. Credentials are still supplied at runtime; never bake tokens into the pack.
Copy pack/ to ~/.claude/skills/timeback-caliper-1edtech/. The required frontmatter fields are name and description, followed by the Markdown instructions and references.
Copy pack/ to ${CODEX_HOME:-~/.codex}/skills/timeback-caliper-1edtech/. The local agents/openai.yaml supplies display metadata; SKILL.md controls triggering.
Zip the contents of pack/ with SKILL.md at the archive root, then upload it through the product's skill upload flow. Do not upload a parent directory that hides SKILL.md one level down.
Use the Anthropic Skills API pattern: create or reference a skill, pass its skill_id, and send the beta headers required for code execution, skills, and files. The pack stays instructions-only; the API call gives the model access to the files.
# API invocation shape, shown for install planning.
# Use your provider SDK or HTTP client; do not put Caliper tokens in the skill files.
ANTHROPIC_BETA="code-execution-2025-08-25,skills-2025-10-02,files-api-2025-04-14"
{
"model": "claude-sonnet-4-5",
"container": {
"skills": [
{ "skill_id": "timeback-caliper-1edtech", "version": "latest" }
]
},
"tools": [
{ "type": "code_execution_20250825", "name": "code_execution" }
],
"messages": [
{
"role": "user",
"content": "Use timeback-caliper-1edtech with my CALIPER_BASE_URL, tenant id, and bearer token. Run the worked proof."
}
]
}
The installed skill starts with trigger metadata, then forces the agent through canonical docs, credentials, live proof, and leak check. The full file is available at pack/SKILL.md.
---
name: timeback-caliper-1edtech
description: Use when building apps, reports, QA probes, or deliverables against the TimeBack platform3 Caliper 1EdTech surface. The skill teaches an agent to use the live Caliper Analytics 1.2 API, demo token minting, tenant headers, Sensor API envelope writes, and event/envelope read projections without re-implementing Caliper normalization, schema parsing, hashing, enumeration tables, persistence, or business rules.
---
# TimeBack Caliper 1EdTech
First actions:
1. Open the canonical customer website, data dictionary, and architecture.
2. Use CALIPER_BASE_URL or the canonical implementation API.
3. Mint demo credentials or use the operator-supplied bearer token.
4. Run references/worked-example.md.
5. Run references/leak-check.md before final output.
The pack is scoped to the approved Caliper 1EdTech surface. It does not broaden the API, and it does not use the older prior-workspace 202-with-body contract.
| Operation | Request | Success evidence | Canonical source |
|---|---|---|---|
| Demo mint | POST /dev/mint?tenantId=00000000-0000-4000-8000-00000000ca12 |
200 JSON containing token, tenantId, and sensorIri. |
Customer endpoint docs |
| Envelope ingest | POST /caliper/v1p2/events |
204 No Content and caliper-envelope-hash response header. |
CITD-011 |
| Event projection | GET /caliper/v1p2/events?eventIri={eventIri} |
200 JSON with event type, profile, action, event time, raw event, and event hash. |
caliper.event |
| Envelope projection | GET /caliper/v1p2/envelopes?hash={hash} |
200 JSON with envelope status, sensor IRI, send time, receipt time, and event summaries. |
caliper.envelope |
The worked example regenerates a real activity receipt through surface calls only. On 2026-06-03 UTC it was re-verified against the approved live API: POST returned 204, the event projection returned AssessmentItemEvent / AssessmentProfile / Completed, and the envelope projection returned processed with one event.
verified_at=2026-06-03T11:25:00Z, post_status=204, envelope_hash=sha256:65afa1c9636796a75b0815ebf46a108d0edcb9af0223fcb3d77bfe8e297dce82, event_iri=urn:uuid:282351c1-9356-404c-a392-aa54c90e2c44, event_type=AssessmentItemEvent, profile=AssessmentProfile, action=Completed, envelope_status=processed, event_count=1.
export CALIPER_BASE_URL="${CALIPER_BASE_URL:-https://platform3-andymontgomery-9773s-projects.vercel.app/caliper/1edtech/implementation/api}"
export DEMO_TENANT_ID="00000000-0000-4000-8000-00000000ca12"
DEMO_TOKEN_RESPONSE=$(curl -fsS -X POST "$CALIPER_BASE_URL/dev/mint?tenantId=$DEMO_TENANT_ID")
export TOKEN=$(printf '%s' "$DEMO_TOKEN_RESPONSE" | jq -r '.token')
export TENANT=$(printf '%s' "$DEMO_TOKEN_RESPONSE" | jq -r '.tenantId')
export SENSOR_IRI=$(printf '%s' "$DEMO_TOKEN_RESPONSE" | jq -r '.sensorIri')
# Then POST /caliper/v1p2/events, capture caliper-envelope-hash,
# GET /events?eventIri=..., and GET /envelopes?hash=...
# Full runnable version: pack/references/worked-example.md
The pack only passes if it makes the surface easier to use without replacing surface-owned capabilities. These are hard stop conditions for agents using the pack.
The pack was built from approved platform3 Caliper artifacts and the pinned prior workspace, then checked against the official Anthropic Agent Skills docs and Stripe's agent docs for installability, progressive disclosure, and SaaS-agent usefulness.
| Input | Use |
|---|---|
| Caliper architecture | Decision axes, non-features, tenant/auth/error/idempotency commitments. |
| Caliper data dictionary | Field meaning links and privacy-sensitive table boundaries. |
| Caliper customer website | Executable endpoint contract and quickstart credential flow. |
| Caliper implementation API | Live demo verification of the worked surface-call example. |
| Caliper surface QC | Release-gate evidence that the surface is approved and live. |
vendor/caliper-prior-workspace/ | Pinned Caliper 1.2 source bundle and prior workspace context; corrected where approved platform3 docs diverge. |
| Anthropic Agent Skills docs | Benchmark for a skill directory with SKILL.md, discovery metadata, progressive disclosure, and references loaded on demand. |
| Stripe Agent Toolkit | Secondary benchmark for official agent-facing API enablement around a SaaS surface. |