Card snapshot
stillopen.work
·
2026-10-29 22:08:27 UTC
·
2a7cdb53237db933384f679dd7a2ca31bef8d9834be57c3126bae20f844334d4
This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.
{
"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"
}
]
}