anon-dev

Matrix City - Attribute and Activity

Last post we gave ten characters skill graphs. These are living DAGs built from three stacked learning models.

However, it was still just numbers on a résumé. The apprentice and the veteran blacksmith had the same skill object, just different proficiency among them.

If you want characters that feel alive, skills have to cost something.


Attribute Modeling

I added five slow-moving physiological attributes, all 0–1:

After determining the attribute for agent agent, I gave them a personality-derived baseline. Meaning, a melancholic character starts with a lower stats compared to someone who is optimistic about life. Further, I defined zones per-character too, such that same stress number can be “functional” for one person and “survival mode” for another.

class Attribute(BaseModel):
    current: float
    baseline: float   # from personality
    regen_rate: float
    decay_rate: float

This model provides a form of physiology to the character.


Execution

Every skill use now hits the body, and the cost scales with Dreyfus level and automaticity.

Novice (Dreyfus 1): energy drops hard, stress climbs, every stroke hurts.
Expert (Dreyfus 5): almost no cost, tiny mood bump, sometimes even energy back.

The idea behind automaticity is to multiply the savings. A veteran farmer can work all day while a city kid with the same skill at 0% automaticity can't sustain till lunch.

And then there’s flow:

If Dreyfus ≥ 5 and automaticity ≥ 0.80 on success, then agents get energy reward while stress bleed-off. Consequently for veteran blacksmiths, the forge becomes where they rest.


Activities

Skills are the “what you can do.” Activities are the “what you actually spend your day on.”

Each activity is time-bounded, gated by class and world state, with declared costs and skill affinities. I have defined about fifteen meta-categories cover 1875 life: craft_object, perform_labor, trade_or_exchange, social_maneuvering, nurture_or_care, etc.

A laborer doesn’t attend parliamentary sessions at the same time an aristocrat doesn’t shovel coal.

{
  "id": "carve_stone_capital",
  "duration_hours": 8,
  "skill_affinity": [
    {"tag": "stone_carving", "relevance": "primary"},
    {"tag": "artistic_vision", "relevance": "supporting"}
  ]
}

Bridge between graphs

Skill graph answers “what do I need to learn?”
Activity index answers “what can I actually do today?”

Activities reference skill tags. The bridge resolves them with relevance weights (primary 1.0×, supporting 0.5×).


Ruth again

Ledger-keeping (Dreyfus 4, 85% automaticity): energy cost almost nothing. Stress barely moves as she sits down, opens the books, and the day quiets during her day to day work.

Public speaking (Dreyfus 1, 0% automaticity): energy plummets, stress spikes, mood tanks as soon as a sentence has to be uttered in a social situation. The anxiety is off the roof with this one.

However, that’s the point for this simulation system.


The pipeline now

Personality → Character
Skill schema + LLM → Skill graph (DAG)
Activities + bipartite index → Action layer
Attributes + Dreyfus costs → Execution that changes the character

Ten characters can now act and undergo physiological change.

Next post we will start building the key places and map for the world these agents are acting on.

See you in next log!

If you enjoy the content, feel free to subscribe to my blog via email or RSS feed.

#agentic #blog #devlog #llm #programming #simulation #technical