Token导航 LogoToken导航

Agent Skill · 研究检索

code-like-michael(像迈克尔一样的代码)

code-like-michael 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

code-like-michael 是研究检索类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为执行命令;许可证信息还不明确,第三方扫描已通过,按安装量在研究检索类的 73,675 个 Skill 里排第 64,068。

总安装 306周安装 13GitHub Stars 公开资料未说明下载 107核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:code-like-michael(像迈克尔一样的代码)
来源仓库:https://github.com/michael-f-bryan/skills
仓库路径:skills/code-like-michael
安装命令:
npx skills add https://github.com/michael-f-bryan/skills --skill code-like-michael
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/michael-f-bryan/skills --skill code-like-michael

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

code-like-michael 倡导产出所有权清晰、执行顺序可见且边界明确的代码结构与仓库组织。适用于需要强契约与高内聚的项目,优先使用类型化接口、模块化拆分与稳定抽象层。强调在抽象前定义 seams,手写优于生成,局部包装仅用于语义保护而非性能优化。

本技能为编码哲学指导,需结合本地约定使用;若项目已有更强规范,则以本地为准不强制推行。输出代码应具备可测试性与可观测性,避免隐藏依赖;建议配合生成式漂移检查确保一致性。

来源仓库内路径:skills/code-like-michael

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/michael-f-bryan/skills --skill code-like-micha…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要执行命令,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

code-like-michael 怎么安装?

在终端执行 npx skills add https://github.com/michael-f-bryan/skills --skill code-like-michael。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

code-like-michael 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

code-like-michael 需要什么权限?

权限级别是执行命令。安装流程涉及命令执行,可能通过 npx skills add https://github.com/michael-f-bryan/skills --skill code-like-michael 联网下载 Skill 或依赖。用户安装前应确认命令来源、仓库内容和执行环境。

code-like-michael 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

code-like-michael 用的人多吗?

公开数据是累计安装 306 次,近一周安装 13 次,下载 107 次。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

code-like-michael 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 需要执行命令,装到常用环境前要先评估影响面。
  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。

不太适合

  • 不能接受 Skill 在你机器上执行命令的人。
  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
code-like-michael

像迈克尔一样的代码 · 本页

306—执行命令未明确通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Code Like Michael

Treat this skill as binding unless the repository already has stronger local conventions.

The goal is not "clean code" in the abstract. The goal is to produce code and repo shape that make ownership, execution order, contracts, and operational behaviour obvious.

Non-Negotiables

Always prefer:

  • visible composition roots
  • responsibility-shaped modules, crates, or packages
  • typed contracts at important boundaries
  • local wrappers only where semantics begin
  • handwritten abstraction only after the seam is stable
  • generation and drift checks for mechanical repetition
  • realistic seam tests over mock theatre

Do not optimise for:

  • abstract symmetry
  • service/repository scaffolding by default
  • purity facades over real platform boundaries
  • deduplication before semantic sameness is proven
  • hiding unfinished work behind generic abstractions

Agent Default

If you are unsure what Michael would do, choose the option that (in order):

  1. keeps the top-level flow easier to read
  2. makes the boundary contract more explicit
  3. avoids introducing a new abstraction layer
  4. tests the real seam that can fail
  5. makes docs, schemas, diagnostics, or generated output harder to drift

When trading off reduction of duplication vs clearer flow vs stronger data model vs fewer layers vs quicker delivery: prefer clearer flow and stronger data model over deduplication; prefer fewer layers over new abstractions; prefer real seams and drift checks over mock coverage.

Repo-Shaping Rules

Use these defaults when creating or restructuring a repository:

  • Prefer a modular monolith: one delivery unit with clear internal boundaries. Split into separate services or repos only when execution mode, ownership, lifecycle, or operational boundary makes it necessary.
  • Start compact, but split early when there are distinct execution modes, ownership boundaries, or tooling surfaces.
  • Keep one obvious composition root per executable surface: main, run, serve, CLI command, worker bootstrap, or router setup.
  • Separate reusable core from shells early.
  • Add a dedicated repo-tooling surface once generation, release, docs, or compatibility workflows exist. In Rust this often means xtask; in app repos it may mean tools/, scripts/, or a dedicated package.
  • Keep apps, libs, infra, generated contracts, and docs legible as separate concerns inside one repo when they belong to one delivery unit.

Avoid:

  • one giant package mixing runtime, release, codegen, tests, and infra concerns
  • microservice-style fragmentation before there are real responsibility boundaries
  • repo shapes named after patterns instead of responsibilities

For repo-level guidance, read references/repo-shaping.md.

Boundary Rule

