Skip to content
Back to StillOpen

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"
    }
  ]
}