[Discussion] Architectural Trade-off: Static Patterns as Probabilistic Skills vs. Deterministic Path-Based Rules #849
Replies: 2 comments
|
This was a deliberate trade-off, and the short version is: deterministic, path-scoped invariants belong in rules; on-demand, judgment-heavy guidance belongs in skills. Where ECC has a rule, we want it to be something we are comfortable injecting every time a path or event matches: style floors, safety rails, harness/runtime constraints, path-specific requirements, and other low-ambiguity guidance. That is the deterministic layer. Where ECC uses a skill, we usually want one or more of these properties instead:
So for something like In practice ECC is converging on a mixed model, not an all-skills or all-rules model:
You are also right that this boundary is worth tightening. We have been steadily moving duplicated/static material out of broad skills when it really wants to be a path/event rule, and keeping skills for the parts that are genuinely procedural or judgment-heavy. So the concern is valid; the answer is not “skills everywhere,” it is a cleaner separation of concerns. |
|
I turned this boundary into a repo doc so the answer is no longer trapped in this thread:
Short version remains the same, but now it is explicit and reusable:
That is also the repo policy going forward when external ideas come in: copy the underlying idea, then repackage it into the narrowest ECC-native surface instead of defaulting to another plugin/runtime. |
Uh oh!
There was an error while loading. Please reload this page.
Hi @affaan-m,
First off, absolutely stellar work on this repository. It’s been an incredible resource for understanding agentic workflows in Claude Code.
I’m opening this discussion to explore an architectural design choice I noticed regarding the
backend-patterns(and similar pattern-based.mdfiles). Currently, these static coding guidelines are implemented as Custom Skills.From an Agent engineering perspective, I'm curious about the trade-off here, specifically regarding Probabilistic Tool-Calling vs. Deterministic Context Injection:
The Core Concern
Because these patterns are packaged as "Skills", their execution relies on the LLM's semantic heuristics to trigger the tool call.
If a user writes a highly specific prompt like: "Write a backend endpoint and consult the backend-patterns skill first", it works perfectly.
However, if a user gives a broader command like: "Implement the backend API based on the attached technical design doc", there is a high probability that the LLM will bypass the skill entirely. It might just jump straight to using the
Edittool based on its pre-trained "old memory", ignoring the standardized patterns completely.The Deterministic Alternative
Claude Code / OMC supports
.claude/rules/*.mdwith glob-pattern routing (e.g.,paths: internal/handler/**/*.go).If these patterns were implemented as Rules instead of Skills, the context injection would be 100% deterministic. The moment the agent's
Edittool touches a handler file, the interceptor would forcefully inject the RESTful/JWT guidelines into the System Prompt, removing the LLM's "guessing game" of whether to load the context or not.The Question
Was the decision to use Skills for static knowledge a deliberate choice for Token Economics / On-Demand Payload (i.e., avoiding context poisoning when the LLM is doing frontend work)? Or is this an area where migrating these static cheat sheets to path-based
ruleswould be a better best practice for the community?Would love to hear your thoughts on this architectural boundary! Thanks again for the awesome repo.
All reactions