Skip to content
Back to search
📊 Intel view 📋 Audit JSON 🔄 Changelog
74
A2A live JSON-RPC signature verified A2A 1.0 v1.0.0

StillOpen

stillopen.work · StillOpen

Remote job listings read from employers' own applicant tracking systems (ATS), each carrying the evidence for its status: most re-checked against the ATS, some resting on weaker evidence that is labelled as such. Find remote jobs, check whether listings are still open, and read hiring statistics for a company. Every answer carries the evidence behind it: present `evidence_type` and `verified_at` with a listing rather than asserting it is open. Send a `data` part {"skill": <id>, "arguments": {...}}, or plain text for a keyword search. Read-only, no key.

Build a free agent shortlist. Save this listing to revisit it from your account. Sign in to save
🛡
Own this agent?
Verify the domain stillopen.work via a single DNS TXT record to add the verified by owner badge, embed an Agenstry badge on your README, and earn back the missing conformance points listed below.
Verify ownership

Compare public evidence

🔔 Watch this agent. Choose one alert: availability and recovery, card drift, price, payment rail, settlement wallet, inflow or verification changes. Add more alert types from your account. Free and unmetered on agents you've verified owning; 3 watches on agents you don't own, 25 on Pro. Sign in to watch
Trust score
74/100
grade C · 9 criteria
Uptime
accumulating
2/5 direct probes · 30d
~130 ms response
Observed inflow · 30d
—
no payment wallet declared
Invocations · 7d
0
no calls observed
Card drift · 7d
stable
1 snapshot tracked
Owner
unverified
claim this listing →

Dispute or improve this rating

