Pet product specification
| Document version | Date | Summary |
|---|---|---|
| v1 | 2026-07-17 | Initial product specification |
Status: Draft
Working name: Pet
Document purpose: This document defines the product vision, behaviour, scope, and product requirements. Technical structure and API design belong in the general architecture.
1. Product overview
Pet is a calm virtual companion that lives alongside the user. It provides a small and persistent presence that reacts to time, direct interaction, its environment, and optional real world activities.
The product is not intended to recreate the maintenance loop of a traditional virtual pet. The pet does not die, become permanently ill, or punish the user for being absent. It should make ordinary routines feel warmer without becoming another source of obligation, guilt, or unwanted notifications.
The pet and its world are defined by the Pet Core. Desktop applications, physical devices, mobile applications, and web applications may present the same product through different frontends. Hardware is one possible home for the pet. It is not the definition of the product.
The words pet and companion may both be used in product language. Pet is the primary domain term and is expected to be the basis of C identifiers and public API prefixes.
2. Product vision
The product should feel like a quiet character sharing the user’s day.
It should be:
- present without constantly requesting interaction
- expressive without using distress to drive engagement
- encouraging without judging productivity
- useful without becoming a task manager
- personal without requiring invasive data collection
- capable of developing a distinct identity over time
- suitable for software and physical frontends
The central product promise is:
The pet makes the user’s life a little nicer instead of asking the user to maintain it.
3. Core principles
SPEC-PR-001: companion, not obligation
The user must be able to leave the product for any length of time without permanent loss, punishment, illness, or damage to the relationship.
SPEC-PR-002: real life comes first
The product should support real world activity instead of competing with it. In product rewards may acknowledge focus, movement, reading, rest, or creative work. Constant engagement must not be treated as the main measure of success.
SPEC-PR-003: calm by default
The default experience must avoid attention seeking notifications, urgent warnings, streak pressure, and artificial scarcity. Any reminder capability introduced later must be optional and controlled by the user.
SPEC-PR-004: no punitive survival mechanics
The pet must not die, starve, become permanently ill, or suffer comparable harm because the user was absent. Temporary expressions such as sleepy, curious, calm, playful, dizzy, or surprised may communicate its current experience without acting as failure states.
SPEC-PR-005: positive and non judgemental feedback
The product may celebrate completed activities but must not shame the user for inactivity. Rest and quiet days are valid parts of life.
SPEC-PR-006: local ownership
Core pet behaviour and local persistence must work without a network connection. The authoritative pet data should remain under the user’s control. Accounts, cloud services, device transfer, and synchronisation are not required for the initial product.
SPEC-PR-007: one core and multiple frontends
Pet behaviour must not be defined by SDL, a display type, a mobile operating system, or a specific microcontroller. Frontends may differ in presentation and input capabilities while preserving the same domain rules.
SPEC-PR-008: identity through shared history
The pet should develop a distinct identity through time, interaction, formative events, and shared activities. Development should create attachment and visible history without creating a competitive level system.
SPEC-PR-009: AI is optional
The initial product must provide a meaningful companion experience without generative AI. Any future AI capability must remain optional and must not replace deterministic core behaviour or local ownership.
SPEC-PR-010: respectful product design
The product must not depend on advertisements, manipulative engagement loops, hidden behavioural profiling, or randomised real money rewards.
4. Target users
4.1 Primary users
The primary audience is people who want a small digital presence during everyday life but do not want the responsibility associated with a traditional virtual pet.
This may include students, developers, remote workers, readers, and other users whose days contain periods of focused work and quiet routine.
Primary users may value:
- a calm desktop or desk companion
- gentle acknowledgement of daily activities
- short interactions that do not interrupt work
- a character that becomes more personal over time
- a product that remains useful without a subscription or constant connection
4.2 Secondary users
A later secondary audience may include makers and developers who want to create custom frontends, sensors, activity integrations, or other adapters.
The product may eventually expose a plugin or adapter system. Its distribution and commercial model are undecided. The system may be open source, partly open, or distributed through another model. These decisions must not restrict the initial product design before the product value has been validated.
Supporting developers must not make the ordinary user experience unnecessarily technical.
5. Core experience
5.1 Ambient presence
The pet exists even when the user is not actively interacting with it. It may sleep, read, look around, play, observe its environment, or perform other small autonomous behaviours.
Ambient behaviour should make the pet feel present without demanding a response.
5.2 Brief direct interaction
The user may perform small actions such as greeting the pet, petting it, selecting an activity, giving it an owned item, or navigating a menu.
Essential interactions should remain possible on devices with a small number of buttons. A keyboard, pointer, touch screen, or network connection must not be required by the core interaction model.
5.3 Shared real world activity
The user may start or record an optional real world activity. The pet may accompany the activity or respond to its completion.
Examples include:
- reading quietly during a focus session
- finding a small object after a walk
- reacting to recorded reading activity
- acknowledging creative or development work
- resting with the user on a quiet day
Some activities may be entered manually. Others may arrive through adapters such as a Git hook, a mobile activity source, an ebook service, or a local application.
The Core must not depend on the original data source. Adapters translate external information into product level events that the Core understands.
5.4 Long term continuity
The pet retains its identity and relevant history between sessions. Progress should create variety, memories, preferences, habits, appearance details, and new behaviour.
The pet may gain lasting characteristics through formative events. Examples include:
- a small scar from an adventure
- a notch in one ear
- a favourite sleeping position
- a distinctive greeting
- a preference for reading or exploring
- a souvenir associated with a shared activity
- a new expression linked to a memory
These changes represent history rather than damage or statistical superiority. One pet may become bookish while another becomes adventurous or cosy. Neither pet is more valuable or more complete.
Important memories remain part of the pet’s history. Visual marks and cosmetic details should be controllable when permanent presentation would prevent the user from enjoying the pet’s appearance.
5.5 Bounded development
The pet may grow and mature, but it must not continue growing until it loses its intended visual character. It must not become elderly as part of normal progression.
Development may include a small number of stages. Physical size changes should remain limited. Most development should appear through richer behaviour, expressions, preferences, memories, marks, and interactions with the environment.
Development must not regress because of inactivity. The user’s contribution should be visible through shared history rather than through maintenance of a growth meter.
6. Product model
6.1 Pet identity
The pet is a persistent character with its own identity. Its identity belongs to its saved state rather than to a renderer, display, or physical device.
The product should distinguish between:
- stable identity such as name, appearance basis, and creation time
- current state such as activity, expression, and location
- lasting development such as maturity, traits, habits, and visual marks
- shared history such as memories and formative events
- progression such as discovered content and available interactions
- presentation chosen by the active frontend
Presentation must not be the authoritative source of pet state.
6.2 Mood and expression
Mood provides personality and behavioural variety. It must not conceal a health, survival, or neglect meter.
Mood may be influenced by:
- time of day
- recent interaction
- current activity
- recent events
- the environment
- established traits and preferences
Mood must follow these rules:
- it must not cause permanent harm
- inactivity must not reduce permanent progress
- the user must not need to optimise mood values
- reunion behaviour may acknowledge a long absence without blaming the user
- uncomfortable temporary states must resolve safely
6.3 Formative events
A formative event is a meaningful event that may affect the pet’s lasting identity.
A formative event may create one or more of the following:
- a memory
- a trait or preference
- a behavioural habit
- a visual mark
- an expression
- an item or environmental detail
Formative events should be uncommon enough to remain meaningful. They must not be produced mainly by repetitive activity farming.
Large appearance changes should require user control or confirmation. Minor details may emerge naturally when they remain consistent with the product’s visual design.
6.4 World
The world contains the authoritative context required for the pet to exist consistently.
Product level world concepts may include:
- time and day phase
- one active pet
- the current environment or scene
- owned or discovered items
- memories and formative events
- activity records
- queued and recent events
- progression state
- available environment capabilities
V0 supports one world with one pet. Multiple pets, shared households, visits, and pet encounters are future possibilities and are not requirements for V0 or V1.
6.5 Items and discoveries
Items may provide cosmetic variety, environmental decoration, new expressions, or small interactions. They must not become mandatory consumables required to keep the pet alive or healthy.
Activity rewards should favour memories, discoveries, and character development over currencies and numerical optimisation.
6.6 Relationship
The product may represent the history between the user and pet. It must not use relationship decay to punish absence.
The relationship should be visible through accumulated shared experiences, familiar behaviour, and established routines. It should not be reduced to a bar that demands maintenance.
7. Activity model
Real world activities are optional inputs into the pet world. They are not required for the pet to remain valid or usable.
SPEC-FR-001: platform independent activities
The product shall represent a real world activity using a platform independent activity type and relevant activity data.
SPEC-FR-002: manual activity support
An activity shall be recordable without requiring a third party service. Adapters may automate activity reporting in later versions.
SPEC-FR-003: pet participation
The pet shall be able to enter an appropriate activity or expression while a supported shared activity is in progress.
SPEC-FR-004: positive completion response
Completing an activity may produce a memory, discovery, expression, behaviour, or other non punitive result.
SPEC-FR-005: no inactivity penalty
Failing to start or complete an activity shall not damage the pet, remove permanent progress, or reduce the relationship.
SPEC-FR-006: adapter supplied activities
An adapter shall be able to translate an external action into a product level activity event without receiving direct ownership of mutable Core state.
SPEC-FR-007: bounded activity response
Repeated external events shall be rate limited, grouped, or otherwise bounded where necessary. High activity volume must not produce unbounded rewards or pressure the user to optimise external behaviour.
Candidate activity categories include focus, walking, reading, rest, and creative work. Inclusion in this list does not place every category inside V0.
8. Interaction model
SPEC-FR-008: semantic actions
User intent shall be represented as semantic product actions independent of physical input. A button, keyboard key, touch gesture, or adapter may produce the same action.
SPEC-FR-009: limited input operation
Essential interactions shall be possible using a small number of directional and confirmation actions.
SPEC-FR-010: valid absence
The world shall remain valid when no user input is received for an extended period.
SPEC-FR-011: calm feedback
The product shall communicate changes through concise visual, textual, or optional audio feedback without requiring acknowledgement of routine events.
SPEC-FR-012: capability aware behaviour
The product shall remain valid when a frontend or environment does not provide a particular input, output, sensor, or integration capability.
9. Time and autonomous behaviour
SPEC-FR-013: explicit time progression
The world shall progress through explicit time information supplied by its host environment. Core behaviour must remain testable without relying on the actual system clock.
SPEC-FR-014: autonomous activities
The pet shall be able to select or transition between ambient activities without direct user input.
SPEC-FR-015: session continuity
The product shall account for elapsed time between sessions without simulating every missed update.
SPEC-FR-016: safe clock anomalies
Unexpected clock changes shall not cause permanent harm, invalid world state, or unbounded processing.
SPEC-FR-017: reproducible core behaviour
Given the same initial state, time input, actions, external events, and random seed, Core behaviour should be reproducible for testing.
10. Development and progression
SPEC-FR-018: lasting identity development
The pet shall be able to gain lasting memories, traits, preferences, habits, marks, or discoveries.
SPEC-FR-019: bounded maturity
The pet may progress through a limited maturity model. Development shall stop before the pet loses its intended scale and visual character.
SPEC-FR-020: no ageing requirement
Normal progression shall not require old age, physical decline, or death.
SPEC-FR-021: non destructive progression
Permanent development shall not be removed because of inactivity or failure to complete a routine.
SPEC-FR-022: meaningful causes
Lasting development should reflect time, interaction, formative events, and shared activities. It must not depend only on numerical activity counts.
SPEC-FR-023: cosmetic control
The user should be able to control the presentation of lasting visual details when those details materially affect enjoyment of the pet’s appearance.
SPEC-FR-024: distinct outcomes
Different pets should be able to develop different identities without being ranked as better or worse versions of the same character.
11. Frontends
A frontend provides the presentation and direct user interaction for a particular environment. Examples may include SDL, OLED, e ink, mobile, and web frontends.
SPEC-FR-025: presentation state
A frontend shall receive a read only presentation view derived from authoritative world state.
SPEC-FR-026: varied frontend capabilities
The product shall permit frontends with different resolutions, colour depths, refresh rates, input methods, and output capabilities.
SPEC-FR-027: desktop reference frontend
V0 shall provide a desktop frontend suitable for developing and validating the pet experience without embedded hardware.
SPEC-FR-028: headless operation
The Pet Core shall be usable without a graphical frontend for automated tests and non visual integrations.
SPEC-FR-029: frontend independence
Changing the frontend shall not require redefining pet behaviour, progression, or persistence semantics.
Not every frontend must expose every product capability.
12. Adapters and environment capabilities
Adapters connect external systems and physical inputs to the Pet Core. Candidate sources include sensors, Git hooks, local applications, mobile activity sources, and future plugins.
The architecture may later distinguish physical adapters from digital adapters. This specification does not require separate interfaces before their shared and distinct needs are understood.
SPEC-FR-030: semantic translation
Adapters shall translate source specific data into semantic actions, activities, environment state, or events understood by the Core.
SPEC-FR-031: no direct state mutation
Adapters shall not directly mutate authoritative pet or world state.
SPEC-FR-032: optional capabilities
The absence of an adapter or environment capability shall not invalidate the world or prevent basic use.
SPEC-FR-033: physical interaction support
The product model should permit physical inputs such as proximity, motion, orientation, touch, and ambient light to influence pet behaviour through adapters.
SPEC-FR-034: digital integration support
The product model should permit digital sources such as Git hooks, focus tools, reading services, or local scripts to report activities through adapters.
SPEC-FR-035: capability discovery
The Core should be able to receive a description of available environment capabilities so that it can avoid selecting interactions that the active environment cannot support.
SPEC-FR-036: input validation
Adapter supplied data shall be validated, bounded, and safe to ignore when unsupported or malformed.
Sensor thresholds, calibration, filtering, and source specific interpretation belong outside domain behaviour. For example, an accelerometer adapter may report a semantic shake event instead of exposing raw hardware readings to the Core.
13. Persistence and ownership
SPEC-FR-037: local persistence
The pet and world state shall be saveable and restorable locally.
SPEC-FR-038: state validation
Invalid, unsupported, or corrupted save data shall be rejected safely instead of being partially applied to the active world.
SPEC-FR-039: format identification
Persisted data shall identify its schema or format version so that compatibility can be handled explicitly.
SPEC-FR-040: minimal personal data
The Pet Core shall not require personally identifying information, location history, private repository access, or continuous behavioural telemetry.
SPEC-FR-041: future transfer
Pet export, device transfer, local network discovery, peer interaction, and synchronisation may be introduced after V1. They are not requirements for V0 or V1.
SPEC-FR-042: device independent identity
The persistence model should avoid defining pet identity as a permanent property of one display or device. This requirement preserves future options without requiring transfer support in the initial versions.
14. Functional summary
The intended product model supports:
- one persistent pet in one world for the initial versions
- deterministic time based world updates
- semantic user actions independent of input hardware
- autonomous pet expressions and activities
- optional real world activity events
- lasting identity development through shared history
- limited maturity without old age or death
- read only presentation state for different frontends
- adapters for physical and digital sources
- local save and restore
- headless execution and automated testing
- future expansion without making network services part of the initial product
The milestone plan determines when each capability becomes deliverable.
15. Non functional requirements
SPEC-NFR-001: portability
The Pet Core shall avoid unnecessary dependencies on operating system services, graphics frameworks, network stacks, threads, and specific hardware platforms.
SPEC-NFR-002: resource awareness
Core data structures and update work shall remain suitable for eventual use on constrained embedded devices. Capacity limits should be known at compile time where practical. State that depends on configuration shall be bounded and prepared during initialisation. Runtime behaviour shall avoid dynamic allocation, unbounded growth, and avoidable setup work.
The initial Core shall use fixed-capacity inline storage or caller-owned storage. This requirement does not permit hidden file scope mutable state. Exact hardware limits will be refined when a target hardware class is selected.
SPEC-NFR-003: testability
Time, randomness, input, persistence, and adapter event delivery shall be controllable in automated tests.
SPEC-NFR-004: robustness
Malformed actions, invalid saves, unexpected time values, and unsupported capabilities shall fail safely without corrupting authoritative state.
SPEC-NFR-005: responsiveness
Normal interaction and presentation shall feel immediate on supported platforms. Missed time processing and adapter input must remain bounded.
SPEC-NFR-006: maintainability
Product rules, frontends, persistence, and adapters shall have explicit boundaries. A platform specific feature must not silently become a Core requirement.
SPEC-NFR-007: compatibility awareness
Public data and API contracts shall evolve deliberately. Compatibility promises for each release belong in milestone and release documentation.
SPEC-NFR-008: privacy
External integrations shall be optional, request the minimum required data, and make their effect on the pet understandable to the user.
SPEC-NFR-009: accessibility
Core interactions should not depend only on colour, audio, precise pointer input, or rapid reaction. Each frontend is responsible for suitable accessible presentation.
SPEC-NFR-010: language and terminology
Code, documentation, public API names, and developer facing text shall use British English. Domain code written in C is expected to use the pet prefix unless architecture documentation defines a more specific internal prefix.
16. Product constraints
- V0 is a software only milestone
- V0 must not depend on purchasing or selecting final hardware
- the reference frontend may use SDL but SDL must not define Core behaviour
- the initial product must remain useful without generative AI
- network connectivity must not be required for Core behaviour or local persistence
- V0 and V1 do not require pet transfer, local network discovery, or synchronisation
- Core interactions must remain representable on limited input hardware
- the world must remain valid after long periods without user interaction
- sensors and digital services must communicate through adapters
- hardware optimisation must not fragment domain behaviour across frontends
- V0 supports one active pet in one world
17. Out of scope for V0 and V1
The following are outside V0 and V1 unless milestone planning explicitly changes the scope:
- generative AI conversation
- voice recognition and speech synthesis
- mandatory accounts
- cloud synchronisation
- transfer of a pet between devices
- local network discovery
- peer interaction between pets
- multiple active pets in one world
- shared household simulation
- public profiles and social networks
- competitive leaderboards
- advertisements and engagement driven monetisation
- permanent death and irreversible neglect mechanics
- real money randomised rewards
- medical and mental health claims
- continuous surveillance of user activity
- final custom hardware and mass production engineering
- support for every proposed frontend
- support for every proposed sensor or integration
- a general purpose task manager, calendar, or habit tracking suite
18. Version vision
This section provides direction. The authoritative deliverables and exit criteria belong in milestones.
V0: software pet foundation
V0 is the first milestone. It validates that a meaningful pet can exist in a software reference application while its world, behaviour, input, presentation state, time handling, and persistence remain independent of SDL and future hardware.
V0 should establish the smallest complete pet loop. It should be possible to run and test the Pet Core without a renderer, observe the pet through a desktop frontend, perform a small set of semantic interactions, see early identity development, and preserve state between sessions.
V0 does not need physical sensors, external digital integrations, multiple pets, networking, or device transfer. Adapter boundaries may be represented and tested without shipping a complete plugin system.
Later direction
Later milestones may introduce richer identity development, real world activity adapters, physical sensor adapters, an embedded frontend, mobile support, and additional content.
Pet transfer, peer discovery, multi pet interaction, shared households, and synchronisation belong after V1 at the earliest. Their inclusion depends on product value and technical cost observed in earlier milestones.
19. Success criteria
The product direction is successful if:
- users perceive the pet as pleasant company rather than another responsibility
- absence does not create guilt or irreversible loss
- the pet develops a recognisable identity through shared history
- maturity provides progression without making the pet old or visually oversized
- real world activities feel acknowledged rather than judged
- sensor and digital integrations can add interaction without entering Core domain logic
- different frontends can present the same product rules
- the software version is worthwhile before custom hardware exists
- the system remains understandable, testable, and portable as content grows
V0 acceptance criteria will be defined in milestones and traced to epics and PBIs.
20. Open questions
The following questions are intentionally unresolved:
- what is the final product name
- what creature and appearance options are available in V0
- how many maturity stages should exist
- what physical size change is acceptable during maturity
- which traits, habits, and visual marks can emerge in V0
- which visual changes happen naturally and which require confirmation
- how can the user hide or manage lasting cosmetic details
- which formative events are sufficient to validate identity development
- which autonomous activities make V0 feel alive
- which real world activity should first validate shared activity
- what form of progression creates attachment without optimisation pressure
- how should long offline periods be summarised
- what are the exact rules for clock and time zone changes
- what persistence format and compatibility promise should V0 provide
- what minimum display and input assumptions should future hardware use
- how much behaviour should be data driven
- should physical and digital adapters use separate interfaces
- how should adapter permissions and event rate limits work
- what parts of the project may become open source
- what commercial model could support plugins or physical products
21. Glossary
Pet: The persistent character that accompanies the user. This is the primary domain term.
Companion: A product description for the role of the pet. It may be used as a synonym in user facing language.
Pet Core: The platform independent domain and simulation layer that owns authoritative behaviour and world state.
World: The authoritative product state containing the pet and its persistent context.
Frontend: A platform specific presentation and direct interaction layer.
Adapter: A boundary that translates physical or digital source data into semantic Core input.
Semantic action: A platform independent representation of user intent.
Activity: A real world or in world action that may involve the user, the pet, or both.
Formative event: A meaningful event that may create a lasting memory, trait, habit, mark, expression, or discovery.
Trait: A lasting tendency that influences pet behaviour without ranking its value.
Visual mark: A lasting appearance detail associated with the pet’s history.
Maturity: Bounded development that increases identity and behavioural richness without requiring old age.
Mood: A temporary and non punitive influence on expression and behaviour.
Discovery: Content revealed through time, interaction, formative events, or shared activity.
Presentation state: A read only frontend view derived from authoritative world state.