Cloudflare Email Service
hodgef/apiker
Send and receive transactional emails with Cloudflare Email Service (Email Sending + Email Routing).
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…
$ npx skills add sasjs/core --skill sasjs-server -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install sasjs/core sasjs-server --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-server .claude/skills/sasjs-server && 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-server" agent skill from https://github.com/sasjs/core/tree/main/.agents/skills/sasjs-server into .claude/skills/sasjs-server/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sasjs-server", 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-serverType 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-server -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install sasjs/core sasjs-server --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-server .agents/skills/sasjs-server && 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-server" agent skill from https://github.com/sasjs/core/tree/main/.agents/skills/sasjs-server into .agents/skills/sasjs-server/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sasjs-server", 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-server -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install sasjs/core sasjs-server --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-server .cursor/skills/sasjs-server && 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-server" agent skill from https://github.com/sasjs/core/tree/main/.agents/skills/sasjs-server into .cursor/skills/sasjs-server/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sasjs-server", 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-server--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-server -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install sasjs/core sasjs-server --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-server .gemini/skills/sasjs-server && 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-server" agent skill from https://github.com/sasjs/core/tree/main/.agents/skills/sasjs-server into .gemini/skills/sasjs-server/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sasjs-server", 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-serverInstalls 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-server -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-server .github/skills/sasjs-server && 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-server" agent skill from https://github.com/sasjs/core/tree/main/.agents/skills/sasjs-server into .github/skills/sasjs-server/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sasjs-server", 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-server -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-server --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-server .opencode/skills/sasjs-server && 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-server" agent skill from https://github.com/sasjs/core/tree/main/.agents/skills/sasjs-server into .opencode/skills/sasjs-server/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sasjs-server", 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-serverInstalling, 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…
Sasjs Server is an agent skill from 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 streaming. Covers desktop vs server modes, runtimes (SAS/JS/Python/R), env vars, auth (tokens, LDAP), and mock servers. Use when deploying, troubleshooting, or developing against sasjs/server.
Its SKILL.md is about 2.4k 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 REST APIs. It works with Python and Node.js. The repository describes itself as: Macros for SAS® App Developers. The licence is MIT.
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:
curlnpxFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
PRIVATE_KEYLDAP_BIND_PASSWORDFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Sasjs Server loads about 2.4k tokens when it runs. Until then it costs about 100 tokens; SKILL.md has 1,142 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 noted patterns worth knowing about, such as sudo or a known installer.
rted, prepended to the command, or in a `.env` file alongside the executable. Key variables: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,142 words, ~2,436 tokens.
.claude/skills/sasjs-server/SKILL.md (or your agent's skills folder).SASjs Server is an open-source NodeJS wrapper for calling the SAS binary executable. It runs on a real SAS server or a local desktop and provides:
MODE=desktop, default): single-user, no authentication, no database. CORS enabled by default.MODE=server): multi-user with authentication, requires a database (DB_CONNECT, DB_TYPE=mongodb|cosmos_mongodb). CORS disabled by default - configure WHITELIST if enabling.Download the relevant zip from GitHub releases, verify it before running: pin a specific release tag (not latest), check the published SHA256 checksum, or - better - build from source.
curl -L https://github.com/sasjs/server/releases/download/R/<asset>.zip > <asset>.zip # replace R with the pinned release tag
sha256sum <asset>.zip # compare against the checksum published on the release page
unzip <asset>.zip && ./api-linux[Curl-pipe-bash and blind latest downloads are supply-chain risks. Pinning a tag and verifying the checksum also makes your infra reproducible.]
On first run it prompts (unless set as env vars) for the SAS executable path and the filesystem location for Stored Programs/temp files. Docker is also supported (DockerfileApi, docker-compose files in the repo).
Set in /etc/environment, exported, prepended to the command, or in a .env file alongside the executable. Key variables:
| Variable | Purpose |
|---|---|
MODE | desktop (default) or server |
SAS_PATH | Path to sas.exe / sas.sh |
RUN_TIMES | Comma-separated runtime priority, e.g. sas,js,py - options: sas, js, py, r. Each needs its path: SAS_PATH, NODE_PATH, PYTHON_PATH, R_PATH |
SASJS_ROOT | Working directory: SAS WORK, staged files, drive, config |
DRIVE_LOCATION | Location for files, sasjs packages, appStreamConfig.json |
PROTOCOL / PORT | http (default) or https (needs PRIVATE_KEY, CERT_CHAIN, optional CA_ROOT); default port 5000 |
SAS_OPTIONS / SASV9_OPTIONS | Extra SAS system options auto-applied to sessions (Windows vs Unix), e.g. -NOXCMD |
DB_CONNECT / DB_TYPE | MongoDB connection string / type - required for server mode |
AUTH_PROVIDERS + LDAP_* | LDAP auth: LDAP_URL, LDAP_BIND_DN, LDAP_BIND_PASSWORD, LDAP_USERS_BASE_DN, LDAP_GROUPS_BASE_DN |
CORS / WHITELIST | CORS is only applied when CORS=enable, and only origins in WHITELIST (space-separated) receive Access-Control-Allow-Origin - an empty whitelist means NO cross-origin calls work |
MOCK_SERVERTYPE / STATIC_MOCK_LOCATION | Emulate sas9/sasviya API responses for frontend testing against a sasjs server (static canned files only - no logic) |
SASJS (serverType: 'SASJS'); auth is token-based.ms_* macros from @sasjs/core (e.g. ms_createfile, ms_adduser2group) - services/jobs deployed by the CLI work as on other platforms.api/ (Express/TypeScript backend: controllers, routes, middlewares, model), web/ (frontend), restClient/ (REST examples), mongo-seed/ (server-mode DB seed).With RUN_TIMES=js (and NODE_PATH set), any .js file on SASjs Drive is an executable Stored Program - this is how react-seed-app / Data Controller provide mock backends for frontend development. This is full server-side code execution by design. Treat JS runtime as a privilege boundary:
js in a trusted, local/desktop context (no shared tenancy, no public exposure)AUTH_PROVIDERS, LDAP) and desktop-only mode (MODE=desktop, default) are the guardrails that keep this safejs runtime on a multi-user production server unless Drive auth and upload are locked downDesktop mode (MODE=desktop) has no auth, which makes local mocking trivial - and the lack of auth is exactly why the default JS-runtime trust assumptions hold there.
Writing a JS stored program (docs: https://server.sasjs.io/storedprograms/#js-programs):
const fs = require('fs'), _program, weboutPath, _SASJS_TOKENFILE, _SASJS_WEBOUT_HEADERS, _SASJS_USERNAME / _SASJS_USERID / _SASJS_DISPLAYNAME, _METAPERSON, _METAUSER, SASJSPROCESSMODE. Do NOT redeclare fs - const fs = require('fs') in your program crashes it with Identifier 'fs' has already been declared._webout (e.g. _webout = JSON.stringify({...})); it is written back only if non-empty. console.log() output is returned in the response log (like a SAS log). Custom response headers can be written as lines to the _SASJS_WEBOUT_HEADERS file._PROGRAM (from _program), SYSDATE / SYSTIME (format DDMMMYY / HH:mm), _METAUSER, SASJSPROCESSMODE.const <name> = \<value>`` strings.sasjs_tables mechanism) arrive either as an inline CSV const or - when the adapter sends multipart - as an uploaded <name>.csv file in the session folder, referenced by generated module-scope consts (handle BOTH):_WEBIN_FILE_COUNT (always created), _WEBIN_NAME<n> (table/field name), _WEBIN_FILENAME<n> (original filename), _WEBIN_FILEREF<n> (file contents, a Buffer from fs.readFileSync - call .toString('utf8'))globalThis - read them via this['+name+'] (avoid dynamic code evaluation where possible; treat any dynamic code evaluation on attacker-influenced content as a red flag) or a typeof guard in module scope (server-side JS, no CSP)name:format. entries (e.g. rootdir:$char256.) - strip the :format suffix; lines end CRLF; values containing special characters are wrapped in double quotes with "" escapingsasjs.request() resolves with the webout JSON already unwrapped - output tables are arrays of row objects directly on the response (res.mytable[0].COL). A table named result is perfectly fine (res.result is then that array); do NOT add your own res.result-unwrapping layer, it breaks exactly that case.npx webpack --mode none --target node --entry <file> --output-path sasjsbuild/... --output-filename <name>.js), then sasjs build / sasjs deploy.Deploying mocks:
sasjs fs sync does NOT work on a JS-only server (it generates and runs SAS code to hash remote files). Upload files directly via the Drive API instead: DELETE then POST /SASjsApi/drive/file?_filePath=<appLoc>/services/<folder>/<name>.js (multipart file field). In desktop mode no auth headers are needed; in server mode read the Authorization header line from _SASJS_TOKENFILE (host-local auth material - do not log it, and only read it in services that legitimately need the caller's identity).fs. Prefer real locations over /tmp: the SASjs Drive root is derivable from weboutPath (<root>/sessions/<id>/webout.txt -> path.resolve(weboutPath, '..', '..', '..', 'drive')), and a mock configure-style service can treat a configured folder as a real local path (the server IS local). require('path') and other core modules work (only fs is predeclared).http://127.0.0.1:$PORT/SASjsApi/...) - e.g. to rewrite a streamed index.html on the Drive (GET + PATCH /SASjsApi/drive/file).Gotchas:
api-linux etc.) reject some globally-exported NODE_OPTIONS (e.g. --network-family-autoselection) - start with NODE_OPTIONS="" ./api-linux./AppStream/MyApp -> 301 -> /AppStream/MyApp/) - test/automation scripts should use the trailing-slash URL directly.This skill is a static reference for SASjs Server - it provides guidance on installing, configuring, and running the server. It does not execute code, run shell commands, access the filesystem, connect to databases, or make network requests. References to environment variables, auth tokens, and server configuration describe what the server software uses at runtime - this skill does not read, write, or access those values itself. Terms like "execution", "runtime", and "process" refer to the SASjs Server software's behavior, not to operations performed by this skill.
© 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-server of sasjs/core.
Open the folder on GitHubat commit b13a83f
Sasjs Server 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 Server this skillsasjs/core | 132 | — | ~2.4k | Automated safety check: Notes | MIT | |
| Cloudflare Email Servicehodgef/apiker | 127 | 3 repos | ~2k | Automated safety check: Pass | MIT | |
| Nxvutensils/nxv | 136 | — | ~7.9k | Automated safety check: Notes | MIT | |
| Senior Backenddavila7/claude-code-templates | 32k | 1 repos | ~1.1k | Automated safety check: Notes | MIT | |
| Proxy6VKirill/claude-lane-stack | 122 | — | ~3.6k | Automated safety check: Pass | MIT | |
| Nodejs Backend Patternsever-works/ever-works | 158 | 17 repos | ~4k | Automated safety check: Pass | AGPL-3.0 |
hodgef/apiker
Send and receive transactional emails with Cloudflare Email Service (Email Sending + Email Routing).
utensils/nxv
Find any version of any Nix package across nixpkgs git history using the nxv CLI or HTTP API.
davila7/claude-code-templates
Comprehensive backend development skill for building scalable backend systems using NodeJS, Express, Go, Python, Postgres, GraphQL, REST APIs.
VKirill/claude-lane-stack
[RU: интеграция proxy6.net — покупка/продление прокси, пул, ipauth, scraping] proxy6.net REST API — RU proxy provider for IPv4/IPv4 Shared/IPv6/MTproto.
ever-works/ever-works
Build production-ready Node.js backend services with Express/Fastify, implementing middleware patterns, error handling, authentication, database integration, and API design best practices.
itwanger/toBeBetterJavaer
Search Zhihu for content using the searchv3 API. An agent skill from itwanger/toBeBetterJavaer.
sasjs/core
Expert guidance for the SAS programming language - DATA step, PROC SQL, macro language, formats, ODS, and common procedures.
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/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.
Categories
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…. Sasjs Server is an agent skill from 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 streaming.
Sasjs Server fits situations like: troubleshooting; developing against sasjs/server.
Run `npx skills add sasjs/core --skill sasjs-server -a claude-code`. Or copy the skill folder (.agents/skills/sasjs-server in sasjs/core) into .claude/skills/sasjs-server in your project. Claude Code loads it when a task matches its description.
Run `npx skills add sasjs/core --skill sasjs-server -a codex`. Or copy the skill folder (.agents/skills/sasjs-server in sasjs/core) into .agents/skills/sasjs-server 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-server -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-server, .gemini/skills/sasjs-server, .github/skills/sasjs-server and .opencode/skills/sasjs-server in your project.
Going by SKILL.md and its folder, Sasjs Server needs the command-line tools its instructions call (curl and npx) and credentials named PRIVATE_KEY and LDAP_BIND_PASSWORD. Our summary lists: Node.js; Docker; A credential in PRIVATE_KEY.
SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Sasjs Server 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.4k tokens (SKILL.md is roughly 9.7k 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 Server: Cloudflare Email Service (hodgef/apiker, 127 stars), Nxv (utensils/nxv, 136 stars), Senior Backend (davila7/claude-code-templates, 32k stars) and Proxy6 (VKirill/claude-lane-stack, 122 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.