A Korean character-driven X agent that "eats" onchain signals, digests them into narrative memory, and posts as a growing creature rather than a market-summary bot.
Pixymon is not meant to become a generic crypto posting bot.
The product goal is:
- Pixymon becomes memorable enough to earn attention on its own
- The operator behind Pixymon becomes known because the account itself becomes a recognizable IP
That means Pixymon has to combine three things at once:
AIXBT-like: dense market and onchain interpretationLobster-like: human, characterful, worth followingPixymon-like: an onchain creature that feeds, digests, evolves, acts, and reflects
The current product north star is documented in concept.md.
The current work is Pixymon V2: evidence → question/hypothesis → editorial judgment → memory-aware writing → human approval → publication → reobservation and revised judgment.
- Initial scope: protocol originals with named, fresh, direct numeric evidence.
- Implemented: a model-authored inquiry before writing (question, evidence significance, current judgment and memory-driven check choice), relevant judgment/outcome recall, isolated shadow follow-ups, append-only review, and stage-bound approved publishing.
- Validation: offline contracts and synthetic diversity tests; these do not prove reader preference or production quality.
- Still blocked: real replay/human evaluation, elapsed R1/R2 gates, and the trusted zero-X verifier. The September 21 shadow smoke reconfirmed insufficient Anthropic credit: real sensing selected a candidate, but the first inquiry call stopped before writing. See the latest smoke checkpoint and recovery steps.
V2 exists beside the legacy path behind POST_PIPELINE_VERSION=v1|v2 (default: v1). Selecting V2 does not authorize live posting. V1 social features and fallbacks remain for compatibility, not as V2 fallbacks, until V2 has 20 live posts and 14 incident-free days.
Pixymon should move toward:
- character + interpreter, not data bot
- conversation gravity, not one-way posting
- memorable worldview, not repetitive market commentary
- recurring arc: feed, digest, evolve, fail, reflect
Pixymon should avoid:
- price-only posts
- market cap / dominance snapshot posts
- fear-greed boilerplate
- meaningless high-frequency output
- over-safe, personality-free text
Every meaningful change should answer this question:
Does this make Pixymon feel more human, more memorable, and more worth following?
If the answer is no, it is probably just automation work, not product work.
The planner chooses eligible evidence, giving a previously invalidated subject priority among equally fresh candidates. A budgeted editorial model then explains its question, why the evidence matters, and what a real prior judgment changes about the next check. It can pursue a bounded measurement test, withhold, or choose no-post. The writer renders that judgment with read-only memory; an unresolved hypothesis no longer forces a boilerplate withholding conclusion. Human approval does not bypass freshness, grounding, duplicate, budget, or rollout-stage checks. Shadow rehearsal exercises the follow-up loop without publishing or changing live character memory.
See character architecture for the contracts and V2 runbook for commands and promotion requirements.
An optional Jev advisory review checks inquiry/evidence/memory connections and sentence grounding with typed decisions. npm run editorial:jev-review -- --case memory-distortion previews a synthetic case offline; only --execute with explicitly enabled network access and a TypeSafe key calls the model. It cannot approve or publish, and Korean accuracy is not yet measured.
For pre-writing recall, TEST_MODE=false TEST_NO_EXTERNAL_CALLS=false npm run editorial:shadow -- --jev-memory lets Jev choose relevant recorded experience before inquiry/writing. It requires TypeSafe and Anthropic access, is shadow-only and operator-invoked, and shares the advisory experiment's 12-call daily allowance. No match/uncertainty omits prior memory; service failure stops the candidate. See the same-context --memory-baseline comparison in the Jev runbook.
-
Feed- Collect onchain, market, news, and social signals
- Normalize them into nutrients and trend events
-
Digest- Score freshness, trust, consistency, and signal quality
- Convert accepted nutrients into XP and memory updates
-
Evolve- Update stage, soul state, and active abilities
- Track recurring reflections and internal narrative drift
-
Plan- Select a lane (
protocol,ecosystem,regulation,macro,onchain,market-structure) - Pair one event with evidence anchors
- Reject low-quality or low-signal plans
- Select a lane (
-
Act- Post, quote, or reply
- Enforce budget guardrails and duplicate checks
-
Reflect- Record narrative outputs
- Log phrase audit hits
- Feed reflection memos back into memory
Budget- X API guard
- Anthropic guard
- total spend guard
Caching- shared run context
- prompt caching for repeated prefixes
Batch- queue / sync for non-urgent digest reflections
Audit- narrative observation log
- suspicious phrase summary
Lexicon- rewrite internal analyst jargon into natural Korean
- Node.js 20+
- TypeScript 5
twitter-api-v2@anthropic-ai/sdkdotenvtsxfor local development- Node built-in test runner for regression coverage
src/services/editorial-v2/- V2 evidence, hypotheses, writer, review, publishing, follow-ups and evaluation
src/services/engagement.ts- legacy V1 planning and action loop
src/services/engagement/event-evidence.ts- event selection, evidence pairing, structural fallback planning
src/services/llm.ts- Claude requests, routing, caching hooks
src/services/memory.ts- evolving state, soul prompt context, stored post memory
src/services/twitter.ts- posting, reply search, trend-target filtering
src/services/narrative-observer.ts- narrative event logging and audit summaries
src/services/narrative-lexicon.ts- rewrite and suspicious-pattern rules
src/services/x-api-budget.ts- X API budget tracking
src/services/anthropic-budget.ts- Anthropic budget tracking
src/services/anthropic-admin-usage.ts- optional usage sync from Anthropic admin endpoints
Use V2 observe/shadow first. Real provider reads and generation may spend the configured LLM budget; they do not post to X. For a one-shot runtime collection, explicitly select:
TEST_MODE=false
TEST_NO_EXTERNAL_CALLS=false
ACTION_MODE=observe
POST_PIPELINE_VERSION=v2
SCHEDULER_MODE=false
POST_LANGUAGE=ko
X_API_DAILY_MAX_USD=0.50
ANTHROPIC_DAILY_MAX_USD=0.50
TOTAL_DAILY_MAX_USD=1.00.env.example retains safe test defaults and the legacy V1 selector. Follow the V2 commands below instead of assuming a production rollout is ready.
- Posts are Korean-first
- Replies follow the incoming language when needed
- Narrative lexicon and surface finalization are tuned primarily for Korean cadence
Important files:
data/memory.jsondata/operational-state.jsondata/metrics-events.ndjsondata/narrative-observation.ndjsondata/narrative-phrase-audit.json
Narrative audit report:
npm run audit:narrativeRun the complete local contract gate:
npm run verifyThe command enables external-call guards in tests. The GitHub verify workflow additionally runs it inside an OS network namespace with outbound access removed; see the runbook for the distinction and evidence checks.
Collect and review a real V2 candidate without X writes:
ACTION_MODE=observe TEST_MODE=false TEST_NO_EXTERNAL_CALLS=false npm run editorial:collect
ACTION_MODE=observe TEST_MODE=false TEST_NO_EXTERNAL_CALLS=false npm run editorial:followups
npm run editorial:review -- --id <draftId>Only after earning R3 authorization can editorial:publish -- --id <draftId> --authorization <authorization.json> run in live mode. It is capped to one original per day and refuses stale evidence, missing approval, duplicate text, test mode, missing X credentials, and concurrent publishing. Full operating and rollback instructions are in the V2 runbook.
The current milestone is protocol-only. npm run editorial:shadow collects into a separate, permanently non-publishable ledger; EDITORIAL_TRACKING_MODE=shadow ACTION_MODE=observe npm run editorial:followups reobserves those hypotheses without X writes or live character-memory changes. R0 is now the offline contract gate; real replay and blind quality evaluation are R2 requirements. R3 publishing requires a fresh operator authorization created by editorial:authorize-live from an earned R0/R1/R2 status. The missing trusted zero-X verifier still blocks R1, so this change does not enable production publishing.
Install:
npm ciLocal safe rehearsal:
ACTION_MODE=observe TEST_MODE=true SCHEDULER_MODE=false npm run devBuild:
npm run buildTest:
npm testFull V2 verification:
npm run verifyTests use repository-scoped .test-data/ storage, while stateful editorial regressions use per-test temporary directories. This keeps local production memory and audit files untouched; the suite-wide .test-data/ directory is not itself a per-test isolation boundary.
Pixymon is still in a build-and-observe phase.
The main remaining constraints are:
- restore generation access before collecting 12 same-context comparisons; the last Anthropic call was rejected for insufficient credit
- implement the trusted zero-X verifier; R1 and therefore R3 publishing remain blocked without it
- collect a 100-context real replay corpus, complete two-reader blind evaluation, and earn the elapsed R1/R2 observe/review gates before approved live publishing
- implement and calibrate an independent semantic critic before considering automatic live promotion
- V2's protocol lane now blocks price-dominated TVL moves with a bounded, derived DefiLlama token-history screen; the screen is not a deposit or inflow claim
concept.md- product north star and decision filter
AGENTS.md- workspace and integration rules
docs/agent-workflow.md- operator / workspace workflow
docs/plan.md- implementation roadmap and review overlay
The near-term path is simple:
- keep verification green and preserve non-publishing observe/shadow isolation
- compare old and new judgments on the same real contexts; measure human approval and preference
- earn the offline, observe, and review gates before approved live publishing
- expand only after the character and evidence loop prove their value
If Pixymon becomes a recognizable character IP, the operator behind it becomes legible too.