Agent skill

Syncso

by SyncSo-Inc in SyncSo-Inc/syncso

Search real live music, theater, comedy, film, art, sports, festivals, markets, food and drink, classes, tours and nightlife in New York City — with dates, times, prices, booking links and images.

MITAuto-check passed

Install Syncso

skills CLI
$ npx skills add SyncSo-Inc/syncso --skill syncso -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install SyncSo-Inc/syncso syncso --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/SyncSo-Inc/syncso.git skills-src && mkdir -p .claude/skills && cp -r skills-src/syncso .claude/skills/syncso && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
syncso
GitHub stars
301
Token cost
~4.1k tokens
SKILL.md length
1,468 words
Files
1
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

Search real live music, theater, comedy, film, art, sports, festivals, markets, food and drink, classes, tours and nightlife in New York City — with dates, times, prices, booking links and images.

  • SKILL.md covers Connect, Getting a token, The clock and One call, and the answer comes…, plus 5 more sections
  • Calls curl; reaches rtdb.syncso.com and syncso.com; needs SYNCSO_TOKEN

What it does

Syncso is an agent skill from SyncSo-Inc/syncso. Search real live music, theater, comedy, film, art, sports, festivals, markets, food and drink, classes, tours and nightlife in New York City — with dates, times, prices, booking links and images. Use this whenever someone asks what to do, where to go, what is on, or where to take people in New York, for any date or none, even if they do not name SyncSo. Live catalogue, updated continuously.

Its SKILL.md is about 4.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It works with Model Context Protocol. The repository describes itself as: Let your agents understand what's happening locally, in real time — every experience across a city, with times, prices, booking links and images. The licence is MIT.

Example prompts

  • “/syncso”

Requirements

  • A credential in SYNCSO_TOKEN

What it can do on your machine

Read from SKILL.md and the folder at commit 11f3379. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • curl

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • rtdb.syncso.com
    • syncso.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • SYNCSO_TOKEN

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Syncso loads about 4.1k tokens when it runs. Until then it costs about 100 tokens; SKILL.md has 1,468 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~100
When it runs · the whole SKILL.md, loaded when a task matches
~4.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from SyncSo-Inc/syncso at commit 11f3379, republished under its MIT licence (© SyncSo-Inc). 1,468 words, ~4,063 tokens.

Download SKILL.mdSave it as .claude/skills/syncso/SKILL.md (or your agent's skills folder).
name
syncso
description
Search real live music, theater, comedy, film, art, sports, festivals, markets, food and drink, classes, tours and nightlife in New York City — with dates, times, prices, booking links and images. Use this whenever someone asks what to do, where to go, what is on, or where to take people in New York, for any date or none, even if they do not name SyncSo. Live catalogue, updated continuously.
metadata.version
2.0.0

SyncSo: finding things to do

SyncSo reads everything happening around this person — events, shows, classes, tours, markets, tastings — and answers what they should do. Use find_things_to_do whenever they ask what to do, where to go, what is on, or want a day or an evening planned. New York only for now, with more cities in the next few months — for anywhere else, say that rather than searching.

Connect

If your client speaks MCP, point it at the endpoint and stop reading here. It will be told to authenticate, the tools and this guidance arrive on connect, and everything below is handled for you.

https://rtdb.syncso.com/partner/mcp

If it does not, the tool definitions are at the end of this file. Add them to your model's tools and POST each call as JSON-RPC to that same URL, carrying the access token from the section below. The reply is result.content[0].text — compact text, about 120 tokens per result, ready to hand straight back to the model.

Send X-SyncSo-Skill: 2.0.0 on every call, in the same place you set the Authorization header — it says which copy of this file you are working from. Copy the number as it appears here. If this file later changes in a way that makes your copy wrong, a search will refuse and tell you to fetch it again rather than answer from stale guidance.

sh
curl -sS https://rtdb.syncso.com/partner/mcp \
  -H "Authorization: Bearer $SYNCSO_TOKEN" \
  -H "X-SyncSo-Skill: 2.0.0" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"find_things_to_do","arguments":{
         "request":"A first date tonight in the East Village, somewhere quiet enough to talk"}}}'

