Pal synthesis
Type: agentic-system-analyses/types/agentic-system-synthesis.md
Bounded synthesis
Pal is a personal knowledge application whose model-directed team acquires information, compiles a file-based wiki and retrieves retained material for later work. This account covers its shipped application, callers, schedules, prompts, persistence configuration and evaluators at commit 6516b8ede0c085e48f39f3bd04cb85b475a855dc, with an applicability cutoff of 2026-10-17. SRC-1 supplies implementation and doctrine/design evidence only. No target code was executed, and no populated user corpus, execution trace or causal experiment was supplied. External Agno, model providers and live services are dependencies, not inspected implementations. The whole-system boundary concerns Pal's shipped responsibilities, not every dependency-internal operation. See boundary and its Source register.
From request to retained sources
Ordinary requests enter a coordinated team. A leader model chooses a specialist and synthesizes its return; Navigator handles knowledge retrieval and action, Compiler produces wiki content, Linter diagnoses wiki issues, and conditionally available Researcher and Syncer support acquisition and Git delivery. Agno executes delegation and supplies configured history and memory. Brief handoffs are requested, but exact forwarded state, context isolation and return filtering are uninspected. OpenAI generation and embedding components are configured by endpoint names, not immutable weight identities; no inspected Pal route changes their weights. See RT-RTE-team-dispatch, RT-CMP-openai-responses and RT-CMP-openai-embedder.
Admission is not universally model-mediated. Direct HTTP ingestion writes text or extracted URL content into raw files and appends manifest entries without the leader or Researcher. Extraction failure can produce a persistent pending-content stub. Researcher may instead curate multi-page material into summaries before ingestion, so “raw” does not guarantee verbatim evidence. The deterministic text writer preserves the supplied body, but attribution does not authenticate its truth. Equal title slugs can overwrite a body while leaving multiple manifest entries. See RT-RTE-raw-ingest, MEM-OBJ-raw and RT-OBJ-manifest. These findings concern SRC-1 app/router.py, pal/tools/ingest.py and pal/agents/researcher.py.
Compilation, criticism and delivery
The representative multi-step workflow starts with already-ingested sources: a compile request or schedule reaches the leader, which delegates to Compiler. Its model is instructed to select uncompiled sources, read them, produce source summaries and concept articles, update navigation and bookkeeping, then return. When Git sync is configured, the leader is instructed to delegate to Syncer last. This is a supported instructed chain, not a deterministic controller or an observed successful episode. See RT-RTE-wiki-maintenance and the workflow account.
Compiler's requested source links and contradiction-preserving enrichment provide a provenance contract, not verified claim support. Model-proposed writes are admitted without an inspected mandatory evidence-consuming acceptance gate. Article writes, index replacement, caller-supplied state counts and manifest marking are independent; a compiled flag can be set without checking article output. Actual summary/concept transformations remain semantically indeterminate without paired inputs and outputs: neither faithful compression nor a novel accepted claim follows from the prompt. See EPI-RTE-compiler-transform, EPI-CLM-source-tracking, MEM-OBJ-wiki-index and MEM-OBJ-wiki-state. The relevant SRC-1 paths are pal/agents/compiler.py, pal/tools/wiki.py and pal/tools/ingest.py.
Linter supplies a distinct criticism channel. It is asked to compare article claims, inspect structure and apply conditional age and length heuristics, then retain suggestions. Consistency, freshness and thinness are different check targets; none certifies world truth. Its retained report is advisory, with no mandatory report-to-Compiler repair or article-withdrawal transition established in the inspected callers and prompts. Thus criticism is available without a demonstrated corrective cycle. See EPI-RTE-lint-check, EPI-RTE-lint-retain and MEM-OBJ-lint-report, grounded in SRC-1 pal/agents/linter.py.
Delivery has three boundaries: admitted local files, successful remote push, and a returned response. HTTP completed checks neither article completeness nor push success. Syncer stages all pending context changes rather than isolating this workflow's files. A push can fail after a local commit; a later clean-tree check can return before retrying that outstanding push. Direct ingestion and independently exposed specialists also bypass the leader's sync instruction. Git transfers context files, not PostgreSQL learnings or sessions, and pull does not itself refresh routing metadata. See RT-RTE-git-sync, its workflow annotation, and its memory annotation in memory. These conditions derive from SRC-1 pal/tools/git.py, pal/team.py, app/main.py and app/router.py.
Later retrieval and experience reuse
Navigator is instructed to scan the wiki index, request relevant articles, fall back to raw sources and then live services, and synthesize an answer. SQL facts, edited preferences and voice guides have separate consumers and effects. Routing knowledge stores resource descriptions rather than source bodies; the loader derives file paths, sizes, tags and indexing times. Ordinary refresh does not explicitly prune removed paths. Recreate deletes the vector index, not visibly all contents-table data, and returns before deletion if no files are found. Stored descriptions can therefore guide retrieval without proving freshness or source truth. See RT-RTE-navigator-work, MEM-OBJ-pal-tables, MEM-OBJ-user-files, MEM-OBJ-pal-knowledge and RT-RTE-context-refresh. Relevant SRC-1 paths include pal/instructions.py, pal/tools/knowledge.py and context/load_context.py.
The strongest supported learning contribution is a configured interaction-to-durable-guidance pathway, not merely transcript storage. Pal configures operational learnings and personal-memory updates with later consumers. Retrieval strategies, patterns and user corrections are requested as retained guidance; Navigator is instructed to search learnings, while leader and conditional Researcher request automatic learning inclusion. Researcher's constructor therefore qualifies the source specification's stateless-worker description. Correction precedence is model-interpreted policy, not enforced truth validation. Exact extraction, retained entries and downstream uptake remain unobserved. See MEM-RTE-learning-reuse, MEM-RTE-conversation-reuse, MEM-BAP-retained-guidance and MEM-CLM-service-boundary, grounded in SRC-1 pal/team.py, pal/agents/navigator.py, pal/agents/researcher.py and pal/instructions.py.
Foreground file/query/search returns are requested retrieval; configured history and learning additions are automatic context supply. Recent-history limits provide a coarse window—five leader runs and ten Navigator runs—but do not establish deletion, exact payload filtering or compaction. Past-session search can reach older material. Learning selection and budgets remain dependency-owned. Known file and database configuration does not settle opaque payloads or service alternatives. The profile verification supports these distinctions while withholding per-part completeness for combined partial units.
What the architecture establishes
For a later knowledge question, Pal supplies a concrete retained-source-to-answer path and a separate experience-to-guidance path. For faithful compilation, automatic criticism-driven repair or reliable remote availability, the source establishes weaker guarantees. Its broad promise that every interaction improves the next remains unsupported at the benefit layer, not refuted at the capacity layer. No comparison measured learning benefit or isolated the contribution of wiki, routing or memory. See EPI-CLM-compounding-learning and EPI-RTE-learning-adapt.
The independent properties must remain separate:
- Theory-builder condition 1, localized theory content: uninspected for retained instances; named entry categories afford localization but no actual formulated theory was supplied.
- Condition 2, content-dependent consumption: uninspected for those instances; intended delivery and priority do not demonstrate decisions depending on a theory's content.
- Condition 3, content-directed criticism with blame and changed reliance: uninspected for retained theories; advisory lint and correction instructions do not demonstrate that process.
- Condition 4, criticism shaping a next round: uninspected; no supplied trace closes the criticism-to-next-round chain.
- Learning through criticism of a consumed theory: improved future capacity is unobserved, with no attribution evidence. Configured trace-fed updates remain a positive architectural finding.
- Reflection: self-oriented learnings and metadata are afforded, but the two causal directions between representation and behavior are not demonstrated.
- Autonomy: model-selected delegation and updates are afforded/wired at their respective routes; a complete computational theory-building process is not established.
- Self-improvement across future sessions: durable guidance is a candidate behavior-shaping path. Evidence-responsive update determination, changed internal organization and subsequent causal exercise are not jointly demonstrated. Successful improvement additionally lacks outcome evidence.
These are the scoped findings of EPI-RTE-learning-adapt, not a ladder or a system-wide negative. Neither lack of weight training nor lack of a separate acceptance gate disproves a guidance-based self-improvement path.
Shipped evaluators could supply bounded response/tool-call evidence, but their definitions are not passing results. Lexical smoke checks control dependent-test continuation and carry session IDs forward; they do not accept wiki claims or install improved policy. Governance similarly has distinct strengths: disabled deletion/email-send options constrain configured tools, while user-scoped SQL, external-effect confirmation and final synchronization are instructions rather than demonstrated global invariants. Evaluator cleanup can delete files outside agent FileTools controls. See RT-RTE-evaluation-driver, EPI-RTE-smoke-select and RT-CLM-control-scope.
Paired source/article artifacts with checked claim support would change the fidelity assessment. A traced lint finding, assigned repair, changed reliance and subsequent consumption would establish more of the corrective cycle. Retained learning provenance, injected payloads and later decision traces would establish uptake; controlled outcome comparisons would address benefit, with component effects requiring independent component variation. Explicit push-backlog recovery and checked delivery status would strengthen synchronization guarantees. These are resolving evidence or system changes, not claims that the missing behavior is absent. This synthesis used accepted members only and made no additional source reads.
Limitations
| Limitation | Affected SRC IDs and record citations | Inspected boundary | Conclusion prevented | Evidence that would resolve it |
|---|---|---|---|---|
| Combined partial memory-profile units do not resolve each part or consumer separately; carried from profile verification. | SRC-1; MEM-OBJ-pal-knowledge, MEM-OBJ-pal-learnings, MEM-RTE-learning-reuse, MEM-RTE-conversation-reuse; verifier limit | Routing versus learning text, personal memory versus session payloads, and automatic learning supply versus personal-memory inclusion in accepted partial units. | Per-part completeness comparisons on these branches; positive local findings remain supported. | Separately scoped units supported by records resolving each part's payload, consumer, selector and remaining uncertainty. |
| No supplied operational or causal evidence. | SRC-1; boundary register, EPI-CLM-compounding-learning, EPI-RTE-learning-adapt | Frozen Pal implementation and doctrine, without live corpus, sessions or experiments. | Actual activation, improved future capacity, exercised self-improvement or attribution to individual components. | Provenance-linked update and consumption traces, plus outcome comparisons appropriate to the claimed effect. |
| Generated content and corrective consumption are unobserved. | SRC-1; EPI-RTE-compiler-transform, EPI-RTE-lint-check, EPI-RTE-lint-retain, RT-OBJ-manifest | Compiler/Linter prompts, write tools and shipped maintenance callers; tracked content scaffolds are not a completed corpus. | Faithful source transformation, particular accepted novel claims, or an exercised criticism-to-repair cycle. | Paired inputs/outputs, evidence-consuming dispositions and a traced repair with later reliance. |
| External runtime, provider and service contracts remain opaque. | SRC-1; MEM-CLM-service-boundary, MEM-RTE-conversation-reuse, MEM-RTE-learning-reuse, RT-CMP-openai-responses | Pal constructors and wrappers, not Agno/provider internals or live service state. | Complete payload/form/lineage inventories, exact automatic selectors and budgets, context isolation, immutable backing model identity or exhaustive service admission guarantees. | Dependency implementation and version contracts, inspected service operations and actual delivered payloads tied to the same deployment. |
| Delivery and deployed control guarantees are conditional. | SRC-1; RT-RTE-git-sync, workflow recovery annotation, RT-CLM-control-scope | Shipped direct, scheduled and specialist paths; Git failure branch and configuration, without live grants or deployment audit. | Universal push-after-write, automatic failed-push recovery, deployed tenant isolation or confirmation of every external effect. | Checked remote delivery and backlog recovery, and end-to-end enforcement evidence covering alternate paths and actual grants. |