cd /news/ai-agents/llm-free-multi-agent-memory-architec… · home topics ai-agents article
[ARTICLE · art-22456] src=dev.to pub= topic=ai-agents verified=true sentiment=· neutral

LLM-Free Multi-Agent Memory Architecture: How to Build Real Team Memory with Jira + GitHub + Commit Log

A developer has built an LLM-free multi-agent memory architecture that connects Jira, GitHub, and commit logs to solve team memory loss in software projects. The system uses a relational and graph-based memory store with specialized agents—ContextAgent, ExpertiseAgent, and RiskAgent—to answer questions about code decisions, file risk levels, and developer expertise without relying on large language models. The architecture provides verifiable, evidence-based answers by linking issues to pull requests, commits, and file changes, avoiding the hallucination and inconsistency risks of LLM-centric approaches.

read9 min publishedJun 5, 2026

One of the biggest problems in software teams is not writing code. Code eventually gets written, refactored, tested, and deployed. The real challenge, most of the time, is this:

"Why was this decision made?"

When a developer joins a project, they can't understand the work just by looking at the repository. They can see the code, but not the story behind it. Why was a service split this way? Why is an interface designed so oddly? Why does a test specifically check that edge case? Why has a file turned into something everyone is afraid to touch? The answers to these questions usually lie not in the code itself, but in the team's history.

That history is scattered across different tools:

That's why, for a new developer, the learning process usually goes like this:

Look at the code → Find something you don't understand → Search Jira → Search PR → Search Slack → Ask the old developer → Repeat

This is team memory loss. And this loss costs time, causes errors, and exhausts people.

When a well-structured team memory system is in place, it should be able to answer questions like:

What these questions have in common: the answers are not in a single record. The answers are hidden in relationships.

For example, to answer "who knows the auth module?" it's not enough to just count commits. You need to look at all of these together:

So team memory is essentially a relationship problem.

LLMs are powerful, but it's not always right to put an LLM at the core of every problem. For systems like team memory, the main requirements are:

Let me also add a personal note here. Even though I write a series about AI-free life on Dev.to, this time I specifically wanted to write something on the software engineering side without AI as well. Honestly, the motivation behind this article is partly to push myself outside of repetition while also giving you some food for thought: You can build quite useful, technically clean, and maintainable systems without tying every problem to an LLM.

Let me be even more direct: we're a bit tired of it. Constant AI, constant agents, constant RAG, constant prompts. These are certainly valuable topics, but sometimes you just want to see solid, old-school engineering. This article was written with exactly that motivation.

An LLM-centric approach carries several risks.

An LLM might behave as if there's a relationship between an issue and a commit when no such relationship exists in the real system. Pointing to the wrong PR, showing the wrong person as an expert, or misinterpreting a past bug fix causes serious time loss.

In team memory, answers should not be "educated guesses." Answers must come with evidence.

If a system says "this file is risky," it should be able to explain why:

src/auth/token_service.py changed 18 times in the last 90 days.
5 of those changes are linked to bug fixes.
4 different developers have touched the file.
A race condition was discussed in the last two PRs.
The test file was not updated at the same rate.

This kind of answer is debatable, verifiable, and improvable. An LLM saying "it looked risky to me" doesn't deliver the same quality.

LLMs are not needed for questions like:

These are pure data queries. SQL or graph traversal solves them instantly.

For team memory, the same question should always produce the same answer on the same data. LLM-based systems can give different answers each time. This is unacceptable for audit and debugging.

The foundation of the system is a memory store. This store holds the following:

On top of this, agents query the memory store, score it, and produce explainable outputs.

The basic flow:

Jira / GitHub / Git
    ↓
Ingestion Layer
    ↓
Memory Store (relational + graph)
    ↓
Agents (ContextAgent, ExpertiseAgent, RiskAgent, ...)
    ↓
Explainable Output (CLI / API / Bot)
PROJ-1247 issue
  → linked to PR #382
  → resolved by commits f00ba47 and b91c0de
  → changed src/auth/token_service.py
  → contributed by Mehmet Turac and Ayşe Demir
  → reviewed by Burak Kaya

With this information, a new developer no longer has to search randomly.

I'm not using the word "agent" in the LLM agent sense here. In this architecture, an agent is:

A small service with a specific task, which queries memory, makes rule-based decisions, and produces evidence-backed output.

So what we call an agent is not a bot running prompts. It's a perfectly classical software component.

Extracts context for an issue, PR, or file.

Calculates the most knowledgeable people for a file or component.

Finds risky files based on signals like high churn, bug fixes, and contributor spread.

Suggests suitable reviewer candidates for a new PR.

For a new developer on a given component, lists the most valuable issues and PRs to read.

Reports data quality problems in the memory store.

Each agent works with a scoring and rule-based logic.

The minimum entity set for the first version is:

Developer
Repository
Issue
Commit
File
PullRequest
Review
IssueComment

Even with this model, a powerful memory system can be built.

A developer can appear with different identities across systems:

These need to be linked to a single developer record.

Commits are among the most reliable events in the system. Hash, message, date, author, and changed files are stored.

Files should be stored not just as paths, but with component information.

For example:

