Back to home@Kenerlee

dsh-moments-aieo

AIEO (GEO/AEO) delivery method as a DeepSeek Harness bundle: five moments-aieo-* skills over a shared question library

Stars
0
Language
Python
Created
Aug 19, 2026
Updated
Aug 20, 2026

Introduction

Moments AIEO — 让品牌被 AI 搜索引用 / Get your brand cited by AI search

dsh-moments-aieo

English | 中文

An AIEO (AI Engine Optimization — the GEO/AEO practice of getting a brand cited by ChatGPT, DeepSeek, Doubao, Kimi, Perplexity and friends) delivery method, packaged as one DeepSeek Harness bundle. The method runs in four stages — diagnosis → positioning → content → monitoring — chained by one question bank: diagnosis drafts it, positioning corrects it, content consumes it, monitoring measures against it. This bundle ships the three stages that are method rather than writing — diagnosis, positioning, monitoring — plus the question bank itself, as one named skill provider. The content stage consumes the bank through whatever writing skill you already use.

Diagnosis report

Plugin

Requires ctx.skills (inject: ['skills']).

The plugin body is deliberately thin: it mounts @deepseek-ai/dsh-skill-filesystem with includeDefaultRoots: false over its own skills/ directory, so this set registers under one provider name and never collides with same-named skills in ~/.dsh/skills or ~/.agents/skills. No scanner, watcher, or frontmatter parser is reimplemented here.

Config

FieldDefaultMeaning
skillsDirthe package's own skills/Directory holding the <name>/SKILL.md bundles. Point it at a working tree during development.
providerNamemoments-aieoProvider name registered on ctx.skills, keeping this set separable from the user's own roots.

Install

dsh plugin --profile web add github:Kenerlee/dsh-moments-aieo   # straight from GitHub
dsh plugin --profile web add file:/path/to/clone                # from a local clone

Then add the package to the profile's bundle list in ~/.dsh/profiles/web/package.json:

{ "dsh": { "profile": { "bundles": [
  "@deepseek-ai/dsh-base",
  "@deepseek-ai/dsh-web-app",
  "dsh-moments-aieo"
] } } }

The bundle's own cordis.patch.yml inserts the row, so no profile patch is required. Override it by id in ~/.dsh/profiles/web/cordis.patch.yml when you want your own skill directory:

- id: moments-aieo
  config:
    skillsDir: /absolute/path/to/your/skills

Verify without booting:

dsh --profile web --dump-config | grep -A 4 'id: moments-aieo'

Browser automation

moments-aieo-diagnosis and moments-aieo-monitoring drive real AI search platforms through Playwright. dsh reaches MCP servers through dsh-mcp-client, which registers their tools under mcp__<serverName>__<rawName> — the same server-qualified shape Claude Code uses, so the mcp__playwright__browser_* names in these skill bodies resolve as long as the server is named playwright:

- insert:
    - id: mcp-playwright
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: playwright
        command: npx
        args: ['@playwright/mcp@latest']

Without it the two skills still produce a technical audit and a report skeleton; the platform-visibility measurements are what go missing.

Screenshots

A diagnosis report and the monitoring dashboard, both from real client runs with the brand redacted.

Monitoring dashboard Dashboard on a narrow screen

Skills

SkillPurpose
moments-aieo-diagnosisBrand AI-visibility diagnosis; emits a report plus the first draft of the question bank
moments-aieo-positioningPositioning analysis on an AIEO-adapted April Dunford method; iterates the question bank
moments-aieo-query-minerReal search-term mining from whitelisted platform exports only; refuses to invent terms
moments-aieo-monitoringPeriodic visibility, share-of-voice, content-quality and conversion tracking
moments-aieo-dashboardRenders monitoring reports into an interactive HTML dashboard
moments-landing-page-clonerHigh-fidelity landing-page replication

Diagnosis, positioning, query mining and monitoring share one artifact chain: the question bank the diagnosis drafts is what positioning corrects, content consumes, and monitoring measures against. Running them out of order is allowed and produces a weaker bank.

Model Experience

Indirectly, through @deepseek-ai/dsh-tool-skill: this provider's names and capped descriptions appear in the model's skill catalog, and skill(name) loads the selected SKILL.md body plus its resource base. Paths, provider ranks, and the mount configuration stay hidden from the model.

KV Cache effect

Catalog only. Registration adds eight rows to the catalog digest once; skill bodies enter history only when the model loads one.

Known Limitations and Deferred Work

  • The frontmatter allowed-tools key does nothing under dsh — the parser reads name, description, whenToUse, metadata and the two invocation flags, and ignores the rest. It neither errors nor restricts anything; the key is kept for Claude Code compatibility. Harness tool names in the bodies were corrected to dsh spellings (read, glob, web_fetch); MCP names need the server configured above.
  • Web mode disables the host-level providerdsh-web-app sets skill-filesystem: disabled because agent presets own local discovery. This bundle registers globally and preset agents read the merged catalog, so the set stays visible; a deployment that isolates its presets from global registrations would not see it.
  • No build step — the plugin ships as plain .mjs with no TypeScript source, no lib/, and no type declarations. It is twenty lines; a consumer wanting types writes them.
  • Reference cases are not distributed — the diagnosis skill's worked client examples live outside this repository.
  • Chinese-first content — every AIEO skill body is written in Chinese, and the scoring rubrics assume Chinese-language AI search platforms.

Who built this

The method comes from real AIEO delivery work — brand diagnosis, positioning, question-bank construction and monitoring for consumer, healthcare, SaaS and franchise clients. The tooling is open source; the industry baselines and the judgement of what to do with a low score are not things a Markdown file can carry. moments.top

Ran a diagnosis? Open a Discussion with your score and industry (no brand name needed). Real numbers across industries are what turn a scoring rubric into a benchmark, and the aggregate goes back into this repo.

License

MIT