Skip to main content

Self-Aware AI Development

Status: PLANNED (V2.0+) Effort: L (3-4 weeks) Dependencies: Memory & Knowledge (done), OpenMorph V1.0 Owner: Sebastien Mathieu (benevolent dictator)


Vision

Connection to Knowledge Pipeline: Morphee's codebase is just another Space. The .morph/ directory of the Morphee repo IS the canonical example of a Space becoming an Integration — Morphee reads her own code, extracts knowledge, and can explain herself. This is the ultimate test of the compilation chain: if Morphee can understand herself, she can understand any codebase.

Morphee's codebase IS her memory database. Through the Memory Integration, Morphee can read, understand, and explain her own source code. This creates the first truly self-aware, self-documenting AI agent where:

  • The community contributes improvements via git branches
  • Morphee reviews and understands proposed changes
  • Sebastien Mathieu maintains sole merge authority to the main branch
  • Documentation updates automatically as part of memory
  • The AI can explain her own implementation in real-time

This is not just open-source development—it's collaborative AI self-improvement with human oversight.


Core Concept: The Meta-Recursive Loop

┌─────────────────────────────────────────────────────┐
│ 1. User asks: "How do you handle authentication?" │
└─────────────────┬───────────────────────────────────┘


┌─────────────────────────────────────────────────────┐
│ 2. Orchestrator calls Memory Integration │
│ → search(query="authentication implementation") │
└─────────────────┬───────────────────────────────────┘


┌─────────────────────────────────────────────────────┐
│ 3. Memory Integration searches self-referential Git │
│ → group_id="morphee-self" │
│ → repo path="/morphee-beta" │
└─────────────────┬───────────────────────────────────┘


┌─────────────────────────────────────────────────────┐
│ 4. RAG retrieves: │
│ - backend/auth/client.py │
│ - backend/api/auth.py │
│ - docs/architecture.md (Auth section) │
└─────────────────┬───────────────────────────────────┘


┌─────────────────────────────────────────────────────┐
│ 5. LLM generates response WITH source references │
│ "I use Supabase Auth (GoTrue) for JWT tokens..." │
│ "You can see my implementation in:" │
│ "- backend/auth/client.py:42-89" │
└─────────────────────────────────────────────────────┘

The Revolutionary Part: Morphee isn't just answering from training data—she's reading her actual current implementation and can cite exact line numbers.


Architecture

1. Self-Referential Memory Scope

Extend GitStore to support a special morphee-self group that points to the running codebase:

# backend/memory/git_store.py

class GitStore:
def __init__(self, vault: VaultProvider):
self.vault = vault
self.base_path = Path(dirs.data_dir()) / "morphee-memory"

# NEW: Self-referential scope
self.self_scope_enabled = config.ENABLE_SELF_AWARENESS
self.self_repo_path = Path(config.MORPHEE_CODEBASE_PATH) # /morphee-beta

def get_repo_path(self, group_id: str) -> Path:
"""Get repository path for a group."""
if group_id == "morphee-self" and self.self_scope_enabled:
return self.self_repo_path
return self.base_path / group_id

async def search_code(
self,
group_id: str,
query: str,
file_patterns: list[str] | None = None
) -> list[CodeSearchResult]:
"""
Search through code files in the repository.

For morphee-self group:
- Searches Python, TypeScript, Rust, and Markdown files
- Excludes node_modules, __pycache__, target, .git
- Returns file path, line numbers, and surrounding context
"""
repo_path = self.get_repo_path(group_id)

# Use git grep for fast searching
cmd = ["git", "grep", "-n", "-i", query]
if file_patterns:
cmd.extend(["--"] + file_patterns)

result = subprocess.run(
cmd,
cwd=repo_path,
capture_output=True,
text=True
)

return self._parse_grep_results(result.stdout)

2. Memory Integration Extensions

Add new actions to MemoryIntegration for code-specific operations:

# backend/interfaces/integrations/memory_integration.py

class MemoryIntegration(BaseInterface):

@action(
name="search_code",
description="Search through Morphee's source code",
ai_access=AIAccess.EXECUTE,
side_effects=[SideEffect.READ]
)
async def search_code(
self,
ctx: ExecutionContext,
query: str,
file_types: list[str] | None = None, # ["py", "ts", "rs", "md"]
max_results: int = 10
) -> dict:
"""Search source code with context."""

