Developer Experience

Developer experience, project memory, and process ergonomics.

Last Updated: 2026-02-15

Level 0: Stakeholder Needs (WHY)

Need: Maintain Project Memory NEED_DX_PROJECT_MEMORY
status: implemented
tags: devexperience, agent, memory
priority: high

As a developer, I want to have project knowledge automatically maintained, so that new Copilot sessions have full context.

Acceptance Scenarios:

  1. Given I add a new pattern, When memory agent runs, Then copilot-instructions.md is updated

  2. Given structure changes, When agent analyzes, Then outdated info is removed

  3. Given a new session starts, When Copilot reads instructions, Then it has context

Need: Consistent Agent Interaction via Selection Menus NEED_DX_AGENT_INTERACTION
status: implemented
tags: devexperience, agent, ux, developer-experience
priority: high

As a developer, I want to have agents present choices using VS Code’s native selection menus (quick-pick UI) instead of plain-text questions, so that I can respond efficiently with a single click and have a consistent interaction experience across all agents.

Acceptance Scenarios:

  1. Given an agent needs my decision, When it presents choices, Then I see a VS Code selection menu (not plain text)

  2. Given I’m at a workflow transition, When the agent asks what to do next, Then I can click an option instead of typing

  3. Given any ubFlow agent presents choices, When I compare interactions, Then all agents use the same selection mechanism

Need: Consistent MCP Tool Usage for Traceability NEED_DX_MCP_INTEGRATION
status: draft
tags: devexperience, mcp, traceability, consistency
priority: high

As a developer working with ubFlow, I want to use consistent, well-integrated MCP tools for all Sphinx-Needs queries, so that I have a single, reliable approach without confusion between legacy scripts and modern tools.

Acceptance Scenarios:

  1. Given I need to query need links, When I check documentation, Then all examples use MCP tools (not Python scripts)

  2. Given I’m using an agent, When it queries traceability, Then it uses ubCode MCP tools consistently

  3. Given I’m looking for help, When I read docs, Then zero references to get_need_links.py exist (except archives)

Level 1: Requirements (WHAT)

Software Requirement: Project Memory Agent REQ_DX_MEMORY_AGENT
status: implemented
tags: devexperience, agent, memory
priority: high

Description: ubFlow SHALL provide a memory agent that maintains the project’s copilot-instructions.md as the codebase evolves.

Rationale: Long-term project memory ensures new Copilot sessions have full context.

Acceptance Criteria:

  • AC-1: Agent detects changes in project structure

  • AC-2: Agent updates copilot-instructions.md

  • AC-3: Agent removes outdated information

  • AC-4: Agent documents new patterns and conventions

Software Requirement: Agent Selection Menus for User Choices REQ_DX_AGENT_SELECTION_MENUS
status: implemented
tags: devexperience, agent, ux, developer-experience
priority: high

Description: ubFlow agents SHALL use VS Code’s ask_questions tool (quick-pick selection menus) when presenting choices to the user during a session.

Rationale: Free-text choices require users to type or copy responses, and the presentation varies between agents. Using the native selection menu provides a consistent, single-click interaction pattern across all agents.

Acceptance Criteria:

  • AC-1: Agents SHALL use the ask_questions tool when presenting 2 or more options to the user

  • AC-2: Each option SHALL include a label and a brief description

  • AC-3: All ubFlow agents SHALL follow the same interaction pattern for presenting choices

  • AC-4: Free-form input SHALL be enabled (allowFreeformInput) when the user may want to provide a custom response beyond the listed options

Software Requirement: Shared Skill Files for Agent Patterns REQ_DX_AGENT_SKILL_FILES
status: implemented
tags: devexperience, agent, ux, developer-experience, skills
priority: high

Description: ubFlow SHALL provide a mechanism for consolidating reusable interaction patterns into shared skill files that are available to all agents.

Rationale: Without consolidation, reusable patterns (like how to present choices) must be duplicated across agent files. Skill files define the pattern once and make it available to all agents through a single reference.

Acceptance Criteria:

  • AC-1: Reusable agent patterns SHALL be defined in dedicated skill files

  • AC-2: Skill files SHALL be accessible to all agents without duplication

  • AC-3: Adding a new skill SHALL require minimal configuration (single reference point)

Software Requirement: Documentation MCP Migration REQ_DOC_MCP_MIGRATION
status: draft
tags: documentation, mcp, migration, consistency
priority: high
links outgoing: NEED_DX_MCP_INTEGRATION

Description: ubFlow documentation SHALL use ubCode MCP Server tools exclusively for all Sphinx-Needs traceability query examples, removing all references to the legacy get_need_links.py Python script.

Rationale: Documentation is the primary way developers learn ubFlow patterns. Consistent, accurate examples using MCP tools prevent confusion and ensure better developer experience.

Acceptance Criteria:

  • AC-1: Zero references to get_need_links.py in active documentation files

  • AC-2: All traceability examples use MCP tools

  • AC-3: MCP tool usage is consistent across all documentation

  • AC-4: Script→MCP mapping is documented

  • AC-5: Documentation builds successfully without errors

Verification Method:

  • Automated: grep -r "get_need_links.py" docs/ .github/copilot-instructions.md --exclude-dir=_archive

  • Automated: uv run sphinx-build -b html docs docs/_build/html

  • Manual: Review updated documentation for correctness

Software Requirement: Agent Files MCP Migration REQ_AGENT_MCP_MIGRATION
status: draft
tags: agent, mcp, migration, consistency
priority: high
links outgoing: NEED_DX_MCP_INTEGRATION

Description: ubFlow agent definition files SHALL use ubCode MCP Server tools exclusively for all Sphinx-Needs traceability operations, removing all references to executing the legacy get_need_links.py Python script via terminal commands.

