Install
$ agentstack add skill-anbturki-claude-toolkit-elysia-service ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Create Service (Elysia/Bun)
Scaffold a new service module for $ARGUMENTS.
Step 1: Learn Project Patterns
- Read CLAUDE.md for service conventions
- Find existing services:
`` Glob("**/services/**/*.ts") Glob("**/*.service.ts") Glob("**/modules/**/services/**") ``
- Read 2-3 existing services — learn:
- How they import repositories
- Error handling pattern (custom error classes)
- Tenant/org isolation (if multi-tenant)
- Export style (singleton object, class, etc.)
Step 2: Scaffold Service
Match the project's directory structure for the service file.
import { ${Entity}Repository, type ${Entity} } from "";
import { ${Entity}NotFoundError } from "";
import type {
Create${Entity}Input,
Update${Entity}Input,
} from "";
async function list(/* match existing params like orgId */): Promise {
return ${Entity}Repository.findAll(/* params */);
}
async function getById(id: string): Promise {
const entity = await ${Entity}Repository.findById(id);
if (!entity) {
throw new ${Entity}NotFoundError();
}
return entity;
}
async function create(
input: Create${Entity}Input,
/* match existing params like userId */
): Promise {
return ${Entity}Repository.create({
...input,
// createdBy: userId, if applicable
});
}
async function update(
id: string,
input: Update${Entity}Input,
): Promise {
const existing = await ${Entity}Repository.findById(id);
if (!existing) {
throw new ${Entity}NotFoundError();
}
const updated = await ${Entity}Repository.update(id, input);
if (!updated) {
throw new ${Entity}NotFoundError();
}
return updated;
}
async function remove(id: string): Promise {
const existing = await ${Entity}Repository.findById(id);
if (!existing) {
throw new ${Entity}NotFoundError();
}
await ${Entity}Repository.remove(id);
return { id };
}
export const ${Entity}Service = {
list,
getById,
create,
update,
remove,
};
Step 3: Create Supporting Files
Barrel Exports
// services/index.ts
export { ${Entity}Service } from "./${entity}.service";
// module/index.ts
export { ${Entity}Service } from "./services";
Error Classes (if not using create-error skill)
export class ${Entity}NotFoundError extends NotFoundError {
constructor() {
super("${entity}NotFound");
}
}
Step 4: After Creation
- Export from the module index
- Add package export path (monorepo):
"./${entity}": "./src/${entity}/index.ts" - Create error classes if they don't exist
- Create repository if it doesn't exist
Rules
- Services = pure business logic — no HTTP concepts (no request, response, status codes)
- Throw errors, don't return them — use custom error classes
- Use repositories — never access DB directly in services
- Singleton object export —
export const Service = { ... }, not classes (unless project uses classes) - Tenant isolation — if multi-tenant, always filter by orgId/tenantId
- Single responsibility — one method per operation
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: anbturki
- Source: anbturki/claude-toolkit
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.