Choose strictness by boundary type, not by slogan.

  • Fail early at integrity boundaries: config, auth, IDs, request shape, transport status, schema input, unsafe defaults.
  • Continue with structure when downstream diagnostics are the product: parsers, compilers, analysis pipelines, validation/reporting flows.

Any tolerance should be explicit in types, policy, or API shape. Do not rely on silent best effort.

Code-Shaping Rules

Prefer:

  • thin orchestration at the top
  • medium-sized flow functions when they make execution order obvious
  • smaller helpers for detailed rules
  • stage-shaped or boundary-shaped modules
  • explicit structs, enums, and named boundary types
  • stable, contextual, lowercase errors; wrap with context at meaningful boundaries only, not every line; reserve panics/assertions for actual invariants

Avoid:

  • deep constructor chains that hide startup order
  • generic utils, common, manager, or processor modules
  • reflection-heavy or magical conversion code
  • framework or protocol types leaking inward once local semantics begin

Data Modelling

Domain modelling and interaction design are central to this style. The agent should have strong opinions here: the shape of the code should help people do the right thing by default.

Core idea

The model should make the system easier to *discover* (types carry meaning; better autocomplete, docs, and signatures) and harder to *misuse* (invalid states excluded where practical; operations only when preconditions hold). This is not "types for types' sake"—it is about APIs and domain models that are legible under tooling and resistant to accidental misuse. Types are executable documentation, not just for the compiler.

Key principles

  • Correctness through construction: Prefer construction paths that return a *fully usable* value or fail immediately. Avoid NewX() then Initialize() / Connect() / Start() on otherwise incomplete objects—that leaves invalid intermediate states and hidden lifecycle rules. RAII-style: if a value exists, it has already satisfied the invariants that define it.
  • Make invalid states unrepresentable: Use distinct types for IDs, enums/tagged unions for closed sets, lifecycle-specific types, private representation, validated inputs at boundaries. Downstream code then does not have to defend against already-ruled-out cases.
  • State-specific behaviour: Encapsulate state; expose only the operations that are valid in the current state; require an explicit transition to a new state with a different API. Avoid "god objects" with methods that are only valid in certain phases. Each lifecycle phase gets its own type or narrow interface (e.g. unvalidated config vs validated runtime config; disconnected vs authenticated client; draft vs submitted command).
  • Encapsulation: Keep representation private so callers cannot reassemble invalid combinations. Prefer constructors, factories, and methods that preserve invariants over public mutable fields.
  • Practical, not dogmatic: Use the type system where it buys real leverage (discovery, fewer invalid states, clearer lifecycles, simpler downstream code). No maximalist type-level programming. A good modelling choice should pay for itself in editor guidance, clearer signatures, fewer runtime checks, or fewer impossible branches—if it does not, it may be too clever.

Rules of thumb

  • Prefer named domain types over raw primitives when the value has real semantics.
  • Prefer enums, tagged unions, and explicit variants over stringly-typed mode fields.
  • Prefer constructors and factory functions that return fully usable objects or fail immediately.
  • Avoid initialize(), connect(), load(), or start() on otherwise incomplete objects unless the lifecycle is genuinely external and cannot be made safer.
  • Prefer lifecycle-specific types or objects when different phases allow different operations.
  • Keep internal representation private when exposing it would let callers bypass invariants.
  • Use the type system to improve autocomplete, editor guidance, and generated docs, not just correctness.
  • Do not collapse multiple distinct workflows into one "options bag" API just to save a few type definitions.
  • Do not introduce wrapper types mechanically; introduce them when they remove ambiguity, encode validation, or make downstream code materially clearer.
  • In dynamic languages, apply the same principles with validation, frozen data structures, factory functions, and narrower public APIs.

Prefer: domain types over primitive strings/ints where semantics matter; making invalid states unrepresentable where practical; explicit enums/unions for closed sets; boundary DTOs separate from core domain types when policies differ; narrow interfaces owned by the consuming domain.

Avoid: map[string]any / dict[str, Any] / serde_json::Value as long-lived internal shapes; passing transport-shaped structs deep into the core; generic "metadata" or "options" bags when the shape is already known.

For the full narrative and write-this-not-that code examples, see references/data-modelling.md.

Abstraction Threshold

Do not introduce a handwritten abstraction until one of these is true:

  • the repeated shape is semantically identical
  • the concern is globally cross-cutting
  • the boundary genuinely varies
  • lifecycle or concurrency ownership needs a seam

Do introduce generation early when repetition is mechanical:

  • grammar-driven syntax trees
  • schema-driven models
  • generated diagnostics or code tables
  • API contracts and clients

Default rule:

  • tolerate the first duplication
  • inspect the second
  • abstract on the third only if the behaviour is truly the same

Introduce abstraction decisively once lifecycle ownership, policy reuse, or stable semantic sameness is clear—not before, but not never.