src/auth/**      → auth
src/payment/**   → payment
infra/**         → infra

Issues give us business context. Summary, status, priority, type, component, and timestamps are stored.

PRs show us how a change was discussed within the team. Reviewers, changed files, linked issues, and commits are among the key fields.

CREATE TABLE developers (...);
CREATE TABLE repositories (...);
CREATE TABLE issues (...);
CREATE TABLE files (...);
CREATE TABLE commits (...);
CREATE TABLE commit_files (...);
CREATE TABLE commit_issues (...);
CREATE TABLE pull_requests (...);
CREATE TABLE pr_commits (...);
CREATE TABLE pr_files (...);
CREATE TABLE pr_issues (...);
CREATE TABLE reviews (...);
CREATE TABLE issue_comments (...);

These tables represent graph thinking in a relational model. Join tables like commit_files

, commit_issues

, pr_files

, pr_issues

serve as relationships.

When finding an expert for a file, looking only at commit count can be misleading. So the score can be calculated as follows:

expertise_score =
    commit_count * 10
  + review_count * 8
  + issue_comment_count * 2
  + churn / 20
  + recency_bonus

This score is not an absolute truth; it's a ranking signal. What matters is that the score is explainable.

Bad output:

Ayşe is an expert on this topic.

Good output:

Ayşe made 5 commits in this file recently, reviewed 3 PRs,
last activity was 2026-05-20, and total churn value is 320.

Explainable signals are needed for risk too:

risk_score =
    churn
  + bug_count * 100
  + contributor_count * 25
  + commit_count * 5

This is a simple starting point. In production, signals like test coverage, incidents, revert commits, deployment failures, and code ownership can be added.

A new developer picks up issue PROJ-1247

.

They run this from the CLI:

teammemory issue-context PROJ-1247

The system produces:

Issue: PROJ-1247
Summary: Token refresh race condition
Status: In Progress
Priority: High
Component: auth

Related PRs:
- #382 Fix token refresh race condition [merged]

Commits:
- f00ba47 Mehmet Turac — PROJ-1247 guard token refresh with per-session lock
- b91c0de Ayşe Demir — PROJ-1247 add regression test for refresh race

Changed files:
- src/auth/token_service.py
- src/auth/session_manager.py
- tests/auth/test_token_refresh.py

People in context:
- Mehmet Turac
- Ayşe Demir
- Burak Kaya

This output was generated without an LLM. Because everything is based on relationships in the database.

Then the developer wants to see file experts:

teammemory file-experts src/auth/token_service.py

Output:

Experts for src/auth/token_service.py

1. Ayşe Demir — score 92.0
   commits: 4, reviews: 2, comments: 1, churn: 430, last activity: 2026-05-20

2. Mehmet Turac — score 80.5
   commits: 3, reviews: 1, comments: 2, churn: 390, last activity: 2026-05-18

This answer too is not a guess — it's a calculated signal.

The success of this system depends on data quality. If commit messages don't contain issue keys, PR descriptions are empty, or issues aren't linked to the right components, the team memory stays incomplete.

That's why HygieneAgent is critically important.

What it reports:

This report is not a blame tool — it's a tool for improving memory.

The demo runs with SQLite. The recommended structure for production:

PostgreSQL = raw event store, audit, checkpoint, agent outputs
Neo4j/AGE   = relationship analysis and traversal
FastAPI     = controlled access layer
CLI/Bot     = developer workflow integration

Things to pay attention to in production:

Identity resolution is especially important. If the same person appears as mehmet@example.com

in Git, mturac

on GitHub, and Mehmet Turac

in Jira, all of these need to be linked to a single developer record.

These limitations are not flaws. On the contrary, they are the system's honesty. It doesn't make things up when it doesn't know.

The main idea of this article is simple:

First build the data model correctly for team memory. Don't rush to LLMs.

Jira, GitHub, and Git already give us an incredibly valuable event history. If we correctly link this history, we can produce reliable answers to questions like:

In this system, answers don't come with "the model thought so." Answers come from commit, issue, PR, and review records.

Sometimes the best engineering is not using the most impressive technology; it's correctly scoping the problem and building a simpler, more reliable, and more explainable solution.

And this repo is trying to show exactly that:

No LLM.
No RAG.
No prompt.
No embedding.

There is data.
There are relationships.
There are rules.
There is evidence.

TeamMemory LLM’siz, yazılım ekipleri için Jira + GitHub + Git commit loglarından çalışan, tamamen deterministik bir takım hafızası örneğidir.

Bu repo özellikle şunu göstermek için hazırlandı:

Her takım hafızası problemi LLM, RAG, embedding, prompt veya agentic workflow gerektirmez. Bazen doğru veri modeli, iyi ingestion, sağlam sorgular ve küçük deterministik agent’lar daha güvenilir sonuç verir.

Bu örnekte LLM yoktur.

RAG yoktur.

Vector database yoktur.

Prompt yoktur.

Model çağrısı yoktur.

Bunun yerine:

vardır.

cd teammemory-llmsiz
python -m venv .venv
source .venv/bin/activate
python -m pip install -e .[api,dev]

teammemory init-db --reset
teammemory seed
teammemory issue-context PROJ-1247
teammemory file-experts src/auth/token_service.py
teammemory component-risk auth
teammemory onboarding auth
teammemory review-suggest 382
teammemory hygiene

API çalıştırmak için:

uvicorn teammemory.api:app --reload

Örnek endpoint’ler:

curl http://127.0.0.1:8000/issues/PROJ-1247/context
curl "http://127.0.0.1:8000/files/experts?path=src/auth/token_service.py"
curl http://127.0.0.1:8000/components/auth/risk

── more in #ai-agents 4 stories · sorted by recency
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/llm-free-multi-agent…] indexed:0 read:9min 2026-06-05 ·