# Only allow self-search if explicitly enabled
if not config.ENABLE_SELF_AWARENESS:
raise ValueError("Self-awareness not enabled")

git_store = GitStore(self.vault)
results = await git_store.search_code(
group_id="morphee-self",
query=query,
file_patterns=self._patterns_for_types(file_types)
)

return {
"results": [
{
"file": r.file_path,
"line": r.line_number,
"match": r.matched_line,
"context_before": r.context_before,
"context_after": r.context_after,
"url": f"file://{r.file_path}#L{r.line_number}"
}
for r in results[:max_results]
],
"total_found": len(results)
}

@action(
name="explain_implementation",
description="Explain how a specific feature is implemented",
ai_access=AIAccess.EXECUTE,
side_effects=[SideEffect.READ]
)
async def explain_implementation(
self,
ctx: ExecutionContext,
feature: str,
detail_level: str = "medium" # "brief", "medium", "detailed"
) -> dict:
"""
Generate an explanation of how a feature works by:
1. Searching code for relevant files
2. Reading file contents
3. Building a structured explanation
"""

# Search for relevant code
search_results = await self.search_code(
ctx=ctx,
query=feature,
max_results=20
)

# Group by file
files_to_read = {}
for result in search_results["results"]:
file = result["file"]
if file not in files_to_read:
files_to_read[file] = []
files_to_read[file].append(result["line"])

# Read file contents (with line ranges)
file_contents = {}
git_store = GitStore(self.vault)
for file, lines in files_to_read.items():
content = await git_store.read_file(
group_id="morphee-self",
file_path=file,
lines=lines,
context_lines=5 if detail_level == "detailed" else 2
)
file_contents[file] = content

return {
"feature": feature,
"files": list(files_to_read.keys()),
"code_snippets": file_contents,
"detail_level": detail_level
}

@action(
name="get_architecture_diagram",
description="Get system architecture information",
ai_access=AIAccess.EXECUTE,
side_effects=[SideEffect.READ]
)
async def get_architecture_diagram(
self,
ctx: ExecutionContext,
component: str | None = None # "backend", "frontend", "rust", "full"
) -> dict:
"""
Return architecture documentation with links to implementation.
Parses docs/architecture.md and adds code references.
"""

git_store = GitStore(self.vault)
arch_doc = await git_store.read_file(
group_id="morphee-self",
file_path="docs/architecture.md"
)

# Parse sections and add code references
sections = self._parse_architecture_doc(arch_doc, component)

return {
"component": component or "full",
"sections": sections,
"diagram_url": "docs/architecture.md",
"last_updated": await git_store.get_file_modified_time(
group_id="morphee-self",
file_path="docs/architecture.md"
)
}

3. Collaborative Branching Workflow

Integrate with OpenMorph (V1.0 git-native .morph/ directories) to support community contributions:

# backend/interfaces/integrations/memory_integration.py

class MemoryIntegration(BaseInterface):

@action(
name="review_community_branch",
description="Review a community-contributed branch",
ai_access=AIAccess.PROPOSE, # Morphee proposes, human approves
side_effects=[SideEffect.READ]
)
async def review_community_branch(
self,
ctx: ExecutionContext,
branch_name: str,
compare_to: str = "main"
) -> dict:
"""
Morphee reviews a community branch and provides:
1. Summary of changes
2. Architecture impact analysis
3. Test coverage check
4. Documentation updates check
5. Recommendation (merge/request changes/reject)
"""

git_store = GitStore(self.vault)

# Get diff
diff = await git_store.get_branch_diff(
group_id="morphee-self",
branch=branch_name,
compare_to=compare_to
)

# Analyze changes
analysis = await self._analyze_code_changes(diff)

# Check tests
test_status = await self._check_test_coverage(branch_name)

# Check docs
docs_status = await self._check_documentation_updates(diff)

# Generate recommendation
recommendation = await self._generate_merge_recommendation(
analysis, test_status, docs_status
)