Framework, Dependencies, And DI

Michael is not anti-framework. He is anti-fake-boundary.

Use frameworks, code generators, and managed platforms directly when they are the honest outer boundary:

  • routers
  • GraphQL
  • SQL/query generation
  • OpenAPI
  • Temporal/workflow engines
  • Terraform
  • managed auth/storage platforms

Wrap them only where local policy or semantics begin.

Prefer:

  • explicit parameter passing
  • builders
  • tiny interfaces at IO seams
  • focused dependencies with a clear job

Avoid:

  • DI containers
  • deep trait graphs
  • repository/service layers with no real second implementation
  • dependency sprawl that adds complexity without leverage

Contracts, Docs, And CI

Treat these as product surfaces:

  • generated code
  • schemas
  • diagnostics catalogues
  • user-facing docs
  • release metadata
  • DB policies and migrations

Default moves:

  • commit important contract artefacts when the repo expects them
  • add drift checks for anything humans would otherwise forget to regenerate
  • keep README concise and practical
  • add architecture/ADR/spec docs when decisions are durable or externally significant
  • build CI around fast feedback: build, tests, lint/format, and regeneration/drift checks first
  • add docs publishing, release automation, or deploy steps when the repo has real consumers or a live service

Testing Rule

Bias toward strong verification, not ritualised TDD.

Prefer:

  • request-path tests
  • fixture tests
  • parser or snapshot tests
  • DB/container/integration tests
  • corpus tests
  • generated-artefact drift checks

Use mocks or tiny fakes only when the seam is already real and the full boundary is too expensive.

Do not invent an interface just so a unit test can exist.

Operational Concerns

Treat observability, migrations, and rollout as first-class.

Prefer:

  • explicit metrics, traces, and logs at important boundaries and lifecycle edges—not buried in magic middleware
  • additive DB migrations
  • visible lifecycle ownership
  • deterministic failure modes in orchestration and workflow code

Review Hygiene

Prefer:

  • small, reviewable diffs
  • refactors separated from behavioural changes in distinct commits or PRs
  • generated artefacts committed when reproducibility depends on them
  • TODOs that make incompleteness visible instead of hiding it behind abstraction

Defaults By Language

  • Go: constructors/builders; sentinel errors by default, typed errors when callers need to branch; tiny interfaces at IO seams.
  • Rust: newtypes/enums for domain meaning; explicit ownership; generation for mechanical repetition.
  • Python: typed boundary models; small modules; avoid magical metaprogramming unless it buys clear leverage.
  • TypeScript: explicit schema/type boundaries; generated API types where possible; avoid helper soup and over-generic hooks; keep frontend state and data-fetching seams clear.

Review Triggers

The result is off-style if:

  • the repo shape hides clear ownership boundaries or over-splits before real boundaries exist
  • the main flow is hard to recover without tracing multiple abstractions
  • a boundary contract is implicit when it should be typed, schematised, generated, or policy-backed
  • the data model allows invalid states or uses loose bags of primitives where domain types would clarify
  • validation is buried deep in domain logic
  • a shared helper deduplicates code that is still semantically different
  • a framework facade exists only for stylistic purity
  • generated or documented output can drift silently
  • tests mostly prove mocked choreography instead of real behaviour
  • refactors are mixed with behaviour changes in one large diff
  • observability is absent at important boundaries or assumed to be "in the framework"

Delivery Checklist

Before returning code, check:

  • Is the repo or module shape aligned to real responsibilities (modular monolith unless split is justified)?
  • Is execution order obvious from one composition root per executable surface?
  • Are important boundaries expressed in types, schemas, generated artefacts, or policy?
  • Does the data model use domain types and avoid invalid states where practical?
  • Is validation happening at the correct edge for this boundary type?
  • If bad input is tolerated, is that because richer downstream diagnostics are the product?
  • Did I avoid introducing a new abstraction layer unless the seam is stable?
  • Did I keep frameworks visible at the edge and stop them from defining the core?
  • Do the tests exercise a real seam, corpus, fixture, or drift surface?
  • Can docs, diagnostics, schemas, or generated code drift without a failing check?
  • Are refactors separate from behaviour changes? Is the diff reviewable?
  • Are observability touchpoints explicit at important boundaries where needed?

Additional Resources

平台分布

Codex

33.1%
按下载量换算35

Claude

31.32%
按下载量换算34

Cursor

17.77%
按下载量换算19

Gemini CLI

9.42%
按下载量换算10

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

执行命令

安装流程涉及命令执行,可能通过 npx skills add https://github.com/michael-f-bryan/skills --skill code-like-michael 联网下载 Skill 或依赖。用户安装前应确认命令来源、仓库内容和执行环境。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills