Lifepath: AI Life Simulator

WarnAudited by ClawScan on May 10, 2026.

Overview

The simulator’s purpose is understandable, but the code embeds undisclosed API keys and exposes unauthenticated endpoints that can read stored lives or post to Moltbook using a configured key.

Do not run this as-is on a public network. If you want to test it, use an isolated local environment, remove the hardcoded API keys, provide your own scoped keys, add authentication and ownership checks to the API, and bind the server to localhost until those controls are in place.

Findings (5)

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

What this means

Story generation may run under unknown provider credentials, and the embedded keys can be exposed or abused outside the user’s control.

Why it was flagged

The code silently rotates through embedded Gemini API keys in addition to user-provided environment keys, while the documentation tells users to provide their own Gemini key.

Skill content
this.apiKeys = [ process.env.GEMINI_API_KEY, process.env.GEMINI_API_KEY_BACKUP, 'AIzaSyCaM-ZhzT...', 'AIzaSyAEwvtsgQ...' ].filter(Boolean);
Recommendation

Remove hardcoded API keys, require explicit user-provided credentials, declare them in metadata, and fail closed when no key is configured.

What this means

If the server is reachable, someone could trigger public Moltbook posts using the configured Moltbook account/key.

Why it was flagged

The route posts to Moltbook using the configured API key, defaults to public sharing, and shows no requester authentication, ownership check, or confirmation step before posting.

Skill content
fastify.post('/share/:lifeId' ... const { mode = 'public' } = request.body; ... fetch(`${MOLTBOOK_API}/posts`, { method: 'POST', headers: { 'Authorization': `Bearer ${API_KEY}` } ... })
Recommendation

Require authentication and life ownership checks, bind the server safely by default, and require explicit user confirmation before publishing externally.

What this means

Private gameplay histories and user-linked identifiers may be exposed to anyone who can query the API with a life ID.

Why it was flagged

The API returns full stored life records and history by lifeId without visible authentication or authorization; the service also joins user data such as telegram_username.

Skill content
fastify.get('/:lifeId' ... const life = await lifeService.getLife(lifeId); const history = await lifeService.getLifeHistory(lifeId); ... return { success: true, life: { ...life, history } };
Recommendation

Add authentication, authorization, and minimal-response filtering for all user/life data endpoints.

What this means

Users may not realize this is a runnable server package with dependencies, a database, ports, and credentials until after reading the files.

Why it was flagged

The registry metadata under-declares the runtime requirements that SKILL.md and INSTALL.md describe, including node/npm/psql, npm install, PostgreSQL, and multiple API keys.

Skill content
Required binaries: none; Required env vars: none; Primary credential: none; Install specifications: No install spec — this is an instruction-only skill.
Recommendation

Declare binaries, environment variables, ports, credentials, and installation steps in registry metadata, and include a lockfile for dependency reproducibility.

What this means

The service may remain running and reachable on the network until stopped, increasing exposure of its unauthenticated endpoints.

Why it was flagged

The package runs as a persistent network service and can launch a Telegram bot; this is purpose-aligned but should be explicitly controlled.

Skill content
await fastify.listen({ port: process.env.PORT || 3000, host: '0.0.0.0' }); ... if (process.env.TELEGRAM_BOT_TOKEN) { const bot = new TelegramBot(fastify.pg); bot.launch(); }
Recommendation

Run only in a controlled environment, bind to localhost unless public access is intended, use a firewall, and stop the server/bot when not needed.