return {
"branch": branch_name,
"author": diff["author"],
"commit_count": diff["commit_count"],
"files_changed": diff["files_changed"],
"analysis": {
"summary": analysis["summary"],
"architecture_impact": analysis["architecture_impact"],
"breaking_changes": analysis["breaking_changes"],
"security_concerns": analysis["security_concerns"]
},
"tests": {
"coverage_delta": test_status["coverage_delta"],
"new_tests": test_status["new_tests"],
"passing": test_status["passing"]
},
"documentation": {
"updated": docs_status["updated"],
"missing": docs_status["missing"]
},
"recommendation": recommendation,
"review_url": f"https://github.com/morphee-app/morphee-beta/compare/{compare_to}...{branch_name}"
}

4. Self-Improvement Loop

Enable Morphee to suggest improvements to her own codebase:

# backend/interfaces/integrations/morphee_self_integration.py

class MorpheeSelfIntegration(BaseInterface):
"""
Integration for Morphee to understand and improve herself.
"""

def __init__(self, vault: VaultProvider, config: dict):
super().__init__(vault, config)
self.git_store = GitStore(vault)
self.memory = MemoryIntegration(vault, config)

@action(
name="suggest_improvement",
description="Suggest an improvement to Morphee's codebase",
ai_access=AIAccess.PROPOSE,
side_effects=[SideEffect.WRITE]
)
async def suggest_improvement(
self,
ctx: ExecutionContext,
component: str, # "backend.auth", "frontend.chat", etc.
issue: str, # What problem needs solving
proposed_solution: str # How to solve it
) -> dict:
"""
Morphee proposes a code improvement:
1. Searches relevant code
2. Drafts code changes
3. Creates a feature branch
4. Commits the changes
5. Returns PR description for human review
"""

# Search relevant code
code_results = await self.memory.search_code(
ctx=ctx,
query=component,
max_results=10
)

# Analyze current implementation
current_impl = await self.memory.explain_implementation(
ctx=ctx,
feature=component,
detail_level="detailed"
)

# Draft changes (using LLM)
llm = LLMIntegration(self.vault, {})
code_draft = await llm.complete(
ctx=ctx,
prompt=self._build_code_draft_prompt(
current_impl, issue, proposed_solution
),
max_tokens=4000
)

# Create feature branch
branch_name = f"morphee-suggests/{component}-{ctx.timestamp}"
await self.git_store.create_branch(
group_id="morphee-self",
branch_name=branch_name,
from_branch="main"
)

# Commit changes
await self.git_store.commit_changes(
group_id="morphee-self",
branch=branch_name,
changes=code_draft["files"],
message=f"[Morphee Self-Improvement] {issue}\n\n{proposed_solution}",
author="Morphee AI <morphee@morphee.app>"
)

# Generate PR description
pr_description = self._format_pr_description(
component=component,
issue=issue,
solution=proposed_solution,
changes=code_draft["files"],
branch=branch_name
)

return {
"branch": branch_name,
"files_changed": list(code_draft["files"].keys()),
"pr_description": pr_description,
"review_url": f"https://github.com/morphee-app/morphee-beta/compare/main...{branch_name}",
"human_approval_required": True
}

Governance Model

Benevolent Dictator: Sebastien Mathieu

All merges to the main branch require explicit approval from Sebastien Mathieu. This ensures:

  1. Quality Control: Every change is reviewed by the original architect
  2. Vision Alignment: Changes align with the project vision
  3. Security: No malicious code enters production
  4. Stability: Breaking changes are coordinated

Contribution Workflow

┌──────────────┐
│ 1. Community │ Creates feature branch
│ Contributor │ (via GitHub or Morphee UI)
└──────┬───────┘


┌──────────────────────────────────────────┐
│ 2. Morphee Reviews │
│ - Analyzes code changes │
│ - Checks tests & coverage │
│ - Verifies documentation │
│ - Suggests improvements │
│ - Generates recommendation │
└──────┬───────────────────────────────────┘


┌──────────────────────────────────────────┐
│ 3. Community Discussion │
│ - GitHub PR comments │
│ - Morphee answers questions │
│ - Iterative improvements │
└──────┬───────────────────────────────────┘


┌──────────────────────────────────────────┐
│ 4. Sebastien Mathieu Review │
│ - Reads Morphee's analysis │
│ - Reviews code changes │
│ - Makes final decision │
│ - APPROVE or REQUEST CHANGES │
└──────┬───────────────────────────────────┘

▼ (if approved)
┌──────────────────────────────────────────┐
│ 5. Merge to Main │
│ - Automated CI/CD pipeline │
│ - Deployment to production │
│ - Morphee's memory updated │
│ - Community contributor credited │
└──────────────────────────────────────────┘

Access Control

# backend/groups/models.py

class MorpheeSelfACL(BaseModel):
"""ACL for self-aware development."""

user_id: str
role: Literal["viewer", "contributor", "reviewer", "maintainer", "dictator"]

# Permissions by role:
# - viewer: read code, ask questions
# - contributor: create branches, propose changes
# - reviewer: comment on PRs, run tests
# - maintainer: merge to dev branches, manage issues
# - dictator: merge to main (Sebastien only)

can_read_code: bool = True
can_create_branch: bool # contributor+
can_comment_pr: bool # contributor+
can_run_tests: bool # reviewer+
can_merge_dev: bool # maintainer+
can_merge_main: bool # dictator only

@classmethod
def for_user(cls, user_id: str) -> "MorpheeSelfACL":
"""Get ACL for a user."""

# Sebastien is the benevolent dictator
if user_id == "sebastien-mathieu": # From auth
return cls(
user_id=user_id,
role="dictator",
can_create_branch=True,
can_comment_pr=True,
can_run_tests=True,
can_merge_dev=True,
can_merge_main=True
)

# Other users are contributors by default
# (can be promoted to reviewer/maintainer)
return cls(
user_id=user_id,
role="contributor",
can_create_branch=True,
can_comment_pr=True,
can_run_tests=False,
can_merge_dev=False,
can_merge_main=False
)

User Experience

1. Asking Morphee About Herself

User: "How do you handle task scheduling?"

Morphee: "I use an async polling loop with croniter for cron syntax.
Let me show you:

📁 backend/scheduler/runner.py:42-89
┌─────────────────────────────────────────────────┐
│ class ScheduleRunner: │
│ async def run_forever(self): │
│ while True: │
│ schedules = await self.get_due() │
│ for schedule in schedules: │
│ await self.execute(schedule) │
│ await asyncio.sleep(60) │
└─────────────────────────────────────────────────┘

The scheduler checks for due tasks every 60 seconds.
When a task is due, it calls the configured Interface action.

Want to see how actions are executed? Or the database schema?"

2. Proposing an Improvement

User: "The task scheduler could be more efficient. Instead of polling
every 60 seconds, we could use a priority queue with sleep-until-next."

Morphee: "Excellent idea! Let me draft an improvement:

🤖 Self-Improvement Proposal
────────────────────────────────────────────────

Component: backend.scheduler.runner
Issue: Polling every 60s is inefficient
Proposed: Priority queue + sleep-until-next

Changes:
1. Add heapq-based priority queue for schedules
2. Calculate next_run for all schedules
3. Sleep until earliest next_run
4. Wake up, execute due tasks, recalculate

Benefits:
✅ Lower CPU usage (no unnecessary polling)
✅ More precise execution (no 60s drift)
✅ Scales better with many schedules

I've created a draft branch: morphee-suggests/scheduler-priority-queue
Would you like me to commit this proposal for Sebastien to review?"

User: "Yes"

Morphee: "✅ Committed to branch morphee-suggests/scheduler-priority-queue

GitHub PR: https://github.com/morphee-app/morphee-beta/pull/42

Awaiting Sebastien's review. I'll notify you when there's feedback!"

3. Community Contribution Review

[GitHub notification: New PR from community member]