Getting a token

Every call is made on behalf of the person you are helping, and carries something that identifies their account.

The simple way, and the one to reach for first. Send them this page:

https://syncso.com/connect

They sign in, copy the code it shows, and give it back to you in the conversation. Send each call with that code as Authorization: Bearer <code> and you are done — nothing to register, nothing to refresh, no browser of your own. Keep it for next time; it does not expire on its own, and they can replace it on that same page.

Ask for the code when you set up — say what it is for, and that it spends their own allowance.

The OAuth way, if you are built for it. Call WITHOUT anything first: the 401 carries a WWW-Authenticate header naming https://rtdb.syncso.com/partner/.well-known/oauth-protected-resource, which names the authorization server. That is the standard OAuth 2.1 discovery path (RFC 9728), and any OAuth client library can walk it. Run the authorization code flow with PKCE, let them approve once in a browser, then keep the refresh token and use it when the access token expires, which is about an hour.

Both open the same account, and the tools behave identically on either.

This is their account, not yours. It carries their free allowance, and if they subscribe it is their subscription — so the payment tools act on their balance, and you never handle money yourself.

The clock

Every answer opens with the current New York time. Say times in words — "tonight", "this weekend" — and they are resolved against that clock, which is the simplest thing to do; send a resolved window in when only when you already hold exact values. Before the first call of a conversation, use the date your own instructions give you; if you have none, ask without when and read the clock off the answer.

One call, and the answer comes back ordered

Send what they said, in their words, and with it whatever you know about this person that bears on it:

Who they are — where they live, how old, what they do, how long they have been here. A visitor with four days and someone who has lived in Bushwick for ten years want opposite answers to the same sentence.

Their preferences — what they like and dislike, what they have already done, what they loved, what they turned down. In this conversation or an earlier one. This is the most useful thing you can send and the easiest to leave behind, because it is not in the question they just asked.

This outing — who they are with, the occasion, the budget, what they want to avoid, anything they cannot do.

Send what you have, as much as you have. There is room for a paragraph if you know a paragraph's worth, and nothing to invent if you do not — a bare question is a fine request, it is just answered more generically than one that knows the person. Keep their own sentence in there either way.

Do not split it into searches. One request is one call, however many interests it names. "Art in the afternoon, dinner somewhere lively, then live music" is one request, not three.

Do not re-rank or filter what comes back. Every row was read against this request by a model that saw it — a thousand rows and more — and the order is that judgement. Show them in the order given. Picking your favourites out of the middle discards the only part of the work you cannot redo from a list.

Leave nothing out of request for being unsearchable. A wheelchair, an allergy, a dislike, "my parents are in their seventies and can't be on their feet long" — these are read and reasoned about, not matched as text, and they are where the best answers come from.

An answer costs 5-10 credits for the first 50 results and 3 for each further 50, on the work it actually did.

Leave limit out: it is 20, and that is almost always the right ask. A smaller number does not come back sooner — the sentences are written in parallel and released in rank order, so the first card arrives at the same moment either way. Asking for fewer buys fewer credits, never less waiting.

Show full SKILL.md (514 more words)Show less

Showing the answer

Each row arrives finished, laid out as the card to show:

![name](the picture)

**name** — why it suits this person
time · venue · price
[Book](the booking link)

Pass them on in that shape and that order, all of them, top to bottom. Please don't reorder everything, and please don't investigate everything, because the user needs the results fast.

The sentence is already written for this request — use it, as it is written. Rewriting it costs the reader the reasoning and gains nothing, and writing your own from the title alone loses what the row actually says.

Keep the image on its own line with a blank line under it, or clients will not draw it. Drop the [1] id: … handles — they are there so you can tell which row is which, not for the reader. Times are New York local; never convert them, and never say whether tickets are available.

