Atlas / Skills / narcooo / Inkos

InkosBLOCK

skills/narcooo/inkos

Story Creation AI Agent for novel, scripts, translation, interactive games, and IP content

Verdict
BLOCK
Grade
D
Trust score
66 /100
Version
—
Hosts
2 documented
License
AGPL-3.0
Stars
10,400
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Story Creation AI Agent面向长短篇小说、剧本剧作、互动影游、IP 内容与多语言翻译的创作智能体系统

English | 中文 | 日本語

InkOS 网页版上线! 立刻体验

InkOS 是一个面向故事创作与多语言翻译的 AI Agent 系统:长篇连载、独立短篇、剧本剧作、同人番外、仿写续写、互动影游、开放世界和长文翻译,都可以从同一个工作台开始。支持 Studio、TUI、CLI 交互形式,把创意、设定、角色、记忆、审稿、修订、封面、互动状态和跨语言交付交给智能体统一管理。

🎉🎉 InkOS 入选首批 KIMI 开源合作伙伴 🎉🎉

感谢 [Kim

Read from source at commit a71b880c8dc6OBSERVED · 2026-10-20
Advertisement
02

Install

Commands as the repository documents them. They are shown, not run.

git clone https://github.com/Narcooo/inkos.git
npm i -g @actalk/inkos
npm i -g @actalk/inkos
npm i -g @actalk/inkos
03

Host compatibility

What the documentation claims. We have not run a compatibility test.

HostStatusNotes
claude-codementioned
openclawmentioned
04

What it tells the agent

The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.

---
name: inkos
description: Use InkOS as a Pi-agent creative harness for novels, short fiction, scripts, storyboards, interactive films, open worlds, derivative works, and long-document translation.
---

# InkOS Creative Harness

InkOS is a text-creation harness. The main Pi agent understands the request, activates professional Skills, invokes typed capability actions, and reports only persisted results.

## Core contract

- Discussion stays discussion. Creation and mutation happen only through capability actions.
- A successful action is proven by its `ActionResult` and artifact revision, never by assistant prose.
- User intent, current Work constraints, established facts, and explicit prohibitions outrank model defaults.
- Skills provide professional methods but never grant write permission.
- Review returns evidence-backed observations. It does not score prose, reject a chapter, or authorize an automatic rewrite.
- Revision is an explicit action. Preserve source revisions and report the new artifact revision.
- Context is assembled per task: LLM semantic selection chooses relevant source sections after deterministic candidate discovery. Protected intent and selected current facts are never compressed; lower-priority context is semantically compiled only on budget overflow.

## Creation profiles

- `longform-novel`: foundation, chapter planning, writing, review, revision, state projection, forecast, cover.
- `short-fiction`: complete short story, plan, review notes, sales package, cover.
- `script`: screenplay, vertical short drama, audio drama, interactive script.
- `storyboard`: editable storyboard, typed image-prompt assets, image generation.
- `interactive-film`: story tree, flags, script, storyboard, image assets, playable graph, export.
- `play-world`: open-world or guided interaction with persistent entities, relationships, time, evidence, inventory, scenes, and images.
- `fanfic`, `spinoff`, `imitation`, `continuation`: derivative creation with explicit lineage and source canon.
- `translation`: multilingual long-document translation with terminology and resumable artifacts.

## Natural-language use

Use normal conversation to discuss or request work. The agent chooses the relevant profile and Skill. A creation proposal may require confirmation; recoverable edits inside the current Work can run directly.

Force a Skill when needed:

```text
@inkos-story-review review chapter 8 against the current reader promise
@inkos-imitation-writing keep the reference cadence but create a new story
```

Inspect available Skills and Works through the agent tools rather than guessing storage paths.

## Explicit CLI actions

```bash
inkos studio
inkos tui
inkos book create --title "My Story" --genre other --lang en
inkos write next <book-id> --count 3
inkos revise <book-id> <chapter> --mode rewrite
inkos review <book-id>
inkos short run --title "A Short Story"
inkos fanfic init --title "Derived Story" --from source.txt --mode canon
inkos export <book-id> --format epub
```

Internal planning, semantic context selection, writing, state projection, and review are one Harness trajectory. `review` displays persisted qualitative observations.

## Revision modes

- `spot-fix`: exact local text patches applied by the host.
- `polish`: prose-surface changes only.
- `rewrite`: rewrite the affected passage or chapter while preserving authority.
- `rework`: restructure scenes when the user explicitly requests structural change.
- `anti-detect`: explicit prose cleanup using the activated de-slop Skill.

## Context and persistence

- Human-readable story assets remain Markdown.
- Host-consumed state and action results use typed JSON/tool schemas.
- Planner, writer, reviewer, reviser, settler, Play, translation, and production-document compilers submit typed results through Pi tools.
- Conversation compaction and story-context compaction are separate. Both preserve protected current intent and use semantic compilation only after budget overflow.
- Work manifests, artifact revisions, episode events, and model-call traces provide observable lineage.

## Failure handling

- Model/provider failures remain operational errors; they are never converted into fictional world outcomes or content verdicts.
- A failed optional asset is reported as an observation without invalidating a successfully persisted manuscript.
- Interrupted actions preserve the last committed artifact and can be retried from persisted state.
- Never claim a file was created or changed without an artifact reference from the action result.
05

Trust audit

BLOCKgrade D · trust 66/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (1 observation(s))
Network
declared (5 observation(s))
Shell
declared (5 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (25)

HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
packages/core/src/harness/legacy-book-migration.ts:51
return match?{raw:match[1]!,data:yaml.load(match[1]!) as Record<string,unknown>}:undefined;
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
packages/core/src/skills/external-loader.ts:214
data: yaml.load(frontmatter),
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
packages/cli/src/tui/setup.ts:207
console.log(`  ${c("3", cyan)}  ${c(copy.steps.apiKey, gray)}`);
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
packages/cli/src/tui/setup.ts:208
console.log(c(`     ${copy.hints.apiKey}`, dim));
LOWInventory / provenance · inv.hidden_file · CWE-1104
.node-version
.node-version
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/studio/src/components/chat/__tests__/NarrativeForecastPreview.test.ts:72
expect(getNarrativeForecastPreviewDetails(exec({
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/studio/src/components/chat/__tests__/NarrativeForecastPreview.test.ts:78
expect(getNarrativeForecastPreviewDetails(exec({
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/studio/src/components/chat/__tests__/NarrativeForecastPreview.test.ts:84
expect(getNarrativeForecastPreviewDetails(exec({ kind: "narrative_forecast_created" }))).toBeNull();
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/studio/src/components/chat/__tests__/NarrativeForecastPreview.test.ts:88
expect(getNarrativeForecastPreviewDetails(exec({
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/studio/src/components/chat/__tests__/NarrativeForecastPreview.test.ts:103
exec: exec({ kind: "narrative_forecast_created", forecastId: forecast.forecastId, forecast }),
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/cli/src/__tests__/book-backup.test.ts:122
await expect(restoreBookBackup(projectRoot, "evilbook", "../../books/evilbook"))
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/cli/src/commands/update.ts:11
const { version: currentVersion } = require("../../package.json") as { version: string };
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/core/src/__tests__/helpers/forecast-fixture.ts:3
import type { ForecastBranch, ForecastModelBranch, NarrativeForecast } from "../../forecast/schema.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/core/src/__tests__/helpers/forecast-fixture.ts:4
import { buildRuntimeStateArtifacts, createInitialRuntimeState, saveRuntimeStateSnapshot } from "../../state/runtime-state-store.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/core/src/__tests__/if-node-image.test.ts:40
const maliciousId = "../../../../../escape";
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/core/src/__tests__/artifact-methods.flow.test.ts:42
const client=createLLMClient({service:'custom',provider:'openai',configSource:'studio',model:'fixture',apiKey:'fixture',baseUrl:`http://127.0.0.1:${(server.address() as {port:number}).port}/v1`,apiFor
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/core/src/__tests__/artifact-methods.flow.test.ts:72
const client=createLLMClient({service:'custom',provider:'openai',configSource:'studio',model:'fixture',apiKey:'fixture',baseUrl:`http://127.0.0.1:${(server.address() as {port:number}).port}/v1`,apiFor
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/core/src/__tests__/artifact-methods.flow.test.ts:129
const client=createLLMClient({service:'custom',provider:'openai',configSource:'studio',model:'fixture',apiKey:'fixture',baseUrl:`http://127.0.0.1:${(server.address() as {port:number}).port}/v1`,apiFor
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/core/src/__tests__/artifact-methods.flow.test.ts:151
vi.stubEnv('INKOS_COVER_ENDPOINT',`http://127.0.0.1:${(server.address() as {port:number}).port}/v1/images/generations`);
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/core/src/__tests__/artifact-methods.flow.test.ts:217
const client=createLLMClient({service:'custom',provider:'openai',configSource:'studio',model:'fixture',apiKey:'fixture',baseUrl:`http://127.0.0.1:${(server.address() as {port:number}).port}/v1`,apiFor
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/cli/package.json
commander, dotenv, epub-gen-memory, ink-text-input, marked, marked-terminal, react, @types/marked-terminal
Why it matters. 13 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/core/package.json
@sinclair/typebox, dotenv, epub-gen-memory, js-yaml, unpdf, zod, @types/js-yaml, typescript
Why it matters. 9 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/studio/package.json
@hono/node-server, hono, @base-ui/react, @fontsource-variable/geist, @playwright/test, @radix-ui/react-use-controllable-state, @streamdown/cjk, @streamdown/code
Why it matters. 37 dependency range(s) float
Fix. pin exact versions or ship a lockfile
INFOInventory / provenance · inv.oversize · CWE-1104
assets/inkos-short-demo-cover.png
assets/inkos-short-demo-cover.png
Why it matters. 1919990 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
assets/play-item-warcraft.png
assets/play-item-warcraft.png
Why it matters. 1278051 bytes not read

Gates applied: no_behavioural_pass.

Audited 2026-10-20 · audit v0.4.1 · source sha a71b880c8dc6full audit observations/trust-audit/skill/narcooo__inkos.json · Report an issue / request a re-scan
06

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-10-20a71b880c8dc6BLOCKD66first audit
07

Questions

What does the inkos — narcooo/inkos skill do?

Story Creation AI Agent for novel, scripts, translation, interactive games, and IP content

Is inkos — narcooo/inkos safe to install?

No — not without reading the findings first. The audit graded it D (66/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What can inkos — narcooo/inkos access on my machine?

The audit observed that it reaches the network, runs shell commands and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: none found.

Which assistants does inkos — narcooo/inkos work with?

Its documentation mentions claude-code and openclaw. That is what the text claims, not a compatibility test we ran.

How current is this page?

The grade is for one exact copy of the source (a71b880c8dc6), read on 2026-10-20. The repository is watched, and a new audit runs when it changes — this is the first audit.

Add this badge to your README

Shows this page's audit result and links back to it. It updates when the audit does.

ModelsAtlas audit badge

Markdown
[![ModelsAtlas audit: Inkos](https://modelsatlas.com/skills/narcooo/inkos/badge.svg)](https://modelsatlas.com/skills/narcooo/inkos/)

Not your listing, or something out of date? Claim or update your listing.

Advertisement