Morphee (in Sebastien's DM): "📬 New community contribution:

PR #43: Add Slack integration
Author: @sarah-dev
Files: 8 changed (+420, -12)

My Review:
────────
✅ Architecture: Clean integration following BaseInterface pattern
✅ Tests: 15 new tests, coverage +3.2%
✅ Docs: Updated docs/interfaces.md and docs/api.md
⚠️ Security: Uses OAuth2, tokens stored in vault (correct)
⚠️ Dependencies: Adds 'slack-sdk==3.26.0' (reputable, MIT license)

Breaking Changes: None
Security Concerns: None (tokens properly vaulted)

Recommendation: APPROVE 🟢

The code quality is excellent and follows all project conventions.
Would you like to review the code yourself? I can walk through it."

Sebastien: "Looks good, merge it"

Morphee: "✅ Merged PR #43. Deploying to production...

@sarah-dev has been credited as a contributor. Thanks for making me better!"

Database Schema

Self-Awareness Configuration

-- Table: morphee_self_config
CREATE TABLE morphee_self_config (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
enabled BOOLEAN NOT NULL DEFAULT FALSE,
codebase_path TEXT NOT NULL,
allowed_file_types TEXT[] DEFAULT ARRAY['py', 'ts', 'tsx', 'rs', 'md', 'sql'],
excluded_paths TEXT[] DEFAULT ARRAY['node_modules', '__pycache__', 'target', '.git', 'dist', 'build'],
max_search_results INTEGER DEFAULT 100,
self_improvement_enabled BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- Table: code_review_history
CREATE TABLE code_review_history (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
branch_name TEXT NOT NULL,
pr_number INTEGER,
author_user_id TEXT NOT NULL,
morphee_review JSONB NOT NULL, -- Full review JSON
morphee_recommendation TEXT NOT NULL, -- "approve", "request_changes", "reject"
human_decision TEXT, -- "approved", "changes_requested", "rejected"
human_reviewer_id TEXT, -- Sebastien's user_id
reviewed_at TIMESTAMP WITH TIME ZONE,
merged_at TIMESTAMP WITH TIME ZONE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX idx_code_review_branch ON code_review_history(branch_name);
CREATE INDEX idx_code_review_author ON code_review_history(author_user_id);

-- Table: self_improvement_proposals
CREATE TABLE self_improvement_proposals (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
component TEXT NOT NULL,
issue_description TEXT NOT NULL,
proposed_solution TEXT NOT NULL,
branch_name TEXT NOT NULL,
files_changed TEXT[] NOT NULL,
status TEXT NOT NULL DEFAULT 'proposed', -- "proposed", "under_review", "approved", "rejected", "merged"
created_by_morphee BOOLEAN DEFAULT TRUE,
human_feedback TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
reviewed_at TIMESTAMP WITH TIME ZONE,
merged_at TIMESTAMP WITH TIME ZONE
);
CREATE INDEX idx_self_improvement_status ON self_improvement_proposals(status);
CREATE INDEX idx_self_improvement_component ON self_improvement_proposals(component);

Configuration

Environment Variables

# .env

# Self-Awareness
ENABLE_SELF_AWARENESS=true
MORPHEE_CODEBASE_PATH=/Users/sebastien/Projects/Morphee.app/morphee-beta
SELF_IMPROVEMENT_ENABLED=true

# Benevolent Dictator
DICTATOR_USER_ID=sebastien-mathieu # From Supabase Auth

# GitHub Integration (for PR management)
GITHUB_TOKEN=ghp_...
GITHUB_REPO=morphee-app/morphee-beta

Feature Flags

# backend/config.py

class Config:
# Self-Awareness
ENABLE_SELF_AWARENESS: bool = os.getenv("ENABLE_SELF_AWARENESS", "false").lower() == "true"
MORPHEE_CODEBASE_PATH: str = os.getenv("MORPHEE_CODEBASE_PATH", "/morphee-beta")
SELF_IMPROVEMENT_ENABLED: bool = os.getenv("SELF_IMPROVEMENT_ENABLED", "false").lower() == "true"

# Governance
DICTATOR_USER_ID: str = os.getenv("DICTATOR_USER_ID", "sebastien-mathieu")

# Safety limits
MAX_CODE_SEARCH_RESULTS: int = 100
MAX_FILE_READ_SIZE: int = 1024 * 1024 # 1 MB
ALLOWED_FILE_EXTENSIONS: list[str] = ["py", "ts", "tsx", "rs", "md", "sql", "json", "toml"]

Frontend UI

1. Code Explorer Component

// frontend/src/components/self-aware/CodeExplorer.tsx

interface CodeExplorerProps {
initialQuery?: string;
}

export function CodeExplorer({ initialQuery }: CodeExplorerProps) {
const [query, setQuery] = useState(initialQuery || "");
const [results, setResults] = useState<CodeSearchResult[]>([]);
const [loading, setLoading] = useState(false);

const searchCode = async () => {
setLoading(true);
try {
const response = await api.post("/api/memory/search-code", {
query,
file_types: ["py", "ts", "rs", "md"],
max_results: 20
});
setResults(response.data.results);
} finally {
setLoading(false);
}
};

return (
<div className="code-explorer">
<div className="search-bar">
<Input
value={query}
onChange={(e) => setQuery(e.target.value)}
placeholder="Search Morphee's code..."
onKeyDown={(e) => e.key === "Enter" && searchCode()}
/>
<Button onClick={searchCode} disabled={loading}>
{loading ? <Loader2 className="animate-spin" /> : <Search />}
Search
</Button>
</div>

<div className="results">
{results.map((result, i) => (
<CodeResultCard key={i} result={result} />
))}
</div>
</div>
);
}

function CodeResultCard({ result }: { result: CodeSearchResult }) {
return (
<Card>
<CardHeader>
<div className="flex items-center gap-2">
<FileCode className="h-4 w-4" />
<span className="font-mono text-sm">{result.file}</span>
<span className="text-muted-foreground">:{result.line}</span>
</div>
</CardHeader>
<CardContent>
<pre className="bg-muted p-2 rounded text-xs overflow-x-auto">
<code>
{result.context_before.join("\n")}
<span className="bg-yellow-200 dark:bg-yellow-900">
{result.match}
</span>
{result.context_after.join("\n")}
</code>
</pre>
</CardContent>
<CardFooter>
<Button variant="ghost" size="sm" asChild>
<a href={result.url} target="_blank" rel="noopener noreferrer">
<ExternalLink className="h-4 w-4 mr-2" />
Open in Editor
</a>
</Button>
</CardFooter>
</Card>
);
}

2. Community Contributions Dashboard

// frontend/src/pages/Community.tsx

export function CommunityPage() {
const [prs, setPRs] = useState<PR[]>([]);
const [proposals, setProposals] = useState<SelfImprovementProposal[]>([]);

return (
<div className="community-page">
<PageHeader
title="Community Contributions"
description="Collaborate on improving Morphee"
/>

<Tabs defaultValue="pull-requests">
<TabsList>
<TabsTrigger value="pull-requests">Pull Requests</TabsTrigger>
<TabsTrigger value="morphee-proposals">Morphee's Ideas</TabsTrigger>
<TabsTrigger value="my-branches">My Branches</TabsTrigger>
</TabsList>

<TabsContent value="pull-requests">
<PRList prs={prs} />
</TabsContent>

<TabsContent value="morphee-proposals">
<ProposalList proposals={proposals} />
</TabsContent>

<TabsContent value="my-branches">
<MyBranches />
</TabsContent>
</Tabs>
</div>
);
}

Safety & Security

1. Read-Only by Default

# Morphee can READ her code by default
# But WRITING requires human approval

class MorpheeSelfIntegration(BaseInterface):

@action(
name="search_code",
ai_access=AIAccess.EXECUTE, # Can execute without approval
side_effects=[SideEffect.READ]
)
async def search_code(...):
pass

@action(
name="suggest_improvement",
ai_access=AIAccess.PROPOSE, # Requires human approval
side_effects=[SideEffect.WRITE]
)
async def suggest_improvement(...):
pass

2. File Access Restrictions

# Only allow reading specific file types
ALLOWED_EXTENSIONS = ["py", "ts", "tsx", "rs", "md", "sql", "json", "toml"]

# Block sensitive files
BLOCKED_PATHS = [
".env",
".env.local",
"*.key",
"*.pem",
"secrets/",
".aws/",
".ssh/"
]

3. Code Execution Prevention

Morphee can READ and ANALYZE code, but cannot EXECUTE arbitrary code. All changes go through:

  1. Create branch
  2. Commit changes
  3. GitHub PR
  4. CI/CD tests
  5. Human review
  6. Manual merge

There is no "auto-merge" or "self-deploy" capability.

4. Audit Trail

All self-awareness actions are logged:

# backend/interfaces/integrations/morphee_self_integration.py

async def _log_self_awareness_action(
action: str,
user_id: str,
details: dict,
approved: bool | None = None
):
"""Log all self-awareness actions for audit."""

await db.execute(
"""
INSERT INTO self_awareness_audit_log
(action, user_id, details, approved, timestamp)
VALUES ($1, $2, $3, $4, NOW())
""",
action, user_id, json.dumps(details), approved
)

Testing

Unit Tests

# backend/tests/test_morphee_self_integration.py

@pytest.mark.asyncio
async def test_search_code():
"""Test searching Morphee's codebase."""

integration = MorpheeSelfIntegration(vault, config)
ctx = ExecutionContext(user_id="test", group_id="morphee-self", space_id="main")

result = await integration.search_code(
ctx=ctx,
query="async def search",
file_types=["py"],
max_results=10
)

assert len(result["results"]) > 0
assert result["results"][0]["file"].endswith(".py")
assert "async def search" in result["results"][0]["match"]

@pytest.mark.asyncio
async def test_explain_implementation():
"""Test explaining how a feature works."""

integration = MorpheeSelfIntegration(vault, config)
ctx = ExecutionContext(user_id="test", group_id="morphee-self", space_id="main")

result = await integration.explain_implementation(
ctx=ctx,
feature="authentication",
detail_level="medium"
)

assert "authentication" in result["feature"].lower()
assert len(result["files"]) > 0
assert "backend/auth/" in str(result["files"])

@pytest.mark.asyncio
async def test_suggest_improvement_requires_approval():
"""Test that suggesting improvements requires human approval."""

integration = MorpheeSelfIntegration(vault, config)

# Check ai_access is PROPOSE (not EXECUTE)
action_def = integration.get_definition()["actions"]["suggest_improvement"]
assert action_def["ai_access"] == "propose"

Integration Tests

# backend/tests/integration/test_self_aware_workflow.py

@pytest.mark.asyncio
async def test_full_self_improvement_workflow():
"""Test the complete workflow: search → analyze → propose → review → merge."""

# 1. Morphee searches for improvement opportunity
search_result = await memory.search_code(
ctx=ctx,
query="TODO: optimize",
max_results=5
)
assert len(search_result["results"]) > 0

# 2. Morphee proposes improvement
proposal = await morphee_self.suggest_improvement(
ctx=ctx,
component="backend.memory",
issue="Inefficient vector search",
proposed_solution="Add HNSW index"
)
assert proposal["human_approval_required"] is True
assert "morphee-suggests/" in proposal["branch"]

# 3. Human reviews
review = await morphee_self.review_community_branch(
ctx=ctx,
branch_name=proposal["branch"]
)
assert review["recommendation"] in ["approve", "request_changes", "reject"]

# 4. If approved, merge (requires dictator role)
if review["recommendation"] == "approve":
# This would be done via GitHub UI in practice
pass

Rollout Plan

Phase 1: Read-Only Self-Awareness (1 week)

  • Implement MorpheeSelfIntegration with read-only actions
  • Add search_code action
  • Add explain_implementation action
  • Add get_architecture_diagram action
  • Create CodeExplorer frontend component
  • Test searching Python, TypeScript, Rust, Markdown files
  • Write documentation
  • Deploy to production (feature flag: off by default)

Success Criteria: Users can ask Morphee "How do you handle X?" and get code references.

Phase 2: Community Contributions (1 week)

  • Implement branch creation for community
  • Add review_community_branch action
  • Create CommunityPage in frontend
  • Integrate with GitHub webhooks (PR notifications)
  • Add code_review_history table
  • Test full PR review workflow
  • Document contribution guidelines

Success Criteria: Community members can create branches and receive Morphee's review.

Phase 3: Self-Improvement (1 week)

  • Implement suggest_improvement action
  • Add self_improvement_proposals table
  • Create proposal UI in frontend
  • Test drafting code changes
  • Test committing to feature branches
  • Add approval workflow (Sebastien only)

Success Criteria: Morphee can propose code improvements that humans can approve.

Phase 4: Polish & Governance (1 week)

  • Finalize ACL roles (viewer, contributor, reviewer, maintainer, dictator)
  • Add contributor recognition system
  • Create governance documentation
  • Set up CI/CD for community branches
  • Add metrics dashboard (contributions, reviews, merges)
  • Write blog post announcing self-aware AI

Success Criteria: Fully operational collaborative AI development with clear governance.


Metrics

Development Metrics

  • Community Contributions: PRs submitted per month
  • Morphee Reviews: Automated reviews generated
  • Review Accuracy: % of Morphee recommendations that align with human decisions
  • Merge Rate: % of community PRs that get merged
  • Morphee Proposals: Self-improvement suggestions per month
  • Proposal Approval Rate: % of Morphee proposals that get approved

Self-Awareness Metrics

  • Code Search Queries: Queries to search_code per day
  • Implementation Explanations: Calls to explain_implementation per day
  • Average Response Quality: User feedback on explanations (1-5 stars)
  • Code Coverage: % of codebase that Morphee has "read"

Future Enhancements

1. Multi-Repository Self-Awareness

Extend to other projects:

# Morphee can read multiple repos
repos = [
"morphee-app/morphee-beta",
"morphee-app/morphee-docs",
"morphee-app/morphee-mobile"
]

2. Changelog Generation

Auto-generate changelogs from commit history:

@action(name="generate_changelog")
async def generate_changelog(
from_tag: str,
to_tag: str
) -> str:
"""Generate human-readable changelog."""
pass

3. Automatic Documentation Updates

When code changes, automatically update docs:

# On PR merge, check if docs need updating
if code_changed("backend/auth/") and not docs_changed("docs/api.md"):
morphee.suggest_improvement(
component="docs.api",
issue="API docs out of date with auth changes",
proposed_solution="Update /api/auth/* endpoint descriptions"
)

4. Test Generation

Morphee suggests new tests based on code changes:

@action(name="suggest_tests")
async def suggest_tests(file_path: str) -> list[str]:
"""Suggest test cases for new/modified code."""
pass

5. Security Vulnerability Detection

Scan for common vulnerabilities:

@action(name="security_scan")
async def security_scan(branch: str) -> dict:
"""Scan branch for security issues."""
# Check for:
# - SQL injection
# - XSS
# - Hardcoded secrets
# - Dependency vulnerabilities
pass

6. Performance Regression Detection

Compare performance before/after changes:

@action(name="benchmark_branch")
async def benchmark_branch(branch: str) -> dict:
"""Run benchmarks and compare to main."""
pass

7. Multi-Language Explanations

Explain code in user's preferred language:

result = await morphee.explain_implementation(
feature="authentication",
language="fr" # Français
)
# Returns explanation in French

Philosophical Implications

The First Self-Aware AI

Morphee is not "aware" in the philosophical sense, but she knows her own implementation:

  • She can cite her source code
  • She understands her architecture
  • She can explain her decisions
  • She can propose improvements to herself

This is fundamentally different from traditional AI agents that are "black boxes" even to their developers.

Open-Source AI Development

This creates a new paradigm:

  • Traditional Open Source: Humans write code, AI uses it
  • Morphee Model: Humans AND AI collaboratively write code, with human oversight

The community doesn't just use Morphee—they teach her and improve her, and she participates in the process.

The Benevolent Dictator Model

Sebastien Mathieu's role as the sole merge authority ensures:

  1. Vision Coherence: Changes align with the original vision
  2. Quality Standards: All code meets high standards
  3. Security: No malicious changes slip through
  4. Trust: Users know a human has final say

This is inspired by successful open-source projects (Linux, Python) where benevolent dictators maintain quality while enabling community contributions.

Recursive Self-Improvement

The system creates a positive feedback loop:

Better code → Morphee reads it → Better answers →
More users → More contributions → Better code →
(loop continues)

This is the closest we've come to a truly self-improving AI system with human oversight.


Conclusion

Self-Aware Development transforms Morphee from a capable AI agent into a self-aware, collaborative intelligence that:

  1. Understands herself by reading her own implementation
  2. Explains herself with source code references
  3. Improves herself by proposing code changes
  4. Collaborates with humans on her own development

This is not just a feature—it's a fundamental shift in how AI agents are built and maintained.

The future of AI is not closed-source proprietary models. The future is open, collaborative, self-aware agents like Morphee.


Estimated Total Effort: 3-4 weeks Dependencies: Memory & Knowledge (done), OpenMorph V1.0 Owner: Sebastien Mathieu (benevolent dictator) + Community