Open with the line the answer leads with: it says how much was read and what the request was taken to mean, which is the reader's one chance to correct you before reading on.

Follow-ups

  • More: the same request with the cursor from the last answer. Nothing else changed. An expired cursor means asking again without one.
  • A change of mind ("too far", "something cheaper", "actually Friday"): a new call with the change folded into request. Say the whole thing again, not just the correction.
  • More about one row: get_details with its id and kind: "experience" — every row here is one, so there is nothing to work out. (kind: "venue" exists for rows from the older search tools, which answered with places as well.) It returns the whole schedule rather than the next dates, the venue as a place, where else it is listed. Several ids in one call cost the same as one. Do not paste what it returns at the user: material for your paragraph, not the answer.

Money

Never ask for card details yourself, and never put them in a message. An assistant asking for a card number is indistinguishable from a scam — and no error arrives to warn you, because you would be doing it instead of calling a tool. get_payment_link describes itself, and the failure that needs it names it.

When an answer is empty or fails

Nothing on in that window and area means the window or the distance is the thing to widen — there is no second place to look. Adjust once, then tell the user what you asked for. An answer that says a place is outside the area we cover is neither empty nor a failure: New York is the only city for now, and nothing was searched. Say that in a sentence, and do not search New York in its place unless they ask for it.

On rate_limited, wait the seconds given and retry. On insufficient_credits or quota_exceeded, stop and tell the user.

Tool definitions

OpenAI's Responses API shape, which is flat: type, name, description, parameters. For the older Chat Completions API, wrap each one — {"type": "function", "function": {name, description, parameters}} — or it will be rejected. For Anthropic, rename parameters to input_schema and drop the type wrapper.

json
[
  {
    "type": "function",
    "name": "find_things_to_do",
    "description": "The tool to reach for whenever someone asks what to do, where to go, what is on, or wants a day or an evening planned.\n\nSend what they said, in their words, and with it whatever you know about this person — who they are, and their preferences: what they have liked, disliked or already done. Not only tonight's constraints. One call. We read everything on in that window and that area — a thousand rows and more — and return the ones that fit, in order, each with a sentence saying why it is there.\n\nDO NOT split the request into searches, and do not re-rank or filter what comes back. The ordering is the answer: it was made by reading every candidate against this person's actual request, which is work no selection from a results list can redo. Show them in the order given.\n\nKeyword searches miss the local life — a Go night at a cafe, a running club, an origami meetup, a free park tour — because\nnone of it describes itself in the words anyone would search for. Reading every row is how those are found.\n\nNew York only for now.\n\n11-16 seconds for a screenful. Priced per call on the work it did: 5-10 credits for the first 50 results and 3 for each further 50, so `limit` is what moves both the clock and the price.",
    "parameters": {
      "type": "object",
      "properties": {
        "request": {
          "type": "string",
          "minLength": 1,
          "maxLength": 2000,
          "description": "What they want, in their own words, and with it whatever you know about this person that bears on it:\n\nWHO THEY ARE — where they live, how old, what they do, how long they have been in the city.\n\nTHEIR PREFERENCES — what they like and dislike, what they have already done, what they loved, what they turned down. In this conversation or an earlier one. This is the most useful thing you can send and the easiest to leave behind, because it is not in the question they just asked.\n\nTHIS OUTING — who they are with, the occasion, the budget, what they want to avoid, anything they cannot do.\n\nProse, not keywords. Send what you have, as much as you have: there is room for a paragraph if you know a paragraph's worth, and nothing to invent if you do not. All of it is read and reasoned about, never matched as text. Leave nothing out for being unsearchable: a wheelchair, an allergy, a dislike, \"her parents are in their seventies and can't be on their feet long\" all belong here, and are where the best answers come from.\n\nTime and place can be said here too, in words — \"tonight\", \"this weekend\", \"near Columbia\" — and are resolved against the real clock and map. Use the structured fields instead only when you already hold the exact values."
        },
        "place": {
          "type": "string",
          "maxLength": 120,
          "description": "A neighbourhood, borough or landmark, when you want to be certain of it rather than leave it to the sentence. Beats any place named in `request`."
        },
        "lat": {
          "type": "number",
          "description": "Their position, if you have it. Send both `lat` and `lng`; either alone is ignored. Beats `place`."
        },
        "lng": {
          "type": "number",
          "description": "The other half of `lat`. Negative in New York."
        },
        "radius_mi": {
          "type": "number",
          "minimum": 0.1,
          "maximum": 50,
          "description": "How far they will go. Default 3 miles from a point, 5 from a named area."
        },
        "when": {
          "type": "object",
          "description": "A window you have already resolved, New York local time. Beats any time in `request`. Give `end` only when there is a real deadline: an absent `end` means the rest of that day, not the coming year.",
          "properties": {
            "start": {
              "type": "string",
              "description": "e.g. 2026-10-02T18:00"
            },
            "end": {
              "type": "string",
              "description": "Same shape as `start`, e.g. 2026-10-02T23:00. A deadline, not a day: leave it out and the window runs to the end of `start`'s day."
            }
          },
          "required": [
            "start"
          ]
        },
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 400,
          "description": "How many to return. Defaults to 20, in order; show them in that order, and leave this field out — the default is almost always the one to send.\n\nA smaller number does not come back sooner. The sentences are written in parallel and released in rank order, so the first card arrives at the same moment whether you asked for 12 or 50. Asking for fewer buys fewer credits and a shorter answer, never less waiting.\n\nSo send a number only when the person wants a short list, or when you are spending their credits carefully: a sentence is written for every row returned, and the price follows that. Ask for what you will actually show — but never to go faster, because there is no faster here."
        },
        "cursor": {
          "type": "string",
          "description": "Next page of the same answer."
        }
      },
      "required": [
        "request"
      ]
    }
  },
  {
    "type": "function",
    "name": "get_details",
    "description": "The full record behind a search result, by its id. A search row is a summary; this is everything we hold about that one thing — its whole schedule rather than the next dates, the venue as a place rather than an address, and where else it is listed.\n\nCall it when the row in front of you does not answer what you are about to say. 1 credit per call, and several ids in one call cost the same as one. Not for pictures — the search row already carries the image URL, and this returns none.",
    "parameters": {
      "type": "object",
      "properties": {
        "items": {
          "type": "array",
          "minItems": 1,
          "maxItems": 20,
          "description": "The results to look up, up to 20 at once. One entry per id.",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "The id shown on a search result."
              },
              "kind": {
                "type": "string",
                "enum": [
                  "experience",
                  "venue"
                ],
                "description": "experience for a row from the EXPERIENCES list, venue for one from VENUES."
              }
            },
            "required": [
              "id",
              "kind"
            ]
          }
        }
      },
      "required": [
        "items"
      ]
    }
  }
]

© SyncSo-Inc, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in syncso of SyncSo-Inc/syncso.

Open the folder on GitHubat commit 11f3379

Compare with similar skills

Syncso next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Syncso compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Syncso this skillSyncSo-Inc/syncso301—~4.1kAutomated safety check: PassMIT
MCP Server Builderanthropics/skills180k63 repos~2.3kAutomated safety check: PassApache-2.0
MCP Server BuildershareAI-lab/learn-claude-code78k4 repos~1.2kAutomated safety check: PassMIT
MCP Integration for Pluginsanthropics/claude-plugins-official38k11 repos~3.1kAutomated safety check: PassApache-2.0
Figma use_figma Plugin API Ruleswarpdotdev/warp65k4 repos~4.4kAutomated safety check: PassAGPL-3.0
Stitch to Remotion Walkthrough Videosgoogle-labs-code/stitch-skills8.5k6 repos~3.2kAutomated safety check: NotesApache-2.0

Similar skills

  • MCP Server Builder

    anthropics/skills

    Official

    Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.

    180k GitHub starsUsed in 63 repos~2.3k tokens
    Agent WorkflowsAuto-check passed
  • MCP Server Builder

    shareAI-lab/learn-claude-code

    Walks through building MCP servers in Python or TypeScript that expose tools, resources and prompts to Claude, with templates, registration and testing.

    78k GitHub starsUsed in 4 repos~1.2k tokens
    Agent WorkflowsAuto-check passed
  • MCP Integration for Plugins

    anthropics/claude-plugins-official

    Official

    Explains how to bundle Model Context Protocol servers in a Claude Code plugin, covering config files, stdio, SSE, HTTP and WebSocket server types, and authentication.

    38k GitHub starsUsed in 11 repos~3.1k tokens
    Agent WorkflowsAuto-check passed
  • Required groundwork before any use_figma call: the rules and reference files for running JavaScript in a Figma file through the Plugin API without common failures.

    65k GitHub starsUsed in 4 repos~4.4k tokens
    Frontend & DesignAuto-check passed
  • Stitch to Remotion Walkthrough Videos

    google-labs-code/stitch-skills

    Official

    Builds walkthrough videos from Stitch design projects using Remotion, with transitions, zoom effects and text overlays on each screen.

    8.5k GitHub starsUsed in 6 repos~3.2k tokens
    Media & CreativeAuto-check: notes
  • MCP Development

    coollabsio/coolify

    A skill your agent uses for Laravel MCP development. An agent skill from coollabsio/coolify.

    63k GitHub starsUsed in 1 repo~949 tokens
    Frontend & DesignAuto-check passed

Questions about Syncso

What does Syncso do?

Search real live music, theater, comedy, film, art, sports, festivals, markets, food and drink, classes, tours and nightlife in New York City — with dates, times, prices, booking links and images. Syncso is an agent skill from SyncSo-Inc/syncso. Search real live music, theater, comedy, film, art, sports, festivals, markets, food and drink, classes, tours and nightlife in New York City — with dates, times, prices, booking links and images.

How do I install Syncso in Claude Code?

Run `npx skills add SyncSo-Inc/syncso --skill syncso -a claude-code`. Or copy the skill folder (syncso in SyncSo-Inc/syncso) into .claude/skills/syncso in your project. Claude Code loads it when a task matches its description.

How do I install Syncso in Codex?

Run `npx skills add SyncSo-Inc/syncso --skill syncso -a codex`. Or copy the skill folder (syncso in SyncSo-Inc/syncso) into .agents/skills/syncso in your project. Codex loads it when a task matches its description.

Can I use Syncso in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add SyncSo-Inc/syncso --skill syncso -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/syncso, .gemini/skills/syncso, .github/skills/syncso and .opencode/skills/syncso in your project.

What does Syncso need to run?

Going by SKILL.md and its folder, Syncso needs the command-line tools its instructions call (curl) and credentials named SYNCSO_TOKEN. Our summary lists: A credential in SYNCSO_TOKEN.

Does Syncso access the network?

SKILL.md names 2 domains. In commands or code: rtdb.syncso.com and syncso.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Syncso safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Syncso use?

Syncso is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Syncso use?

About 4.1k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Syncso?

Skills that share tags, products or a category with Syncso: MCP Server Builder (anthropics/skills, 180k stars), MCP Server Builder (shareAI-lab/learn-claude-code, 78k stars), MCP Integration for Plugins (anthropics/claude-plugins-official, 38k stars) and Figma use_figma Plugin API Rules (warpdotdev/warp, 65k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Syncso?

SyncSo-Inc (a GitHub organization) maintains it in SyncSo-Inc/syncso, which has 301 GitHub stars. The repository was last updated on October 9, 2026.

Source: SyncSo-Inc/syncso on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.