Gemini Live API Dev
google-gemini/gemini-skills
A skill your agent uses when building real-time, bidirectional streaming applications with the Gemini Live API, or migrating legacy Live models (2.0/2.5/3.1) to Gemini 3.8 Live.
Frontend/Node integration with SAS backends using @sasjs/adapter - configuring the SASjs class, the exact request() inputs and response shape, authentication, file upload, and session management.
$ npx skills add sasjs/core --skill sasjs-adapter -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install sasjs/core sasjs-adapter --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/sasjs/core.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/sasjs-adapter .claude/skills/sasjs-adapter && rm -rf skills-srcUse ~/.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/
Install the "sasjs-adapter" agent skill from https://github.com/sasjs/core/tree/main/.agents/skills/sasjs-adapter into .claude/skills/sasjs-adapter/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sasjs-adapter", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/sasjs/core/tree/main/.agents/skills/sasjs-adapterType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add sasjs/core --skill sasjs-adapter -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install sasjs/core sasjs-adapter --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sasjs/core.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/sasjs-adapter .agents/skills/sasjs-adapter && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "sasjs-adapter" agent skill from https://github.com/sasjs/core/tree/main/.agents/skills/sasjs-adapter into .agents/skills/sasjs-adapter/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sasjs-adapter", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add sasjs/core --skill sasjs-adapter -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install sasjs/core sasjs-adapter --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sasjs/core.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/sasjs-adapter .cursor/skills/sasjs-adapter && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "sasjs-adapter" agent skill from https://github.com/sasjs/core/tree/main/.agents/skills/sasjs-adapter into .cursor/skills/sasjs-adapter/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sasjs-adapter", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/sasjs/core.git --path .agents/skills/sasjs-adapter--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add sasjs/core --skill sasjs-adapter -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install sasjs/core sasjs-adapter --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sasjs/core.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/sasjs-adapter .gemini/skills/sasjs-adapter && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "sasjs-adapter" agent skill from https://github.com/sasjs/core/tree/main/.agents/skills/sasjs-adapter into .gemini/skills/sasjs-adapter/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sasjs-adapter", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install sasjs/core sasjs-adapterInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add sasjs/core --skill sasjs-adapter -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/sasjs/core.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/sasjs-adapter .github/skills/sasjs-adapter && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "sasjs-adapter" agent skill from https://github.com/sasjs/core/tree/main/.agents/skills/sasjs-adapter into .github/skills/sasjs-adapter/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sasjs-adapter", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add sasjs/core --skill sasjs-adapter -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install sasjs/core sasjs-adapter --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sasjs/core.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/sasjs-adapter .opencode/skills/sasjs-adapter && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "sasjs-adapter" agent skill from https://github.com/sasjs/core/tree/main/.agents/skills/sasjs-adapter into .opencode/skills/sasjs-adapter/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sasjs-adapter", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
sasjs-adapterFrontend/Node integration with SAS backends using @sasjs/adapter - configuring the SASjs class, the exact request() inputs and response shape, authentication, file upload, and session management.
Sasjs Adapter is an agent skill from sasjs/core. Frontend/Node integration with SAS backends using @sasjs/adapter - configuring the SASjs class, the exact request() inputs and response shape, authentication, file upload, and session management. Use when writing TypeScript/JavaScript that calls SAS services or jobs.
Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Backend & APIs, covering Authentication and File uploads and storage. It works with TypeScript and JavaScript. The repository describes itself as: Macros for SAS® App Developers. The licence is MIT.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit b13a83f. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
npmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Sasjs Adapter loads about 2.6k tokens when it runs. Until then it costs about 70 tokens; SKILL.md has 1,182 words of instructions outside code blocks.
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.
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.
The full file from sasjs/core at commit b13a83f, republished under its MIT licence (© sasjs). 1,182 words, ~2,624 tokens.
.claude/skills/sasjs-adapter/SKILL.md (or your agent's skills folder).@sasjs/adapter is the TypeScript library for calling SAS services/jobs from browsers or Node, with a unified API across three server types: SAS9, SASVIYA, SASJS.
import SASjs from '@sasjs/adapter'
const sasjs = new SASjs({
serverUrl: 'https://sas.example.com',
serverType: 'SASVIYA', // SAS9 | SASVIYA | SASJS
appLoc: '/Public/app/myapp', // root folder of deployed services
contextName: 'SAS Job Execution compute context', // Viya only
debug: false
})sasjs.request(
sasJob: string,
data: { [key: string]: any[] } | null,
config?: { [key: string]: any }, // merged over SASjsConfig
loginRequiredCallback?: () => any,
authConfig?: AuthConfig, // Viya tokens for Node usage
extraResponseAttributes?: ExtraResponseAttributes[] // ['log'] | ['file'] | ['data']
)sasJob: relative path (no leading slash) resolved against appLoc, or an absolute path. Becomes the SAS _program parameter.data: an object whose keys become work datasets in SAS. Can be null if the service takes no input.config: overrides merged on top of the constructor config for this call only.data object - tables, not arbitrary JSONEvery key in data must be an array of plain objects. Each key becomes a SAS work dataset named after the key; each object in the array is a row; each property is a column.
const res = await sasjs.request('services/common/getdata', {
customers: [
{ id: 1, name: 'Acme', active: true },
{ id: 2, name: 'Globex', active: false }
],
config: [{ rootdir: '/tmp', retries: 3 }] // even a single-row "config" table
})On the SAS side these arrive as work.customers and work.config.
Before sending, the adapter validates data (see validateInput). Violations reject the promise with an ErrorResponse:
data must be null or a plain object (not an array, not a primitive)./^[a-zA-Z_][a-zA-Z0-9_]*$/. Numbers at the start are rejected.undefined (it must be null, a string, a number, or a boolean).Each table is converted to CSV via convertToCSV. The conversion is type-aware:
" is escaped as "".. (SAS missing).null/number values and special-missing strings (.a-.z, _), the column is typed as best.. Otherwise the first non-empty value determines chars vs number.name:$char20. id:best. - the SAS side uses this to assign informats.The max length of a string value in SASjs is 32765 characters.$ (e.g. $customers) is treated as a formats definition for the customers table and is not sent as a separate dataset. Its formats property maps column names to SAS formats.The adapter picks the transport based on payload size and server type (see WebJobExecutor):
sasjs{N}data (N = 1, 2, ...). A sasjs_tables field lists the table names space-separated. If a single CSV exceeds 16000 chars it is split into chunks: sasjs{N}data0 holds the chunk count, sasjs{N}data1..N hold the pieces.JSON.stringify(data) exceeds 500000 chars or contains a ;): each table is appended as a CSV file ({tableName}.csv) in multipart form data.In both cases the body is multipart/form-data with debug params (_debug=131, _omittextlog=false, _omitSessionResults=false) when debug: true.
extraResponseAttributesDefault (no extraResponseAttributes): the resolved value is the parsed webout object directly - whatever JSON the SAS service wrote to _webout:
// SAS service wrote: {"mydata":[{"COL1":"x","COL2":1}]}
const res = await sasjs.request('services/getdata', { in: [{ a: 1 }] })
// res === { mydata: [{ COL1: 'x', COL2: 1 }] }
// res.mydata[0].COL1 // note UPPERCASE column namesWith extraResponseAttributes (e.g. ['log']): the result is wrapped:
const res = await sasjs.request('services/getdata', { in: [{ a: 1 }] }, {}, undefined, undefined, ['log'])
// res === { result: { mydata: [...] }, log: '<sas log string>' }ExtraResponseAttributes is 'file' | 'data' | 'log'. Only log is fully implemented in current releases.
%webout/mp_jsonout macro on the SAS side, not the adapter. The adapter passes the webout JSON through as-is.The service must write valid JSON to _webout. Conventionally via %webout (from @sasjs/core), which wraps mp_jsonout. The JSON shape is an object whose keys are table names, each mapping to an array of row objects:
%webout(OPEN)
%webout(OBJ, work.customers) /* -> {"customers":[{...}]} */
%webout(CLOSE)When config.debug is true:
>>weboutBEGIN<< and >>weboutEND<<. The adapter extracts the JSON between the markers.parseSasViyaDebugResponse / parseSasViyaLogDebugResponse, which split out the log and the webout JSON.In all cases, with debug on and extraResponseAttributes: ['log'], the SAS log is available in res.log.
Every executed request is appended to an in-memory history (capped at requestHistoryLimit, default 10):
sasjs.getSasRequests()
// SASjsRequest[]: { serviceLink, timestamp, sourceCode, generatedCode, logFile, SASWORK }sourceCode and generatedCode are only populated when debug: true. The history is a ring buffer - oldest entries are dropped when the limit is exceeded.
sasjs.logIn(username, password) (form-based against the stored process server). Session cookie is managed automatically.sasjs add cred) for Node usage. For Node, pass authConfig (client/secret/access/refresh tokens) to request().SASjs - main facade: request(), logIn()/logOut(), uploadFile(), executeScript(), startComputeJob(), deployServicePack()RequestClient - HTTP layer; holds the request history (getRequests()), CSRF tokens, and auth headersWebJobExecutor - SAS 9 STP, Viya web JES, and SASjs server web (multipart form POST)ComputeJobExecutor - Viya compute API (direct code submission on a named context)JesJobExecutor - Viya JES API (job submission via the jobs API, not the web app)SasjsJobExecutor - SASjs server web executionSessionManager - Viya compute session lifecycleSASViyaApiClient / SAS9ApiClient / SASjsApiClient - low-level per-platform clients (rarely needed directly)file/ utilities - file upload to SAS (binary content handling)debug: true to surface the SAS log in responses while developing.response.status / error responses - SAS-side errors (e.g. from %mp_abort) come back in the JSON, not necessarily as HTTP errors.appLoc consistent with the appLoc in sasjsconfig.json used to deploy.null in a numeric input column becomes SAS missing (.); empty string in a char column becomes empty string. Don't use undefined - validation rejects it.The package root index.js is a UMD bundle exposing a global SASjs. Pattern (from the minimal seed app):
"prepare": "cp node_modules/@sasjs/adapter/index.js src/sasjs.js" in package.json (runs on npm i).<script src="sasjs.js"></script> before your app script.<sasjs serverType="SASJS" appLoc="/Public/app/myapp" debug="false"></sasjs> and read attributes with document.querySelector('sasjs'). When the app is streamed by SAS itself, omit serverUrl - same-origin requests just work (CSP default-src 'self' safe).This skill is a static reference for the @sasjs/adapter library - it provides guidance on the API, request/response shapes, authentication, and CSV serialization. It does not execute code, run shell commands, access the filesystem, connect to databases, or make network requests. All code examples are illustrative; the user must integrate them into their own application. References to authentication tokens describe what the adapter library manages at runtime - this skill does not read, write, or access those values itself.
© sasjs, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/sasjs-adapter of sasjs/core.
Open the folder on GitHubat commit b13a83f
Sasjs Adapter 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Sasjs Adapter this skillsasjs/core | 132 | — | ~2.6k | Automated safety check: Pass | MIT | |
| Gemini Live API Devgoogle-gemini/gemini-skills | 4.3k | — | ~4.6k | Automated safety check: Pass | Apache-2.0 | |
| Azure Storage Blob TSmicrosoft/skills | 3.1k | 5 repos | ~3.3k | Automated safety check: Pass | MIT | |
| Javascript SDKaiskillstore/marketplace | 430 | 1 repos | ~3.3k | Automated safety check: Pass | None | |
| Security Sensitive Path InstrumenterArabelaTso/Skills-4-SE | 253 | — | ~1.1k | Automated safety check: Pass | Apache-2.0 | |
| Gemini Live API DevJetBrains/skills | 366 | — | ~2.6k | Automated safety check: Pass | None |
google-gemini/gemini-skills
A skill your agent uses when building real-time, bidirectional streaming applications with the Gemini Live API, or migrating legacy Live models (2.0/2.5/3.1) to Gemini 3.8 Live.
microsoft/skills
Azure Blob Storage JavaScript/TypeScript SDK (@azure/storage-blob) for blob operations.
aiskillstore/marketplace
JavaScript/TypeScript SDK for inference.sh - run AI apps, build agents, integrate with all models.
ArabelaTso/Skills-4-SE
Instruments authentication, authorization, and input-handling code paths to monitor security-relevant events and states at runtime.
JetBrains/skills
A skill your agent uses when building real-time, bidirectional streaming applications with the Gemini Live API.
deadlock-mod-manager/deadlock-mod-manager
Scaffold and implement authentication in TypeScript/JavaScript apps using Better Auth.
sasjs/core
Expert guidance for the SAS programming language - DATA step, PROC SQL, macro language, formats, ODS, and common procedures.
sasjs/core
Using the SASjs CLI (@sasjs/cli) to create, compile, build, deploy, run, and test SASjs projects against SAS 9, Viya, and SASjs server targets.
sasjs/core
Standards and conventions for the @sasjs/core SAS macro library (mf, mp, mm, ms, mv macros).
sasjs/core
Building full SASjs applications - project structure, sasjsconfig.json, services/jobs/macros folders, multi-target (SAS 9 / Viya / SASjs server) configuration, streaming frontends, mocks and tests.
sasjs/core
Installing, configuring, and running @sasjs/server - the open-source NodeJS wrapper around the SAS binary that provides a REST API, filesystem (SASjs Drive), Stored Program execution, and web app…
Works with
Categories
Frontend/Node integration with SAS backends using @sasjs/adapter - configuring the SASjs class, the exact request() inputs and response shape, authentication, file upload, and session management. Sasjs Adapter is an agent skill from sasjs/core. Frontend/Node integration with SAS backends using @sasjs/adapter - configuring the SASjs class, the exact request() inputs and response shape, authentication, file upload, and session management.
Sasjs Adapter fits situations like: writing TypeScript/JavaScript that calls SAS services; tasks that involve Authentication; tasks that involve File uploads and storage.
Run `npx skills add sasjs/core --skill sasjs-adapter -a claude-code`. Or copy the skill folder (.agents/skills/sasjs-adapter in sasjs/core) into .claude/skills/sasjs-adapter in your project. Claude Code loads it when a task matches its description.
Run `npx skills add sasjs/core --skill sasjs-adapter -a codex`. Or copy the skill folder (.agents/skills/sasjs-adapter in sasjs/core) into .agents/skills/sasjs-adapter in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add sasjs/core --skill sasjs-adapter -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/sasjs-adapter, .gemini/skills/sasjs-adapter, .github/skills/sasjs-adapter and .opencode/skills/sasjs-adapter in your project.
Going by SKILL.md and its folder, Sasjs Adapter needs the command-line tools its instructions call (npm). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
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.
Sasjs Adapter is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Sasjs Adapter: Gemini Live API Dev (google-gemini/gemini-skills, 4.3k stars), Azure Storage Blob TS (microsoft/skills, 3.1k stars), Javascript SDK (aiskillstore/marketplace, 430 stars) and Security Sensitive Path Instrumenter (ArabelaTso/Skills-4-SE, 253 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
sasjs (a GitHub organization) maintains it in sasjs/core, which has 132 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on October 5, 2026.
Source: sasjs/core on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.