Skill: ianleme/memory-ops (version 0.1.2)

--- name: memory-ops description: Consulta e persistência obrigatória da memória principal no PostgreSQL (Memory_openclaw + pgvector). Use quando for responder, delegar tarefas, consolidar contexto do usuário, registrar handoffs (ex.: Alfred, Prompt Improver), ou manter histórico operacional com auditoria. --- # Memory Ops ## Protocolo obrigatório (sempre) 1. Consultar memória principal antes de responder ou delegar. 2. Responder/delegar com contexto recuperado. 3. Salvar contexto do prompt do usuário. 4. Salvar contexto de cada delegação enviada para agentes. 5. Registrar auditoria do ciclo (read/write status). ## Banco alvo - Database: `Memory_openclaw` - Extensão: `vector` - Tabelas: usar `memories` + `memory_audit`. ## Regras de gravação - Não salvar segredos sensíveis sem necessidade explícita. - Priorizar fatos operacionais: objetivo, decisão, restrição, preferência, próximo passo. - Sempre incluir metadados mínimos: `source`, `scope`, `agent`, `timestamp`, `kind`. ## SQL e esquema - Criar/atualizar esquema em: `references/schema.sql` - Queries de consulta em: `references/queries.sql` ## Auditoria obrigatória - Registrar um evento em `memory_audit` por turno com: - `event_type`: `turn_cycle` - `read_ok`: true/false - `write_ok`: true/false - `details`: JSON com contagens e ids ## Handoff com agentes Ao delegar para Alfred/Prompt Improver: 1. Salvar `kind=delegation_prompt` com prompt enviado. 2. Após retorno, salvar `kind=delegation_result` com resumo do output. 3. Só então consolidar resposta final ao usuário. ## Implementação de referência - Script pronto: `scripts/memory_ops_template.sql` - Se precisar adaptar dimensão de embedding, ajustar coluna `vector(1536)` conforme modelo.

path: references/queries.sql
content: -- 1) Semantic recall (bind :query_embedding)
SELECT id, content, metadata, importance, created_at,
       (1 - (embedding <=> :query_embedding)) AS similarity
FROM memories
WHERE user_id = 'ian'
ORDER BY embedding <=> :query_embedding
LIMIT 8;

-- 2) Write user prompt context
INSERT INTO memories (user_id, scope, source, content, metadata, importance)
VALUES (
  'ian',
  'global',
  'chat',
  :prompt_content,
  jsonb_build_object(
    'kind','user_prompt',
    'agent','jarvis',
    'channel',:channel,
    'timestamp',now()
  ),
  4
)
RETURNING id;

-- 3) Write delegation prompt
INSERT INTO memories (user_id, scope, source, content, metadata, importance)
VALUES (
  'ian',
  'global',
  'chat',
  :delegation_prompt,
  jsonb_build_object(
    'kind','delegation_prompt',
    'agent','jarvis',
    'target_agent',:target_agent,
    'timestamp',now()
  ),
  4
)
RETURNING id;

-- 4) Write delegation result summary
INSERT INTO memories (user_id, scope, source, content, metadata, importance)
VALUES (
  'ian',
  'global',
  'chat',
  :delegation_result,
  jsonb_build_object(
    'kind','delegation_result',
    'agent','jarvis',
    'target_agent',:target_agent,
    'timestamp',now()
  ),
  3
)
RETURNING id;

-- 5) Audit turn cycle
INSERT INTO memory_audit (event_type, agent, read_ok, write_ok, details)
VALUES (
  'turn_cycle',
  'jarvis',
  :read_ok,
  :write_ok,
  :details_json::jsonb
)
RETURNING id;


path: references/schema.sql
content: -- Memory Ops schema
CREATE EXTENSION IF NOT EXISTS vector;

CREATE TABLE IF NOT EXISTS memories (
  id BIGSERIAL PRIMARY KEY,
  user_id TEXT NOT NULL DEFAULT 'ian',
  scope TEXT NOT NULL DEFAULT 'global',
  source TEXT NOT NULL DEFAULT 'chat',
  content TEXT NOT NULL,
  metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
  embedding vector(1536),
  importance SMALLINT NOT NULL DEFAULT 3,
  created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
  updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
  last_accessed_at TIMESTAMPTZ
);

CREATE INDEX IF NOT EXISTS idx_memories_user_scope ON memories(user_id, scope);
CREATE INDEX IF NOT EXISTS idx_memories_metadata_gin ON memories USING GIN (metadata);
CREATE INDEX IF NOT EXISTS idx_memories_embedding_cosine
ON memories USING hnsw (embedding vector_cosine_ops);

CREATE TABLE IF NOT EXISTS memory_audit (
  id BIGSERIAL PRIMARY KEY,
  event_type TEXT NOT NULL,
  agent TEXT NOT NULL DEFAULT 'jarvis',
  read_ok BOOLEAN NOT NULL DEFAULT false,
  write_ok BOOLEAN NOT NULL DEFAULT false,
  details JSONB NOT NULL DEFAULT '{}'::jsonb,
  created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);

CREATE INDEX IF NOT EXISTS idx_memory_audit_created_at ON memory_audit(created_at DESC);
CREATE INDEX IF NOT EXISTS idx_memory_audit_event_type ON memory_audit(event_type);


path: scripts/memory_ops_template.sql
content: -- Run in database Memory_openclaw
\i ../references/schema.sql

-- Example seed entries
INSERT INTO memories (user_id, scope, source, content, metadata, importance)
VALUES
('ian','global','manual','Objetivo principal: ganhar dinheiro.','{"kind":"goal","agent":"jarvis"}',5),
('ian','global','manual','Sempre perguntar antes de agir em dúvida relevante.','{"kind":"rule","agent":"jarvis"}',5),
('ian','global','manual','Consultar memória principal antes de responder/delegar.','{"kind":"rule","agent":"jarvis"}',5),
('ian','global','manual','Salvar contexto de todo prompt recebido e delegado.','{"kind":"rule","agent":"jarvis"}',5);

INSERT INTO memory_audit (event_type, agent, read_ok, write_ok, details)
VALUES ('bootstrap', 'jarvis', true, true, '{"note":"memory-ops initialized"}'::jsonb);


path: _meta.json
content: ownerId: kn71cw942abcxj0cdmxnxdnz2d821qqk
slug: memory-ops
version: 0.1.1
publishedAt: 1772332663021

Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: suspicious | SkillSpector: suspicious (CRITICAL)