Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ask-axonos

An answer, and where it came from.

Version Dependencies Discloses License

→ Open the preview · one file, no build step


A visitor arrives at a page making unusual claims: a timing budget that refuses configurations instead of monitoring them, an information bound on what an application may learn about sealed data, forty-three machine-checked proofs. Scepticism is the correct response, and until now the only way to act on it was to read a great deal.

This is the shorter path. Ask, and get the source with the answer.

What an answer looks like

Three kinds, and the widget shows which kind it is giving you.

Comes from Carries
A claim the registry of statements this project may make the level at which it is evidenced, and the artefact that shows it
A quotation the published specifications the file, the line range, and a link that resolves to those lines
"I do not know" neither the reason, and where the question goes instead

The third is not a failure mode. A question outside the registry and the corpus gets a refusal rather than a guess, because a gap reported is useful and a gap filled is a defect that reaches whoever asked.

Numbers never come from a quotation. Every figure comes from the registry, where it carries its evidence level. A number lifted out of a document arrives with the authority of a quotation and without the qualification attached to it, which is how a measurement becomes a proof in somebody's notes.

It says what it is before being asked

The first line of every conversation states that this is an AI representative and not a person. That is not a legal formality bolted on afterwards.

This project builds a control layer for trusted AI agents. An agent that concealed what it is would refute the product by existing. Said plainly, it demonstrates it.

Why the button reads the way it does

Not a bubble in the corner. A bubble is the universal signal for support chat, and a visitor who reads it that way will not ask the question this exists to answer. It sits in the page, states the whole offer, and is large enough to be read before it is clicked.

It does not say "chat", which describes a mechanism. It says what the visitor gets: any question, an answer with its source, and a refusal instead of a guess.

What is here, and what is not

Here. The widget: one HTML file, no framework, no build step, no third-party script, no inline styles. A page enforcing a strict Content-Security-Policy drops inline styles silently, and an answer would render unstyled on the live site while looking correct in a local file.

Not here yet. The backend. The three replies in the preview are hand-written to show each kind of answer. Wiring it to the knowledge system replaces one function and nothing else.

The knowledge system itself, the registry and its validators and the retrieval with provenance per passage, lives in a private repository because it holds the working analysis this project is steered by. What it produces is public: every claim it may make traces to an artefact anyone can open.

What I could not answer

The agent refuses questions outside the registry and the corpus. Those refusals are published: docs/GAPS.md is a list of what this project cannot explain about itself, written by whoever asked.

Most projects have that list and keep it private, discover it late, and hear it from someone who has already decided not to engage. It is more useful open: a gap is a fact about this project's documentation, and it is the shortest description of what to write next.

A question appears after two different people ask it. One person asking is a question; two is a gap. Anything that might be about a person, or that carries contact details, is never published and never stored — the filter is over-broad on purpose.

And a refusal that is a position does not appear there. The agent declines to state a classification accuracy because accuracy is on the non-claims list. That is something the project will not say, not something it does not know, and putting it on that page would turn one into the other.

The contract between widget and backend

contract/answer_contract.py defines what an answer may be and refuses one that is not. It is here rather than in the private repository because it is the guarantee a visitor is being offered, and a guarantee nobody can read is a promise.

It rejects rather than repairs. A malformed answer could be patched — strip the figure, drop the citation, serve what is left — and that would produce something plausible from something broken, which is this system's failure mode expressed in one function.

Licence

Apache-2.0 OR MIT.


© 2026 Denis Yermakou — authored for The AxonOS Project

axonos.org · connect@axonos.org

About

Ask anything about AxonOS. Every answer carries its source: a claim with its evidence level, a quotation with its line range, or a refusal with the reason.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages