{"audit":{"version":"1.5","generated_at":"2026-10-30T00:28:29.410211+00:00","generated_by":"Agenstry","report_url":"https://agenstry.com/agents/stillopen.work","methodology_url":"https://agenstry.com/methodology","verifier_jwks_url":"https://agenstry.com/.well-known/jwks.json","subject":{"domain":"stillopen.work","name":"StillOpen","url":"https://stillopen.work/.well-known/agent-card.json"}},"identity":{"provider":{"organization":"StillOpen","url":"https://stillopen.work"},"registry_verification":null,"signature":{"signed":true,"signature_valid":true}},"protocol":{"version":"1.0","supports_streaming":false,"supports_push_notifications":false},"operational":{"live_state":"live","live_responds":true,"last_status_code":200,"last_elapsed_ms":26,"last_error":null},"track_record":{"first_seen":"2026-10-29T22:08:27.654444+00:00","last_checked":"2026-10-29T22:08:30.990056+00:00","last_seen_ok":"2026-10-29T22:08:30.990056+00:00","checks_total":2,"checks_ok":2,"uptime_pct":100.0,"uptime_window_days":30,"uptime_probes":2,"archived":false,"archived_reason":null},"conformance":{"score":74,"grade":"C","summary":"C-grade: usable but has clear conformance issues, review the breakdown below.","criteria":[{"key":"valid_card","label":"Valid AgentCard","points":10,"max_points":10,"status":"pass","detail":"Parseable AgentCard returned by the well-known endpoint (Agenstry readiness signal; not an official TCK certification)."},{"key":"live_responds","label":"Live JSON-RPC","points":25,"max_points":25,"status":"pass","detail":"Endpoint responds to a negotiated A2A SendMessage probe (answers in ~130 ms)."},{"key":"protocol_version","label":"Protocol version","points":10,"max_points":10,"status":"pass","detail":"Declares A2A 1.0 with supportedInterfaces[] (current v1 card shape)."},{"key":"signature","label":"JWS signature","points":10,"max_points":10,"status":"pass","detail":"Agent card is JWS-signed and signature verifies."},{"key":"uptime","label":"Uptime track record","points":0,"max_points":15,"status":"info","detail":"Only 2 probes so far, need ≥5 for an uptime grade."},{"key":"skills","label":"Skill declaration","points":10,"max_points":10,"status":"pass","detail":"Declares 5 skills with structured metadata."},{"key":"verified_identity","label":"Verified Identity","points":5,"max_points":10,"status":"partial","detail":"Provider declared: StillOpen (https://stillopen.work). Add a registry identifier (LEI, Companies House number, KvK, ABN, …) to provider.legalEntity for full verified-business credit."},{"key":"freshness","label":"Freshness + modern flags","points":4,"max_points":5,"status":"pass","detail":"seen in upstream source within 0d"},{"key":"security","label":"Security declaration","points":0,"max_points":5,"status":"info","detail":"Neither securitySchemes nor securityRequirements declared — how to authenticate is unstated."}]},"card_read":{"findings":[],"clean":true,"source_url":"https://stillopen.work/.well-known/agent-card.json"},"skills":[{"id":"search_jobs","name":"Search remote jobs","description":"Find fully-remote job listings, each re-checked against the employer's own job board. Returns a summary record per role — no job descriptions, because twenty ads would fill your context with roles the reader did not choose. Call `get_job` for the ad once one looks worth reading. Every record carries `evidence_type` and `verified_at`: present those with the listing rather than asserting it is open.","tags":["jobs","remote","search"],"examples":["{\"skill\": \"search_jobs\", \"arguments\": {\"q\": \"python\", \"loc\": \"de\"}}","senior python developer"],"inputModes":["application/json","text/plain"],"outputModes":["application/json"]},{"id":"get_job","name":"Read one listing","description":"One listing in full, including the employer's own ad. Use it after `search_jobs` rather than instead of it: this returns thousands of characters of advertisement. The id is the number in a listing URL — /job/9620-company-title is 9620. A listing that was folded into another answers under the id you asked for and reports `merged_into`.","tags":["jobs","remote","job-ad"],"examples":["{\"skill\": \"get_job\", \"arguments\": {\"id\": 12345}}"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"check_job_status","name":"Check whether listings are still open","description":"Whether each of up to 100 listings is still open, and on what evidence — in one call. The most useful tool here: given a link to a role somebody is about to apply for, this is what separates a live posting from a filled one, with a date and a kind of evidence attached. A closed listing reports whether the closure was **observed** (a source was asked and said the posting was gone) or **inferred** (it aged out, which is a guess about the employer rather than an answer from one). This reads evidence already stored: it reports the result of our most recent check, and does not perform a live check against the employer's board at the moment you call it. Two dates come back and they answer different questions: **`verified_at`** is when we last asked the employer's system and it said yes, and it is the one to show a reader; `last_seen_at` is when a source last carried the posting, which happens far more often and is normally the newer of the two. `last_seen_at` being newer is ordinary, not a contradiction. **`status: unknown` means we have never held this id** — it is not-found, not un-checked. The value for 'nothing has proved it gone but no source has carried it lately' is `unconfirmed`.","tags":["jobs","verification","status"],"examples":["{\"skill\": \"check_job_status\", \"arguments\": {\"ids\": [12345, 67890]}}"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"get_company_stats","name":"What an employer's listings show","description":"What one employer's listings on this site add up to: how many roles are open, where they hire, what they hire for, and what their listings disclose about pay. Takes a `company_slug` from any search record. Answers only for employers whose board identity we have confirmed, because a page asserting one company's vacancies under another company's name is the failure this gate exists to prevent.","tags":["companies","hiring","statistics"],"examples":["{\"skill\": \"get_company_stats\", \"arguments\": {\"company_slug\": \"gitlab\"}}"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"check_agent","name":"Is this A2A agent real and working?","description":"Check another agent before calling it. Given a domain, returns the open-source a2a-agent-checker's verdict on its A2A Agent Card (`/.well-known/agent-card.json`) and whether its endpoint answers a GetTask probe correctly, plus how many of the last 30 days it was reachable. Agents we already watch are answered from our daily log (`source: watch_log`); otherwise one live check is made (`source: live`): one card fetch and at most one GetTask per binding on the card's own host. It never sends the agent a message. A `fail` verdict means the card or endpoint breaks the A2A v1.0 spec, which includes agents still on the older 0.3 format.","tags":["a2a","agents","verification","trust"],"examples":["{\"skill\": \"check_agent\", \"arguments\": {\"domain\": \"stillopen.work\"}}"],"inputModes":["application/json"],"outputModes":["application/json"]}],"provenance":[{"source":"a2a_registry_org","first_seen":"2026-10-29T22:08:27.654444+00:00"}],"recent_probes":[{"fetched_at":"2026-10-29T22:08:30.990056+00:00","ok":true,"status_code":200,"error":null,"elapsed_ms":26,"live_responds":true},{"fetched_at":"2026-10-29T22:08:27.654444+00:00","ok":true,"status_code":200,"error":null,"elapsed_ms":31,"live_responds":true}],"catalog_attestation":null,"operator_revenue_evidence":{"evidence_class":"operator_submitted","authenticity":{"rung":"no_operator_evidence","rank":0,"why":"No verifiable operator evidence has been submitted for this agent.","thresholds":{"min_independent_payers":3,"min_verified_usd":25.0},"engine_table":"agent_authenticity","merge_rule":"max(existing_rank, rank)"},"metric_metadata":{"provenance":"operator_submitted_evidence","confidence":"attested","coverage":{"numerator":0},"as_of":"2026-10-30T00:28:29.419661+00:00","definition":"Revenue proofs submitted by the verified owner and re-checked by Agenstry against the settlement chain or the operator's own Stripe account. Only independently confirmed proofs are counted."},"counts":{"retained":0,"verified":0,"unverifiable":0},"verified":{"gross_usd":0.0,"transactions":0,"independent_payers":0},"detail_url":"https://agenstry.com/api/agents/stillopen.work/evidence","dispute_url":"https://agenstry.com/agents/stillopen.work/dispute"},"verification_history":[]}