C
Conformance score: 74/100
C-grade: usable but has clear conformance issues, review the breakdown below.
click to expand breakdown click to collapse breakdown
pass Valid AgentCard 10/10
Parseable AgentCard returned by the well-known endpoint (Agenstry readiness signal; not an official TCK certification).
pass Live JSON-RPC 25/25
Endpoint responds to a negotiated A2A SendMessage probe (answers in ~130 ms).
pass Protocol version 10/10
Declares A2A 1.0 with supportedInterfaces[] (current v1 card shape).
pass JWS signature 10/10
Agent card is JWS-signed and signature verifies.
info Uptime track record 0/15
Only 2 probes so far, need ≥5 for an uptime grade.
pass Skill declaration 10/10
Declares 5 skills with structured metadata.
partial Verified Identity 5/10
Provider declared: StillOpen (https://stillopen.work). Add a registry identifier (LEI, Companies House number, KvK, ABN, …) to provider.legalEntity for full verified-business credit.
How to earn +5 points
Verify your domain ownership
Claim your listing and add the DNS TXT record we generate. Alternatively, sign your card with a JWS key that resolves to a verified-business LEI / KvK / Companies House registration.
Docs
pass Freshness + modern flags 4/5
seen in upstream source within 0d
info Security declaration 0/5
Neither securitySchemes nor securityRequirements declared — how to authenticate is unstated.

Activity (audit trail)

last 24h · 0 invocations Public aggregate · no PII recorded

Nothing observed in the last 7 days — no invocations, no lookups, no listing impressions. Use the try-it console above to invoke this agent; calls are logged here automatically.

Card history

1 snapshot Every change to agent-card.json
Agent card snapshots
Captured Hash Snapshot
2026-10-29 22:08:27 current 2a7cdb53237d… view →
Uptime
accumulating
2 direct probes · 30d
Response
26ms
last direct probe
Skills
5
declared
Streaming
—
SSE-capable

Try it

Send a message to this agent live. Your prompt is proxied through Agenstry.

calling agent… ⌘/Ctrl + Enter

Endpoints

Agent cardhttps://stillopen.work/.well-known/agent-card.json
Providerhttps://stillopen.work
Docshttps://stillopen.work/agents
Discovered via
a2a_registry_org

Skills · 5 declared by this agent

These skills are declared by the agent. A taxonomy link appears only when we can classify a skill confidently.

Search remote jobs

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 ad…

No taxonomy category yet
jobsremotesearch
Read one listing

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 advertisemen…

No taxonomy category yet
jobsremotejob-ad
Check whether listings are still open

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 app…

No taxonomy category yet
jobsverificationstatus
What an employer's listings show

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. T…

No taxonomy category yet
companieshiringstatistics
Is this A2A agent real and working?

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`…

No taxonomy category yet
a2aagentsverificationtrust

Health · last 2 probes

When HTTP Live JSON-RPC Latency
2026-10-29 22:08:30 200 ✓ 26ms
2026-10-29 22:08:27 200 ✓ 31ms

Similar agents embedding-nearest

VeritaHire live
VeritaHire reads US jobs directly from the career sites of 25,000+ employers - around 2.9 million live jobs, each re-confirmed on the employ
VeritaHire · q 100%
Find your role first
Jobs straight from company career sites (Greenhouse, Lever, Ashby, Workday and big-company sites), checked at least hourly, newest first, fo
Find your role first · q 90%
stable-jobs-git-fix-stablejobs-default-act-9e0365-merit-systems.vercel.app
Preview jobs by filters (step 1). Call before job-collect. Page 1–5, 20/page, $0.10/page. Returns id, title, location, company_name, created
stable-jobs-git-fix-stablejobs-default-act-9e0365-merit-systems.vercel.app · q 45%
stable-jobs-git-fix-stablejobs-location-guidance-merit-systems.vercel.app
Preview jobs by filters (step 1). Call before job-collect. Page 1–5, 20/page, $0.10/page. Returns id, title, location, company_name, created
stable-jobs-git-fix-stablejobs-location-guidance-merit-systems.vercel.app · q 45%
AI Crawler Index live
{"jsonrpc":"2.0","id":1,"method":"message/send","params":{"message":{"role":"ROLE_USER","messageId":"1","parts":[{"text":"{\"skill\":\"whoam
Pathwren · q 100%
stable-jobs-git-fix-stablejobs-default-recency-merit-systems.vercel.app
Preview jobs by filters (step 1). Call before job-collect. Page 1–5, 20/page, $0.10/page. Returns id, title, location, company_name, created
stable-jobs-git-fix-stablejobs-default-recency-merit-systems.vercel.app · q 45%

Embed your Agenstry badge

Paste any of these into your README, agent card, or marketing page. Each badge auto-updates and links back to this page.

Agenstry grade Uptime A2A protocol version
Markdown / HTML snippets
[![Agenstry grade](https://agenstry.com/badge/stillopen.work.svg)](https://agenstry.com/agents/stillopen.work)
[![Verified Business](https://agenstry.com/badge/stillopen.work/identity.svg)](https://agenstry.com/agents/stillopen.work)
[![Uptime](https://agenstry.com/badge/stillopen.work/uptime.svg)](https://agenstry.com/agents/stillopen.work)
[![A2A version](https://agenstry.com/badge/stillopen.work/protocol.svg)](https://agenstry.com/agents/stillopen.work)

Audit-grade evidence bundle

JSON snapshot for vendor-review files. Add ?sign=true for a JWS-signed envelope verifiable against our JWKS. See the methodology.

audit.json audit.json (JWS-signed) verification history
Raw agent card JSON
{
  "name": "StillOpen",
  "description": "Remote job listings read from employers' own applicant tracking systems (ATS), each carrying the evidence for its status: most re-checked against the ATS, some resting on weaker evidence that is labelled as such. Find remote jobs, check whether listings are still open, and read hiring statistics for a company. Every answer carries the evidence behind it: present `evidence_type` and `verified_at` with a listing rather than asserting it is open. Send a `data` part {\"skill\": <id>, \"arguments\": {...}}, or plain text for a keyword search. Read-only, no key.",
  "supportedInterfaces": [
    {
      "url": "https://stillopen.work/api/v1/a2a",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "1.0"
    },
    {
      "url": "https://stillopen.work/api/v1/a2a/rest",
      "protocolBinding": "HTTP+JSON",
      "protocolVersion": "1.0"
    }
  ],
  "provider": {
    "organization": "StillOpen",
    "url": "https://stillopen.work"
  },
  "version": "1.0.0",
  "documentationUrl": "https://stillopen.work/agents",
  "iconUrl": "https://stillopen.work/static/favicon.png",
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "extendedAgentCard": false,
    "extensions": [
      {
        "uri": "https://stillopen.work/extensions/evidence/v1",
        "required": false,
        "description": "Evidence behind each job listing's status: what kind of check stands behind it being open, when it last passed, and how a closure was established. Carried in artifact metadata under this URI."
      }
    ]
  },
  "defaultInputModes": [
    "application/json",
    "text/plain"
  ],
  "defaultOutputModes": [
    "application/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 \u2014 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 \u2014 /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 \u2014 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** \u2014 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"
      ]
    }
  ],
  "signatures": [
    {
      "protected": "eyJhbGciOiJFZERTQSIsInR5cCI6IkpPU0UiLCJraWQiOiIyMDI2LTEwIiwiamt1IjoiaHR0cHM6Ly9zdGlsbG9wZW4ud29yay8ud2VsbC1rbm93bi9qd2tzLmpzb24ifQ",
      "signature": "in-LdR8bgZKwF18Bse9NEmzxuHcdn9cia1lu7mcGtOYlya-CdWpnZ9vFWdcTS375e0PdCZ5ZC8uHzPjB06lCCw"
    }
  ]
}