URL: https://api.github.com/repos/SaberMage/spt-releases/releases/tags/v0.31.0
Content-Type: application/json
Method: json

---

{
  "url": "https://api.github.com/repos/SaberMage/spt-releases/releases/352421619",
  "assets_url": "https://api.github.com/repos/SaberMage/spt-releases/releases/352421619/assets",
  "upload_url": "https://uploads.github.com/repos/SaberMage/spt-releases/releases/352421619/assets{?name,label}",
  "html_url": "https://github.com/SaberMage/spt-releases/releases/tag/v0.31.0",
  "id": 352421619,
  "author": {
    "login": "SaberMage",
    "id": 1035144,
    "node_id": "MDQ6VXNlcjEwMzUxNDQ=",
    "avatar_url": "https://avatars.githubusercontent.com/u/1035144?v=4",
    "gravatar_id": "",
    "url": "https://api.github.com/users/SaberMage",
    "html_url": "https://github.com/SaberMage",
    "followers_url": "https://api.github.com/users/SaberMage/followers",
    "following_url": "https://api.github.com/users/SaberMage/following{/other_user}",
    "gists_url": "https://api.github.com/users/SaberMage/gists{/gist_id}",
    "starred_url": "https://api.github.com/users/SaberMage/starred{/owner}{/repo}",
    "subscriptions_url": "https://api.github.com/users/SaberMage/subscriptions",
    "organizations_url": "https://api.github.com/users/SaberMage/orgs",
    "repos_url": "https://api.github.com/users/SaberMage/repos",
    "events_url": "https://api.github.com/users/SaberMage/events{/privacy}",
    "received_events_url": "https://api.github.com/users/SaberMage/received_events",
    "type": "User",
    "user_view_type": "public",
    "site_admin": false
  },
  "node_id": "RE_kwDOSyQ2Vs4VAYbz",
  "tag_name": "v0.31.0",
  "target_commitish": "main",
  "name": "spt v0.31.0",
  "draft": false,
  "immutable": false,
  "prerelease": false,
  "created_at": "2026-06-07T05:12:56Z",
  "updated_at": "2026-07-11T04:21:27Z",
  "published_at": "2026-07-11T04:21:27Z",
  "assets": [
    {
      "url": "https://api.github.com/repos/SaberMage/spt-releases/releases/assets/473198231",
      "id": 473198231,
      "node_id": "RA_kwDOSyQ2Vs4cNG6X",
      "name": "manifest.schema.json",
      "label": "",
      "uploader": {
        "login": "SaberMage",
        "id": 1035144,
        "node_id": "MDQ6VXNlcjEwMzUxNDQ=",
        "avatar_url": "https://avatars.githubusercontent.com/u/1035144?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/SaberMage",
        "html_url": "https://github.com/SaberMage",
        "followers_url": "https://api.github.com/users/SaberMage/followers",
        "following_url": "https://api.github.com/users/SaberMage/following{/other_user}",
        "gists_url": "https://api.github.com/users/SaberMage/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/SaberMage/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/SaberMage/subscriptions",
        "organizations_url": "https://api.github.com/users/SaberMage/orgs",
        "repos_url": "https://api.github.com/users/SaberMage/repos",
        "events_url": "https://api.github.com/users/SaberMage/events{/privacy}",
        "received_events_url": "https://api.github.com/users/SaberMage/received_events",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "content_type": "application/json",
      "state": "uploaded",
      "size": 40400,
      "digest": "sha256:c29fe612302d536c796d48957da69ca3e9fd1fc4db654d5d972d9bcd649aa306",
      "download_count": 1,
      "created_at": "2026-07-11T04:18:42Z",
      "updated_at": "2026-07-11T04:18:42Z",
      "browser_download_url": "https://github.com/SaberMage/spt-releases/releases/download/v0.31.0/manifest.schema.json"
    },
    {
      "url": "https://api.github.com/repos/SaberMage/spt-releases/releases/assets/473198240",
      "id": 473198240,
      "node_id": "RA_kwDOSyQ2Vs4cNG6g",
      "name": "mock-adapter.zip",
      "label": "",
      "uploader": {
        "login": "SaberMage",
        "id": 1035144,
        "node_id": "MDQ6VXNlcjEwMzUxNDQ=",
        "avatar_url": "https://avatars.githubusercontent.com/u/1035144?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/SaberMage",
        "html_url": "https://github.com/SaberMage",
        "followers_url": "https://api.github.com/users/SaberMage/followers",
        "following_url": "https://api.github.com/users/SaberMage/following{/other_user}",
        "gists_url": "https://api.github.com/users/SaberMage/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/SaberMage/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/SaberMage/subscriptions",
        "organizations_url": "https://api.github.com/users/SaberMage/orgs",
        "repos_url": "https://api.github.com/users/SaberMage/repos",
        "events_url": "https://api.github.com/users/SaberMage/events{/privacy}",
        "received_events_url": "https://api.github.com/users/SaberMage/received_events",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "content_type": "application/zip",
      "state": "uploaded",
      "size": 8599,
      "digest": "sha256:0fe02d50d471ba796ca73b85cb5e99c50fbb268da4e9222a73ca9209ff5ab463",
      "download_count": 0,
      "created_at": "2026-07-11T04:18:43Z",
      "updated_at": "2026-07-11T04:18:43Z",
      "browser_download_url": "https://github.com/SaberMage/spt-releases/releases/download/v0.31.0/mock-adapter.zip"
    },
    {
      "url": "https://api.github.com/repos/SaberMage/spt-releases/releases/assets/473198233",
      "id": 473198233,
      "node_id": "RA_kwDOSyQ2Vs4cNG6Z",
      "name": "SHA256SUMS",
      "label": "",
      "uploader": {
        "login": "SaberMage",
        "id": 1035144,
        "node_id": "MDQ6VXNlcjEwMzUxNDQ=",
        "avatar_url": "https://avatars.githubusercontent.com/u/1035144?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/SaberMage",
        "html_url": "https://github.com/SaberMage",
        "followers_url": "https://api.github.com/users/SaberMage/followers",
        "following_url": "https://api.github.com/users/SaberMage/following{/other_user}",
        "gists_url": "https://api.github.com/users/SaberMage/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/SaberMage/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/SaberMage/subscriptions",
        "organizations_url": "https://api.github.com/users/SaberMage/orgs",
        "repos_url": "https://api.github.com/users/SaberMage/repos",
        "events_url": "https://api.github.com/users/SaberMage/events{/privacy}",
        "received_events_url": "https://api.github.com/users/SaberMage/received_events",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "content_type": "application/octet-stream",
      "state": "uploaded",
      "size": 260,
      "digest": "sha256:c573eef8aceadbf40264cdd5c665ac3797d5dbe4b3ac11993c3f5523e53ea226",
      "download_count": 4,
      "created_at": "2026-07-11T04:18:42Z",
      "updated_at": "2026-07-11T04:18:42Z",
      "browser_download_url": "https://github.com/SaberMage/spt-releases/releases/download/v0.31.0/SHA256SUMS"
    },
    {
      "url": "https://api.github.com/repos/SaberMage/spt-releases/releases/assets/473198235",
      "id": 473198235,
      "node_id": "RA_kwDOSyQ2Vs4cNG6b",
      "name": "spt-x86_64-linux",
      "label": "",
      "uploader": {
        "login": "SaberMage",
        "id": 1035144,
        "node_id": "MDQ6VXNlcjEwMzUxNDQ=",
        "avatar_url": "https://avatars.githubusercontent.com/u/1035144?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/SaberMage",
        "html_url": "https://github.com/SaberMage",
        "followers_url": "https://api.github.com/users/SaberMage/followers",
        "following_url": "https://api.github.com/users/SaberMage/following{/other_user}",
        "gists_url": "https://api.github.com/users/SaberMage/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/SaberMage/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/SaberMage/subscriptions",
        "organizations_url": "https://api.github.com/users/SaberMage/orgs",
        "repos_url": "https://api.github.com/users/SaberMage/repos",
        "events_url": "https://api.github.com/users/SaberMage/events{/privacy}",
        "received_events_url": "https://api.github.com/users/SaberMage/received_events",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "content_type": "application/octet-stream",
      "state": "uploaded",
      "size": 42340776,
      "digest": "sha256:1306b84e46b083cbb7ce88ae87c72b66b834c3da5c62e19495b9dbeb952e2ba9",
      "download_count": 5,
      "created_at": "2026-07-11T04:18:42Z",
      "updated_at": "2026-07-11T04:18:56Z",
      "browser_download_url": "https://github.com/SaberMage/spt-releases/releases/download/v0.31.0/spt-x86_64-linux"
    },
    {
      "url": "https://api.github.com/repos/SaberMage/spt-releases/releases/assets/473198232",
      "id": 473198232,
      "node_id": "RA_kwDOSyQ2Vs4cNG6Y",
      "name": "spt-x86_64-linux-musl",
      "label": "",
      "uploader": {
        "login": "SaberMage",
        "id": 1035144,
        "node_id": "MDQ6VXNlcjEwMzUxNDQ=",
        "avatar_url": "https://avatars.githubusercontent.com/u/1035144?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/SaberMage",
        "html_url": "https://github.com/SaberMage",
        "followers_url": "https://api.github.com/users/SaberMage/followers",
        "following_url": "https://api.github.com/users/SaberMage/following{/other_user}",
        "gists_url": "https://api.github.com/users/SaberMage/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/SaberMage/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/SaberMage/subscriptions",
        "organizations_url": "https://api.github.com/users/SaberMage/orgs",
        "repos_url": "https://api.github.com/users/SaberMage/repos",
        "events_url": "https://api.github.com/users/SaberMage/events{/privacy}",
        "received_events_url": "https://api.github.com/users/SaberMage/received_events",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "content_type": "application/octet-stream",
      "state": "uploaded",
      "size": 41163592,
      "digest": "sha256:7356a2a9280f32fe7178e22f1b2e149d17ed81c7d740e12f14a774772fe4c0da",
      "download_count": 3,
      "created_at": "2026-07-11T04:18:42Z",
      "updated_at": "2026-07-11T04:18:56Z",
      "browser_download_url": "https://github.com/SaberMage/spt-releases/releases/download/v0.31.0/spt-x86_64-linux-musl"
    },
    {
      "url": "https://api.github.com/repos/SaberMage/spt-releases/releases/assets/473199899",
      "id": 473199899,
      "node_id": "RA_kwDOSyQ2Vs4cNHUb",
      "name": "spt-x86_64-linux-musl.release.json",
      "label": "",
      "uploader": {
        "login": "SaberMage",
        "id": 1035144,
        "node_id": "MDQ6VXNlcjEwMzUxNDQ=",
        "avatar_url": "https://avatars.githubusercontent.com/u/1035144?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/SaberMage",
        "html_url": "https://github.com/SaberMage",
        "followers_url": "https://api.github.com/users/SaberMage/followers",
        "following_url": "https://api.github.com/users/SaberMage/following{/other_user}",
        "gists_url": "https://api.github.com/users/SaberMage/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/SaberMage/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/SaberMage/subscriptions",
        "organizations_url": "https://api.github.com/users/SaberMage/orgs",
        "repos_url": "https://api.github.com/users/SaberMage/repos",
        "events_url": "https://api.github.com/users/SaberMage/events{/privacy}",
        "received_events_url": "https://api.github.com/users/SaberMage/received_events",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "content_type": "application/json",
      "state": "uploaded",
      "size": 449,
      "digest": "sha256:ad31d274f0536ae7da5e5da57bccb8b2de8f352a33e1dd967835c86d65340d9b",
      "download_count": 0,
      "created_at": "2026-07-11T04:21:26Z",
      "updated_at": "2026-07-11T04:21:26Z",
      "browser_download_url": "https://github.com/SaberMage/spt-releases/releases/download/v0.31.0/spt-x86_64-linux-musl.release.json"
    },
    {
      "url": "https://api.github.com/repos/SaberMage/spt-releases/releases/assets/473199900",
      "id": 473199900,
      "node_id": "RA_kwDOSyQ2Vs4cNHUc",
      "name": "spt-x86_64-linux.release.json",
      "label": "",
      "uploader": {
        "login": "SaberMage",
        "id": 1035144,
        "node_id": "MDQ6VXNlcjEwMzUxNDQ=",
        "avatar_url": "https://avatars.githubusercontent.com/u/1035144?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/SaberMage",
        "html_url": "https://github.com/SaberMage",
        "followers_url": "https://api.github.com/users/SaberMage/followers",
        "following_url": "https://api.github.com/users/SaberMage/following{/other_user}",
        "gists_url": "https://api.github.com/users/SaberMage/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/SaberMage/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/SaberMage/subscriptions",
        "organizations_url": "https://api.github.com/users/SaberMage/orgs",
        "repos_url": "https://api.github.com/users/SaberMage/repos",
        "events_url": "https://api.github.com/users/SaberMage/events{/privacy}",
        "received_events_url": "https://api.github.com/users/SaberMage/received_events",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "content_type": "application/json",
      "state": "uploaded",
      "size": 449,
      "digest": "sha256:e12c816474a57753ed2e59ca9f9e2a71c8dd391612413d2de18abf9060b16584",
      "download_count": 1,
      "created_at": "2026-07-11T04:21:26Z",
      "updated_at": "2026-07-11T04:21:26Z",
      "browser_download_url": "https://github.com/SaberMage/spt-releases/releases/download/v0.31.0/spt-x86_64-linux.release.json"
    },
    {
      "url": "https://api.github.com/repos/SaberMage/spt-releases/releases/assets/473198236",
      "id": 473198236,
      "node_id": "RA_kwDOSyQ2Vs4cNG6c",
      "name": "spt-x86_64-windows.exe",
      "label": "",
      "uploader": {
        "login": "SaberMage",
        "id": 1035144,
        "node_id": "MDQ6VXNlcjEwMzUxNDQ=",
        "avatar_url": "https://avatars.githubusercontent.com/u/1035144?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/SaberMage",
        "html_url": "https://github.com/SaberMage",
        "followers_url": "https://api.github.com/users/SaberMage/followers",
        "following_url": "https://api.github.com/users/SaberMage/following{/other_user}",
        "gists_url": "https://api.github.com/users/SaberMage/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/SaberMage/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/SaberMage/subscriptions",
        "organizations_url": "https://api.github.com/users/SaberMage/orgs",
        "repos_url": "https://api.github.com/users/SaberMage/repos",
        "events_url": "https://api.github.com/users/SaberMage/events{/privacy}",
        "received_events_url": "https://api.github.com/users/SaberMage/received_events",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "content_type": "application/octet-stream",
      "state": "uploaded",
      "size": 31326720,
      "digest": "sha256:4d57cf941d45d4504a0e4ae8c543d512bbd428fa23cdc297373413a347f62b5d",
      "download_count": 4,
      "created_at": "2026-07-11T04:18:42Z",
      "updated_at": "2026-07-11T04:18:54Z",
      "browser_download_url": "https://github.com/SaberMage/spt-releases/releases/download/v0.31.0/spt-x86_64-windows.exe"
    },
    {
      "url": "https://api.github.com/repos/SaberMage/spt-releases/releases/assets/473199898",
      "id": 473199898,
      "node_id": "RA_kwDOSyQ2Vs4cNHUa",
      "name": "spt-x86_64-windows.exe.release.json",
      "label": "",
      "uploader": {
        "login": "SaberMage",
        "id": 1035144,
        "node_id": "MDQ6VXNlcjEwMzUxNDQ=",
        "avatar_url": "https://avatars.githubusercontent.com/u/1035144?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/SaberMage",
        "html_url": "https://github.com/SaberMage",
        "followers_url": "https://api.github.com/users/SaberMage/followers",
        "following_url": "https://api.github.com/users/SaberMage/following{/other_user}",
        "gists_url": "https://api.github.com/users/SaberMage/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/SaberMage/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/SaberMage/subscriptions",
        "organizations_url": "https://api.github.com/users/SaberMage/orgs",
        "repos_url": "https://api.github.com/users/SaberMage/repos",
        "events_url": "https://api.github.com/users/SaberMage/events{/privacy}",
        "received_events_url": "https://api.github.com/users/SaberMage/received_events",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "content_type": "application/json",
      "state": "uploaded",
      "size": 449,
      "digest": "sha256:d856b501dba95e7a3e087c75bced04c36314f1b72ae3a9223e1eff75961e5e95",
      "download_count": 1,
      "created_at": "2026-07-11T04:21:26Z",
      "updated_at": "2026-07-11T04:21:26Z",
      "browser_download_url": "https://github.com/SaberMage/spt-releases/releases/download/v0.31.0/spt-x86_64-windows.exe.release.json"
    },
    {
      "url": "https://api.github.com/repos/SaberMage/spt-releases/releases/assets/473199901",
      "id": 473199901,
      "node_id": "RA_kwDOSyQ2Vs4cNHUd",
      "name": "update-set.json",
      "label": "",
      "uploader": {
        "login": "SaberMage",
        "id": 1035144,
        "node_id": "MDQ6VXNlcjEwMzUxNDQ=",
        "avatar_url": "https://avatars.githubusercontent.com/u/1035144?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/SaberMage",
        "html_url": "https://github.com/SaberMage",
        "followers_url": "https://api.github.com/users/SaberMage/followers",
        "following_url": "https://api.github.com/users/SaberMage/following{/other_user}",
        "gists_url": "https://api.github.com/users/SaberMage/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/SaberMage/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/SaberMage/subscriptions",
        "organizations_url": "https://api.github.com/users/SaberMage/orgs",
        "repos_url": "https://api.github.com/users/SaberMage/repos",
        "events_url": "https://api.github.com/users/SaberMage/events{/privacy}",
        "received_events_url": "https://api.github.com/users/SaberMage/received_events",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "content_type": "application/json",
      "state": "uploaded",
      "size": 954,
      "digest": "sha256:9b4cf8077cc74ae470ae4898036cabe38667664a6aa3748c8e5f831e91b53e01",
      "download_count": 7,
      "created_at": "2026-07-11T04:21:26Z",
      "updated_at": "2026-07-11T04:21:26Z",
      "browser_download_url": "https://github.com/SaberMage/spt-releases/releases/download/v0.31.0/update-set.json"
    }
  ],
  "tarball_url": "https://api.github.com/repos/SaberMage/spt-releases/tarball/v0.31.0",
  "zipball_url": "https://api.github.com/repos/SaberMage/spt-releases/zipball/v0.31.0",
  "body": "\nA messaging and identity release: agent-to-agent messages now deliver exactly\nonce with the right sender on them, endpoints you save come back on their own\nafter a daemon restart, and several ways an agent's identity or saved context\ncould be lost are closed.\n\n> **Applying this update needs a daemon restart.** Parts of this release live\n> in the always-on daemon, so `spt update fetch --apply` lands it via a full\n> daemon restart rather than a live swap — your sessions restart as the daemon\n> comes back.\n\n### Added\n\n- `spt endpoint run --save` — make an endpoint a startup default. The daemon\n  relaunches every saved endpoint (as a fresh session) each time it starts, so\n  your always-on endpoints come back by themselves after a restart instead of\n  staying offline until someone re-runs them. Saving the same endpoint again\n  replaces its saved entry; `spt endpoint run` without `--save` leaves your\n  startup defaults alone.\n\n### Fixed\n\n- A message could be delivered twice — once to the agent and once typed into\n  its terminal as stray, never-submitted text. Delivery now takes exactly one\n  path: a session that reads its own messages receives each message there and\n  nowhere else, and when more than one carrier could deliver, exactly one now\n  claims it. Leftover terminal-echo settings from earlier sessions are also\n  cleared when the daemon starts, so they cannot quietly re-open the second\n  path.\n- `spt send` from inside an agent's shell went out as anonymous\n  `cli@<machine>` instead of the agent itself, so replies to it bounced with\n  `NO_PERCH`. Sends from an agent-bound shell are now stamped with the agent's\n  own id (only when that id really holds a bound perch), and replies route\n  back to the sender.\n- Bringing up a listener punished a refused first attempt: the one-time\n  startup seed was consumed even when the bind was refused, so the corrected\n  retry dead-ended with no seed. A refusal now puts the seed back — retrying\n  with corrected flags just works. Error hints also print a command form that\n  actually parses, and `spt listen --session-id` offers a fallback way to bind\n  when no seed is present.\n- A saved context update could silently lose its project-specific part: if it\n  arrived while the agent's project could not yet be resolved, that part was\n  parsed but never filed, and then deleted with the rest of the update. The\n  unfiled part is now preserved and filed as soon as the project resolves —\n  nothing is dropped.\n- A stale or leaked identity value inherited through the environment could let\n  a new session sit down in an agent seat that was not its own. The daemon now\n  scrubs inherited identity variables at startup and refuses seat takeovers\n  from sessions that do not hold the seat.\n- Connection logs blamed the wrong thing: routine dial noise from peers that\n  went offline was reported with the same message as a genuinely stuck\n  connection being cut off. The two cases now log distinctly, and connection\n  log lines carry which session and endpoint were involved, so a real stall is\n  recognizable at a glance instead of drowned in noise.\n\n"
}