When Software Needs Feelings: What Human-Like Agents Teach Us About Managing Projects and Dependencies
Hatched by tfc
Apr 15, 2026
9 min read
5 views
68%
Have you ever fixed a bug by installing a library, only to discover the project still behaves like a stranger in your home: it runs, but it does not belong? Conversely, have you watched a simulated agent decline a polite offer because it was "hungry" and thought: why does that small internal state make the whole scene feel more real?
These two experiences seem unrelated: one is an engineering annoyance, the other is a breakthrough in believable behavior. Look closer and you find the same design error in both: we treat complex, adaptive systems as if they were static inventories. We try to reproduce life by listing ingredients, rather than by encoding the conditions that make those ingredients come alive.
This article argues that the path to more resilient software and more believable agents runs through the same conceptual territory. We need to stop managing lists and start modeling needs, emotions, and relationships. That change alters how we capture reproducibility, how we onboard projects, and how we design agents that feel like people instead of scripted puppets.
The problem: Lists do not capture life
Developers are familiar with the ritual: a repository comes with a requirements.txt or a lock file, and you type a command to install everything. At its best this works as a mechanical way to assemble dependencies. At its worst it hides assumptions: runtime configuration, default values, health checks, platform quirks, and the social knowledge about which packages are critical and which were experimental.
Similarly, early generative agents relied on declarative facts and scripted behaviors. They could recite goals and follow rules, but conversations felt flat. The missing ingredient was not more facts, but internal dynamics: basic needs, emotional states, and graded closeness in relationships. These inner variables change how agents prioritize, remember, and react, creating the illusion of continuity and personality.
Why does this matter for software management? Because a project is an organism in practice. It consumes CPU, memory, and developer attention. It grows dependencies, forms tight couplings, and requires maintenance. Treating a project as a static list of packages will get you so far, but it will not keep the project healthy over time.
A manifest of parts is not the same as a model of behavior. Reproducibility is a promise; resilience is a practice.
This misalignment creates two common failure modes. First, brittle reproduction: you can rebuild the exact file set, but the system still misbehaves because the timing, configuration, or implicit steps are missing. Second, poor user experience: agents or software that are complete on paper but hollow in practice because they lack internal dynamics that inform behavior under stress or novelty.
A compact framework: Needs, Emotions, Closeness applied to systems
To move beyond lists, adopt a small, portable mental model inspired by human-like behavior. Think in terms of three interacting layers: Basic Needs, Emotional Weighting, and Relational Closeness. Each maps cleanly to software and engineering processes.
-
Basic Needs: the operating requirements that must be satisfied for a system to act normally. For humans this is hunger, sleep, health. For software these are runtime environment, resource availability, configuration, service endpoints, and minimal operational checks.
-
Emotional Weighting: priority modulation that amplifies or suppresses behavior in context. Humans use emotion to bias attention and memory. Software can have analogous priority signals such as health scores, error rates, degradation states, and user pain metrics.
-
Relational Closeness: degrees of coupling and trust between components or actors. Humans treat close friends differently than strangers. Software systems have core modules, optional plugins, and external integrations; their relationships determine tolerance for failure and the way changes propagate.
Applying this framework changes how you think about a project. Instead of: "Install these packages and it should work," you begin to ask: "What does healthy look like? When do we escalate? Which components are disposable?" Those questions lead to different artifacts and practices.
Concrete illustration: imagine two projects with identical dependency lists. Project A documents only a requirements file and a one-liner to install it. Project B includes a runtime manifest that specifies minimum resource budgets, health endpoints, graceful degradation behaviors, and a developer map of which libraries are critical and why. When you onboard either project, Project B feels alive: you understand what it needs and how it will behave when stressed.
Design patterns for durable, believable systems
Here are concrete design patterns that follow from modeling needs, emotions, and closeness. These patterns apply to both building human-like agents and to managing real world projects.
Pattern: Runtime Manifest
Create a small machine- and human-readable manifest that captures not only package names and versions, but runtime constraints and behavioral expectations. The manifest is not a replacement for lock files; it is a complementary document that answers questions like: "How much memory does this service need?" "What network endpoints must be reachable?" and "Which failures should trigger automatic rollback?".
Why it helps: A runtime manifest encodes Basic Needs explicitly. Reproducibility goes beyond recreating files; it becomes recreating conditions.
Pattern: Health Scores as Emotion
Assign lightweight health metrics that inform decision making. For an agent, think of energy or mood values that shift priorities. For a service, track error rate, latency, and a composite "operational mood" score that affects how aggressively the system retries or offloads work.
Why it helps: Emotional Weighting prevents brittle behavior by allowing the system to adopt fallback strategies when its internal state degrades. A component that is "tired" reduces its work queue rather than failing catastrophically.
Pattern: Closeness Tags and Fault Domains
Label dependencies and components according to relational closeness. 'Core' modules get stricter testing and migration rules. 'Peripheral' modules can be upgraded or replaced with looser controls. Capture social knowledge: who on the team owns this module, and how quickly can they respond?
Why it helps: Closeness reduces cognitive load. It is the engineering equivalent of treating family members differently than acquaintances. This avoids equal treatment of critical and non-critical paths.
Pattern: Behavioral Tests, not Just Unit Tests
Write tests that validate behavior under changing internal states. For agents, test conversations when energy is low or when closeness is high. For services, run scenarios where downstream services are slow, memory is constrained, or configuration is missing.
Why it helps: Behavioral tests ensure the system's dynamics match expectations. They exercise the interplay between needs, emotion, and relationships, revealing emergent failure modes that unit tests miss.
Practical steps you can apply today
Below are actionable steps that translate the conceptual framework into developer workflows and product decisions. They are deliberately practical so you can try them in a single day.
- Start a runtime manifest file
Add a small file to your repo called runtime.yaml or runtime.json. Include fields for minimum CPU and memory, required external endpoints with examples, expected startup order, and a short paragraph on which dependencies are critical. Keep it under 200 words. This makes expectations explicit.
- Add health endpoints and an operational mood metric
Expose a health endpoint for each service that returns not only status but a composite score derived from latency, error rates, and queue depth. Use that score to gate aggressive behaviors, such as batch processing or automatic retries.
- Tag dependencies with closeness and ownership
Annotate your dependency list or project README with labels: core, optional, experimental. Include owner contact and a suggested rollback plan. This reduces time to triage and clarifies upgrade risk.
- Write behavioral scenarios into CI
Add one or two scenarios into your continuous integration pipeline that simulate degraded internal states. For example, throttle an important downstream API and verify the service falls back gracefully. These tests are cheap and expose brittle assumptions.
- For agent design, expose internal state to narrative
If you are building interactive agents, make their basic needs and emotional states observable to their memory and decision modules. That keeps behavior consistent and makes debugging of emergent behavior tractable.
Concrete developer example: the minimal developer trick of piping a requirements file into a package manager to install everything is useful for quick setup. Treat this as a bootstrap, not as the final specification. Follow the bootstrap with a runtime manifest and health checks. This practice converts a brittle ritual into an onboarding step anchored in operational reality.
Why this matters beyond engineering
Modeling needs, emotions, and relationships is not only about resilience. It changes how teams communicate, how users experience products, and how systems evolve. Systems that encode their needs invite empathy. Developers reading a manifest see the intentions behind decisions. Operators viewing health scores understand what to prioritize. Users receive degraded but graceful behavior instead of cryptic failures.
There is also an ethical dimension. When agents appear humanlike, users attribute intentions and trust based on subtle behavioral cues. If engineers can design software to be more robust by modeling internal dynamics, they can also create interactions that are safer and more transparent.
The goal is not to make machines more like us simply for novelty. The goal is to make machines and projects whose internal lives are legible, predictable, and recoverable.
Ultimately, treating systems as living entities compels better documentation, clearer ownership, and more humane failure modes. It is a shift from a world where reproducibility is a checklist item to one where reliability is an emergent property of intentional design.
Key Takeaways
- Capture Basic Needs: Add a runtime manifest to every project that lists resource, configuration, and operational expectations, not just package names.
- Use Health as Emotion: Compute lightweight operational mood scores that influence system behavior under stress.
- Encode Closeness: Tag dependencies and components by criticality and ownership to reduce upgrade risk and speed response.
- Test Dynamics: Add behavioral scenarios to CI that simulate degraded internal states and validate graceful degradation.
- Treat Bootstraps as Temporary: Mechanical install steps are useful for quick setup, but follow them with explicit operational and behavioral specifications.
Conclusion
It is tempting to think that realism in software or behavior comes from adding more parts. But life emerges when parts gain needs, feelings, and relationships. A project that only contains a list of packages is like a diary listing people you know: informative, but it tells you nothing about who you turn to in a crisis.
If you want your systems to be resilient and your agents to feel real, document the conditions that make them act. Give them hunger and energy as operational constraints. Give them moods that modulate behavior. Give them closeness so you know what matters most. These are small modeling shifts with outsized payoffs: fewer brittle reproductions, clearer ownership, and systems that behave predictably when the unexpected happens.
Next time you clone a repository or design an interactive agent, ask not only: what does this system contain? Ask: what does it need to thrive? The difference between those two questions is the difference between running something and belonging to it.
Sources
Hatch New Ideas with Glasp AI 🐣
Glasp AI allows you to hatch new ideas based on your curated content. Let's curate and create with Glasp AI :)
Start Hatching 🐣