Rationale: Agents are AI-driven and benefit from direct MCP tool integration. Using MCP tools instead of terminal commands provides better error handling, type safety, and integration with the VS Code environment.

Acceptance Criteria:

  • AC-1: Zero references to python scripts/python/get_need_links.py in active agents

  • AC-2: All traceability operations use MCP tool function calls

  • AC-3: MCP tool usage is consistent across all agents

  • AC-4: Agent instructions are clear and actionable

  • AC-5: No broken tool references

Verification Method:

  • Automated: grep -r "scripts/python/get_need_links.py" .github/agents/ --exclude-dir=_archive

  • Manual: Review each agent file for correctness

  • Functional: Test agent with actual workflow

Level 2: Design (HOW)

Memory Agent

Software Detailed Design: Memory Update Process SPEC_MEM_UPDATE_PROCESS
status: implemented
tags: devexperience, memory, agent, workflow
links outgoing: REQ_DX_MEMORY_AGENT

Design: The Memory Agent follows a three-step process to keep copilot-instructions.md synchronized with the codebase.

Core Principle: If an agent can learn it by reading an existing file, don’t put it in copilot-instructions.md. The file contains only what agents cannot easily discover from the codebase.

Step 1 — Gather Current State:

  • git log --oneline main..HEAD or recent commits on main

  • copilot-instructions.md — what’s already documented

  • Directory structure — has anything moved?

  • New agent/skill/prompt files — do naming conventions need updating?

Step 2 — Identify Gaps:

Compare documented state vs reality. Focus on:

  • Structure: Did directories change?

  • Conventions: New naming patterns or file types?

  • Workflows: Changed agent chain or handoffs?

  • Commands: Build or query commands changed?

  • Tech stack: New tools?

  • Version: Has version.json been bumped?

Before adding anything, ask: “Can the agent discover this by reading an existing file?” — if yes, don’t add (at most add a one-line pointer).

Step 3 — Apply Updates:

Add, modify, or remove sections. Commit the change.

Invocation: Invoked after verify in the change workflow. Hands off to change (for another change) or release (to bundle into a release).

File: .github/agents/ubFlow.memory.agent.md

Software Detailed Design: Memory Content Rules SPEC_MEM_CONTENT_CATEGORIES
status: implemented
tags: devexperience, memory, content, structure
links outgoing: REQ_DX_MEMORY_AGENT

Design: The Memory Agent decides what belongs in copilot-instructions.md using a single criterion: discoverability.

Include (not discoverable from code):

  • Project structure and mental map (directory tree with folder purposes)

  • Naming conventions and ID schemes (hard to infer from files alone)

  • Workflow chains and agent handoffs (cross-cutting, not in any one file)

  • Build commands (agents need these before reading docs)

  • Specification hierarchy and theme abbreviations

Exclude (discoverable from existing files):

  • ❌ Directive format examples (visible in every RST file)

  • ❌ Status value lists (visible in specs)

  • ❌ RST formatting rules (follow existing files)

  • ❌ Dependency lists (agents can read requirements.txt)

  • ❌ Installation/release workflow details (each agent has its own file)

  • ❌ Key files table (discoverable from project structure tree)

  • ❌ Element counts or current state checklists (stale within one commit)

  • ❌ Per-file listings inside directory levels

  • ❌ Duplicate info — link to the source instead

Rule of thumb: If it changes every commit, it shouldn’t be documented. If another file already says it, link don’t copy.

Software Detailed Design: copilot-instructions.md Structure SPEC_MEM_INSTRUCTIONS_STRUCTURE
status: implemented
tags: devexperience, memory, structure, template
links outgoing: REQ_DX_MEMORY_AGENT

Design: The Memory Agent maintains a fixed set of sections in copilot-instructions.md. Resist adding new top-level sections.

Target Structure:

# [Project Name] - Copilot Instructions

## Project Overview          — 3-5 lines, version
## Tech Stack                — bullet list, no versions
## Project Structure         — directory tree (no per-file listings)
## Specification Hierarchy   — 3-level diagram with prefixes
## Agent System              — table: agent → purpose
## Sphinx-Needs Conventions  — ID prefixes, theme abbreviations
## Development Commands      — build + query commands only
## Development Workflow      — agent chain diagram, one-liners
## Patterns & Conventions    — file organization, file naming, authoring
## Agent Interaction         — skill file activation reference

Size target: ~150–180 lines. If it grows past 200, something should be cut.

Location: .github/copilot-instructions.md

Update Frequency: After each verify pass or on-demand when significant structural changes occur.

Traceability

Stakeholder Needs

ID

Title

Status

Priority

NEED_DX_AGENT_INTERACTION

Consistent Agent Interaction via Selection Menus

implemented

high

NEED_DX_MCP_INTEGRATION

Consistent MCP Tool Usage for Traceability

draft

high

NEED_DX_PROJECT_MEMORY

Maintain Project Memory

implemented

high

Requirements

ID

Title

Status

Tags

REQ_DX_AGENT_SELECTION_MENUS

Agent Selection Menus for User Choices

implemented

devexperience; agent; ux; developer-experience

REQ_DX_AGENT_SKILL_FILES

Shared Skill Files for Agent Patterns

implemented

devexperience; agent; ux; developer-experience; skills

REQ_DX_MEMORY_AGENT

Project Memory Agent

implemented

devexperience; agent; memory

Design Specifications

ID

Title

Status

Links

SPEC_MEM_CONTENT_CATEGORIES

Memory Content Rules

implemented

SPEC_MEM_INSTRUCTIONS_STRUCTURE

copilot-instructions.md Structure

implemented

SPEC_MEM_UPDATE_PROCESS

Memory Update Process

implemented