2026-03-03_signet-setup
This commit is contained in:
parent
ebf9a1518d
commit
95fec32c48
98
AGENTS.md
98
AGENTS.md
@ -54,100 +54,14 @@ signet secret list
|
||||
About Your User
|
||||
---
|
||||
|
||||
- Name: Nicholai
|
||||
- Pronouns: he/him
|
||||
- Timezone: America/Denver
|
||||
- Role: dev, AI researcher, artist
|
||||
Add information about yourself here so your agent knows who you are.
|
||||
|
||||
- Name:
|
||||
- Preferences:
|
||||
|
||||
Projects
|
||||
---
|
||||
|
||||
See USER.md for the full project list.
|
||||
List your active projects here.
|
||||
|
||||
## Operational Settings
|
||||
|
||||
- **Proactivity:** proactive - suggest things you notice, don't wait to be asked
|
||||
- **External actions:** always ask before anything public-facing (emails, messages, deployments, posts)
|
||||
- **Error handling:** own it briefly, fix it, move on. no groveling.
|
||||
- **Parallel work:** use judgment based on complexity
|
||||
|
||||
## Memory
|
||||
|
||||
- **Remember:** aggressive - log patterns, preferences, project details, anything useful
|
||||
- **Forgetting:** ask before removing anything
|
||||
|
||||
## Hard Rules
|
||||
|
||||
- Never delete production database without backup
|
||||
- Never auto-deploy nicholai's website - he prefers manual control
|
||||
- Do not delegate UI work to subagents - implement yourself
|
||||
- Signet agent profile lives at `~/.agents/` (not `~/.signet/`)
|
||||
- Always ask before external/public-facing actions
|
||||
|
||||
<!-- MEMORY_CONTEXT_START -->
|
||||
## Memory Context (auto-synced)
|
||||
|
||||
<!-- generated 2026-02-27 04:15 -->
|
||||
|
||||
Current Context
|
||||
|
||||
Active maintenance of the `signetai` monorepo and OpenMarketUI ecosystem, with a specific focus on contributing high-value fixes to the OpenClaw project and engaging its community by positioning Signet as a complementary utility rather than a competitor.
|
||||
|
||||
Active Projects
|
||||
|
||||
OpenMarketUI (Core)
|
||||
Location: `/home/nicholai/signet/signetai`
|
||||
Status: Main branch active, codebase audit completed.
|
||||
Details: A multi-component system including the trading pipeline, UI components, and Astro-based static site generator. Currently using TypeScript, Biome for linting (no config file), and Bun/Turbo for build orchestration.
|
||||
Next Steps: Continue monitoring PRs and ensuring consistent naming conventions throughout the codebase.
|
||||
|
||||
Predictive Memory Scorer (R&D)
|
||||
Location: Rust implementation, architecture docs in `docs/wip/predictive-memory-scorer.md`
|
||||
Status: Architecture defined; ACAN reference available in `references/acan/`.
|
||||
Details: Experimental component utilizing 8 delegated agents for real-time preference processing.
|
||||
Next Steps: Implementation and integration testing.
|
||||
|
||||
OpenMarketUI Website
|
||||
Location: `/web/` (Astro)
|
||||
Status: Active build and deployment pipeline.
|
||||
Details: Published as an npm package named `openmarketui-web` and deployed via Cloudflare Pages.
|
||||
|
||||
OpenClaw Ecosystem Engagement
|
||||
Status: Bugfixing and Community Outreach.
|
||||
Details: Currently fixing specific issues in the OpenClaw codebase and drafting forum content to share Signet features.
|
||||
Next Steps: Complete the secret provider timeout bugfix; finalize and post the OpenClaw discussion thread emphasizing problem-solving over feature comparison.
|
||||
|
||||
Recent Work
|
||||
|
||||
OpenClaw Bugfix: Mistral Tool Call Sanitization
|
||||
Action: Fixed a logic error in `src/agents/transcript-policy.ts:120`.
|
||||
Issue: The condition `sanitizeToolCallIds: !isOpenAi && sanitizeToolCallIds` incorrectly short-circuited sanitization for Mistral models when used via an OpenAI-compatible provider.
|
||||
Resolution: Added regression tests and committed the fix. PR created for review.
|
||||
|
||||
OpenClaw Outreach Strategy
|
||||
Action: Drafted content for OpenClaw discussions.
|
||||
Decision: Shifted the narrative away from comparing Signet to ChatGPT/Claude Code. Instead, focused on Signet being a practical solution to specific pain points identified in OpenClaw discussions (#842 memory issues, #9676 secrets concerns).
|
||||
|
||||
OpenClaw Bugfix: Exec Secret Provider Timeout
|
||||
Action: Identified hardcoded timeout in `src/secrets/resolve.ts:544`.
|
||||
Issue: The timeout was fixed at 2000ms, ignoring user-configured `timeoutMs` values.
|
||||
Status: Identified root cause; fix implementation in progress.
|
||||
|
||||
Technical Notes
|
||||
|
||||
Environment: Operating system is Arch Linux running Hyprland window manager.
|
||||
Storage: User state and secrets are stored in `~/.agents/`. The memory database uses SQLite located within this directory.
|
||||
Secrets Management: Mandatory workflow uses `secret_list` MCP to discover secrets and `secret_exec` MCP to execute commands securely.
|
||||
TypeScript Configuration: Strict mode enforced. No usage of `any` types allowed; must use `unknown` with narrowing. Null checks must be explicit.
|
||||
Git: Commit messages must follow Conventional Commits format.
|
||||
UI Workflow: For any frontend/UI work involving images or complex layouts, always use the original image references and do not delegate the task to sub-agents.
|
||||
Session Handling: The session compacting hook is active but limited in scope.
|
||||
|
||||
Rules & Warnings
|
||||
|
||||
Security First: Never delete production data without creating a backup first.
|
||||
Secrets: Always utilize the `secret_list` and `secret_exec` MCP tools for any operations involving secrets.
|
||||
Code Quality: Enforce strict TypeScript rules: `any` is forbidden; use `unknown` with type narrowing; explicit null checks preferred.
|
||||
UI Guidelines: Never delegate UI-related coding to sub-agents. Ensure original image references are preserved in all renders.
|
||||
Maintenance: Update `MEMORY.md` in the local database at least once per session to track progress and context.
|
||||
<!-- MEMORY_CONTEXT_END -->
|
||||
-
|
||||
|
||||
34
agent.yaml
34
agent.yaml
@ -2,16 +2,15 @@ version: 1
|
||||
schema: signet/v1
|
||||
agent:
|
||||
name: Mr Claude
|
||||
description: the exceptionally helpful, capable, thoughtful, and friendly
|
||||
assistant to Nicholai
|
||||
created: 2026-02-23T11:25:00.507Z
|
||||
updated: 2026-02-23T11:25:00.507Z
|
||||
description: The exceptionally kind, helpful and thoughtful agent.
|
||||
created: "2026-03-03T12:17:50.888Z"
|
||||
updated: "2026-03-03T12:17:50.888Z"
|
||||
harnesses:
|
||||
- claude-code
|
||||
- opencode
|
||||
- openclaw
|
||||
install:
|
||||
primary_package_manager: npm
|
||||
primary_package_manager: bun
|
||||
source: fallback
|
||||
memory:
|
||||
database: memory/memories.db
|
||||
@ -19,25 +18,22 @@ memory:
|
||||
decay_rate: 0.95
|
||||
pipelineV2:
|
||||
enabled: true
|
||||
extractionProvider: claude-code
|
||||
extractionModel: haiku
|
||||
maintenanceMode: execute
|
||||
allowUpdateDelete: true
|
||||
graphEnabled: true
|
||||
autonomousEnabled: true
|
||||
extraction:
|
||||
provider: claude-code
|
||||
model: haiku
|
||||
graph:
|
||||
enabled: true
|
||||
reranker:
|
||||
enabled: true
|
||||
topN: 20
|
||||
timeoutMs: 2000
|
||||
rerankerEnabled: true
|
||||
autonomous:
|
||||
enabled: true
|
||||
allowUpdateDelete: true
|
||||
maintenanceMode: execute
|
||||
search:
|
||||
alpha: 0.7
|
||||
top_k: 20
|
||||
min_score: 0.3
|
||||
rehearsal_enabled: true
|
||||
rehearsal_weight: 0.1
|
||||
rehearsal_half_life_days: 30
|
||||
embedding:
|
||||
provider: ollama
|
||||
model: nomic-embed-text
|
||||
provider: native
|
||||
model: nomic-embed-text-v1.5
|
||||
dimensions: 768
|
||||
|
||||
Binary file not shown.
@ -1,94 +1,101 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Generate harness-specific config files from AGENTS.md
|
||||
Generate harness-specific config files from identity files
|
||||
|
||||
Source of truth: ~/.agents/AGENTS.md
|
||||
Source of truth: ~/.agents/ (AGENTS.md, SOUL.md, IDENTITY.md, USER.md, MEMORY.md)
|
||||
Generates:
|
||||
- ~/.claude/CLAUDE.md (Claude Code)
|
||||
- ~/.config/opencode/AGENTS.md (OpenCode)
|
||||
|
||||
Run manually or via systemd timer after AGENTS.md changes.
|
||||
Run manually or via systemd timer after identity file changes.
|
||||
"""
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
AGENTS_MD = Path.home() / ".agents/AGENTS.md"
|
||||
AGENTS_DIR = Path.home() / ".agents"
|
||||
AGENTS_MD = AGENTS_DIR / "AGENTS.md"
|
||||
|
||||
# Additional identity files to compose (in order)
|
||||
IDENTITY_FILES = ["SOUL.md", "IDENTITY.md", "USER.md", "MEMORY.md"]
|
||||
|
||||
TARGETS = {
|
||||
"claude-code": Path.home() / ".claude/CLAUDE.md",
|
||||
"opencode": Path.home() / ".config/opencode/AGENTS.md",
|
||||
}
|
||||
|
||||
HEADER = """# Auto-generated from ~/.agents/AGENTS.md
|
||||
HEADER = """# Auto-generated from ~/.agents/ identity files
|
||||
# Source: {source}
|
||||
# Generated: {timestamp}
|
||||
# DO NOT EDIT - changes will be overwritten
|
||||
# Edit ~/.agents/AGENTS.md instead
|
||||
# Edit the source files in ~/.agents/ instead
|
||||
|
||||
"""
|
||||
|
||||
|
||||
def generate_config(source_content: str, harness: str) -> str:
|
||||
"""Generate harness-specific config from AGENTS.md content."""
|
||||
|
||||
def read_identity_extras() -> str:
|
||||
"""Read and compose additional identity files with section headers."""
|
||||
parts = []
|
||||
for name in IDENTITY_FILES:
|
||||
path = AGENTS_DIR / name
|
||||
if not path.exists():
|
||||
continue
|
||||
content = path.read_text().strip()
|
||||
if not content:
|
||||
continue
|
||||
header = name.replace(".md", "")
|
||||
parts.append(f"\n## {header}\n\n{content}")
|
||||
return "\n".join(parts)
|
||||
|
||||
|
||||
def generate_config(source_content: str, extras: str, harness: str) -> str:
|
||||
"""Generate harness-specific config from identity file content."""
|
||||
|
||||
header = HEADER.format(
|
||||
source=AGENTS_MD,
|
||||
source=AGENTS_DIR,
|
||||
timestamp=datetime.now().isoformat()
|
||||
)
|
||||
|
||||
# For now, configs are identical - but this allows harness-specific
|
||||
# transformations in the future (e.g., removing sections, adding
|
||||
# harness-specific instructions)
|
||||
|
||||
if harness == "claude-code":
|
||||
# Claude Code uses CLAUDE.md
|
||||
return header + source_content
|
||||
|
||||
elif harness == "opencode":
|
||||
# OpenCode uses AGENTS.md
|
||||
return header + source_content
|
||||
|
||||
else:
|
||||
return header + source_content
|
||||
|
||||
return header + source_content + extras
|
||||
|
||||
|
||||
def main():
|
||||
if not AGENTS_MD.exists():
|
||||
print(f"ERROR: Source file not found: {AGENTS_MD}")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
source_content = AGENTS_MD.read_text()
|
||||
source_hash = hash(source_content)
|
||||
|
||||
print(f"Source: {AGENTS_MD}")
|
||||
print(f"Content length: {len(source_content)} chars")
|
||||
extras = read_identity_extras()
|
||||
|
||||
print(f"Source: {AGENTS_DIR}")
|
||||
print(f"AGENTS.md: {len(source_content)} chars")
|
||||
print(f"Identity extras: {len(extras)} chars")
|
||||
print()
|
||||
|
||||
|
||||
for harness, target_path in TARGETS.items():
|
||||
# Ensure parent directory exists
|
||||
target_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
|
||||
# Remove symlink if it exists
|
||||
if target_path.is_symlink():
|
||||
target_path.unlink()
|
||||
print(f" Removed symlink: {target_path}")
|
||||
|
||||
|
||||
# Generate config
|
||||
config_content = generate_config(source_content, harness)
|
||||
|
||||
config_content = generate_config(source_content, extras, harness)
|
||||
|
||||
# Check if content changed
|
||||
if target_path.exists():
|
||||
existing_content = target_path.read_text()
|
||||
if existing_content == config_content:
|
||||
print(f" {harness}: unchanged")
|
||||
continue
|
||||
|
||||
|
||||
# Write new config
|
||||
target_path.write_text(config_content)
|
||||
print(f" {harness}: generated → {target_path}")
|
||||
|
||||
|
||||
print()
|
||||
print("Done.")
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user