AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Elysia Service

skill-anbturki-claude-toolkit-elysia-service · by anbturki

Scaffold a service module with CRUD operations for an Elysia/Bun backend. Follows singleton object pattern with repository access and custom errors.

No reviews yet
0 installs
39 views
0.0% view→install

Install

$ agentstack add skill-anbturki-claude-toolkit-elysia-service

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No 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.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-anbturki-claude-toolkit-elysia-service)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
5mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

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 →
Are you the author of Elysia Service? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Create Service (Elysia/Bun)

Scaffold a new service module for $ARGUMENTS.

Step 1: Learn Project Patterns

  1. Read CLAUDE.md for service conventions
  2. Find existing services:

`` Glob("**/services/**/*.ts") Glob("**/*.service.ts") Glob("**/modules/**/services/**") ``

  1. 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

  1. Export from the module index
  2. Add package export path (monorepo): "./${entity}": "./src/${entity}/index.ts"
  3. Create error classes if they don't exist
  4. Create repository if it doesn't exist

Rules

  1. Services = pure business logic — no HTTP concepts (no request, response, status codes)
  2. Throw errors, don't return them — use custom error classes
  3. Use repositories — never access DB directly in services
  4. Singleton object exportexport const Service = { ... }, not classes (unless project uses classes)
  5. Tenant isolation — if multi-tenant, always filter by orgId/tenantId
  6. 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.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.