graphify: ο γράφος γνώσης που απαντά για το αποθετήριό σου χωρίς να το ξαναδιαβάσει
Το graphify είναι εργαλείο γραμμής εντολών που διαβάζει έναν φάκελο με κώδικα, χτίζει γράφο γνώσης και μετά τον ρωτάς με φυσική γλώσσα. Τον κώδικα τον διαβάζει με tree-sitter, χωρίς μοντέλο: στη δοκιμή, τρία αρχεία έδωσαν 11 κόμβους, 13 ακμές και 3 κοινότητες σε 1,18 με 1,34 δευτερόλεπτα, και κάθε σύνδεση γύρισε με αρχείο, γραμμή και σήμανση αν βγήκε από το συντακτικό δέντρο ή αν συμπεράθηκε. Δεν είναι διακομιστής MCP, δεν δηλώνεται σε αρχείο ρυθμίσεων, δεν θέλει επανεκκίνηση, και για τον κώδικα κοστίζει μηδέν tokens και μηδέν χρήματα. Για PDF, εικόνες και σημειώσεις ζητά κλειδί της Gemini, και αυτό το κομμάτι δεν το μέτρησα.

Τι κάνει
Φαντάσου να ρωτάς το αποθετήριό σου «τι ενώνει την κλάση που σερβίρει τους χρήστες με τη βάση;» και να παίρνεις απάντηση με όνομα αρχείου και αριθμό γραμμής, χωρίς να ανοίξεις ούτε ένα αρχείο. Αυτό κάνει το graphify, χωρίς να στείλει τον κώδικά σου σε κανένα μοντέλο.
«Γράφος γνώσης» σημαίνει δίκτυο: τα πράγματα του κώδικα — αρχεία, κλάσεις, συναρτήσεις — και οι σχέσεις ανάμεσά τους. Αυτό το αρχείο εισάγει εκείνο, αυτή η κλάση χρησιμοποιεί εκείνη. Ο κόμβος είναι το πράγμα, η ακμή η σχέση. Δεν έχεις λίστα αρχείων· έχεις χάρτη.
Το «tree-sitter» είναι αναλυτής γλώσσας: παίρνει κείμενο κώδικα και βγάζει συντακτικό δέντρο — ποια συνάρτηση περιέχει ποια κλήση, ποια εισαγωγή ενώνει ποια αρχεία. Δεν καταλαβαίνει νόημα· καταλαβαίνει δομή, με ακρίβεια χαρακτήρα. Γι’ αυτό δεν χρειάζεται μοντέλο.
Η ροή έχει δύο στάδια, χωριστά. Στο πρώτο χτίζεις τον γράφο, δουλειά δευτερολέπτων. Στο δεύτερο ρωτάς, με τρία σχήματα: δρόμο από ένα σημείο σε άλλο, αναζήτηση σε φυσική γλώσσα, εξήγηση ενός κόμβου. Το README το δίνει ως δεξιότητα για πράκτορες κώδικα (αποθετήριο), αλλά δουλεύει και σκέτο από το κέλυφος — αυτό το έτρεξα. Δεν είναι διακομιστής MCP: δεν δηλώνεται σε αρχείο ρυθμίσεων, δεν φορτώνει σχήμα εργαλείων, δεν θέλει επανεκκίνηση.
Το πιο σοβαρό χαρακτηριστικό του βγήκε από τις εκτελέσεις. Κάθε ακμή φέρει σήμανση προέλευσης: EXTRACTED σημαίνει ότι βγήκε από το συντακτικό δέντρο και είναι γεγονός· INFERRED ότι συμπεράθηκε, και τότε δίνεται βαθμός βεβαιότητας. Στη δοκιμή μου το UserService --uses --> Pool βγήκε INFERRED με βαθμό 0.95. Το βέβαιο και το πιθανό δεν παρουσιάζονται σαν το ίδιο πράγμα.
Αξίζει να ξεχωρίσεις τις τρεις ερωτήσεις. Ο δρόμος απαντά σε σχέση ανάμεσα σε δύο γνωστά σημεία και χρησιμεύει όταν ξέρεις τι ψάχνεις αλλά όχι πώς ενώνεται. Η αναζήτηση παίρνει μια πρόταση και γυρίζει τα σημεία που την αγγίζουν, με τη θέση τους. Η εξήγηση παίρνει ένα σημείο και δείχνει τι το αγγίζει. Δεν κάνουν το ίδιο και δεν αντικαθιστούν η μία την άλλη.
Τι λένε τα μητρώα. Στο PyPI το πακέτο λέγεται graphifyy και η τελευταία έκδοση είναι η 0.9.100, δημοσιευμένη την 1η Νοεμβρίου 2026, 00:53 UTC (πακέτο). Το requires-python δηλώνει >=3.10. Το πεδίο license είναι κενό, ενώ το license_expression λέει Apache-2.0, και το README δίνει LICENSE, LICENSE-MIT και NOTICE· το κρατάω όπως είναι. Στο GitHub: 140.154 αστέρια, 13.378 forks, 1.632 ανοιχτά ζητήματα, Apache-2.0, δημιουργία 3 Απριλίου 2026, τελευταίο push 1η Νοεμβρίου 2026 (αποθετήριο).
Και η επιφύλαξη από την αρχή. Χωρίς μοντέλο είναι μόνο ο κώδικας. Για PDF, εικόνες, διαγράμματα και σημειώσεις ζητά κλειδί της Gemini, μέσα από GEMINI_API_KEY ή GOOGLE_API_KEY — το είδα στο μήνυμά του. Με κλειδί δεν το έτρεξα, άρα εκείνο το κομμάτι μένει μη μετρημένο.
Για ποιον είναι
Για όποιον έχει φάκελο με κώδικα και έχει κουραστεί να τον ξαναδιαβάζει ολόκληρο για μία ερώτηση.
Ο ερασιτέχνης ξεκινά με το πιο φιλικό: πατάς την αναζήτηση και σου γυρίζει ποια αρχεία μιλιούνται μεταξύ τους, χωρίς να έχεις διαβάσει γραμμή. Χωρίς λογαριασμό, χωρίς κλειδί, χωρίς γλώσσα ερωτήματος — γράφεις την ερώτηση όπως θα την έλεγες σε άνθρωπο.
Ο επαγγελματίας κερδίζει τρία. Κόστος: η ανάλυση δεν περνά από μοντέλο, άρα δεν χρεώνεται σε token. Ιχνηλασιμότητα: κάθε σύνδεση με θέση σε αρχείο και γραμμή, και με σήμανση προέλευσης. Σταθερότητα: η έξοδος γράφεται σε αρχεία, οπότε μπαίνει σε αλυσίδα ή τη διαβάζει άλλο πρόγραμμα.
Υπάρχει και η περίπτωση της ομάδας. Όταν ο γράφος γράφεται σε αρχείο μέσα στο αποθετήριο, κάθε άνθρωπος και κάθε βοηθός κοιτά την ίδια εικόνα, αντί ο καθένας να σχηματίζει τη δική του. Αυτό μετράει όταν η ερώτηση δεν είναι «πώς δουλεύει αυτό» αλλά «πού ακουμπάει αυτό που αλλάζω τώρα».
Για ποιον δεν είναι. Αν τα έγγραφά σου είναι PDF, δεν είναι το εργαλείο σου — εκεί ζητά κλειδί μοντέλου, και δεν το μέτρησα. Αν θέλεις κατανόηση νοήματος, ο γράφος δίνει δομή και σχέσεις, όχι πρόθεση. Και για μεγάλο έργο μη βασιστείς σε δική μας μέτρηση: μετρήθηκε project τριών αρχείων.
Εγκατάσταση
Μέσα από το uv, από οποιονδήποτε φάκελο:
uv tool install graphifyyΔύο y. Το όνομα graphify στο PyPI είναι πιασμένο από άλλον, γι’ αυτό το πακέτο λέγεται graphifyy. Η εντολή μετά είναι κανονική:
graphifyΤι εγκαθίσταται
Δύο εκτελέσιμα: graphify και graphify-mcp. Το πρώτο είναι το εργαλείο του άρθρου. Το δεύτερο δηλώνει διακομιστή MCP — υπάρχει ως εκτελέσιμο, αλλά το σχήμα του δεν το μέτρησα. Στον δίσκο 143,94 MB μαζί με τις εξαρτήσεις. Το βάρος δεν είναι το εργαλείο: το wheel είναι 1,72 MB. Το υπόλοιπο είναι τα 26 γραμματικά του tree-sitter, μία γραμματική ανά γλώσσα.
Τα 26 γραμματικά είναι ο λόγος που το εργαλείο διαβάζει πολλές γλώσσες χωρίς να προσθέσεις τίποτα: το ίδιο πακέτο ξέρει να βγάζει δέντρο από όποια γλώσσα του δώσεις. Το κόστος είναι χώρος στον δίσκο, μία φορά, όχι χρόνος σε κάθε εκτέλεση.
Πρώτη εκτέλεση
Μπαίνεις στον φάκελο με τον κώδικα:
graphify update .Η τελεία είναι ο τρέχων φάκελος, και το λες ρητά. Η δουλειά γράφεται στο graphify-out/: graph.json για προγράμματα, GRAPH_REPORT.md για ανθρώπους, graph.html για φυλλομετρητή.
Χρήση σε κάθε LLM
Εδώ είναι απλό: δεν δηλώνεται σε αρχείο ρυθμίσεων, δεν θέλει επανεκκίνηση, δεν πιάνει χώρο στο πλαίσιο μέχρι να το καλέσεις. Ο βοηθός δίνει εντολή στο κέλυφος και διαβάζει τι τυπώθηκε και με τι κωδικό βγήκε.
Η πρώτη κίνηση, ίδια παντού:
graphify update .Μετά η ερώτηση:
graphify query "what connects UserService to the database?"Και οι δύο ειδικές:
graphify path "UserService" "Pool"graphify explain "UserService"Ο κανόνας: πρώτα ενημέρωσε τον γράφο, μετά ρώτα, κρίνε από τον κωδικό. 0 σημαίνει απάντηση, 3 σημαίνει αμφίσημο όνομα — δηλαδή «δεν ξέρω ποιο εννοείς», όχι σφάλμα. Ο βοηθός που το ξέρει ζητά διευκρίνιση αντί να εγκαταλείψει.
Στην πράξη δεν χρειάζεται παραπάνω από δύο κινήσεις: ενημέρωση, μετά μία ερώτηση. Αν χρειαστεί δεύτερη, ρωτά ξανά — δεν ξαναχτίζει, γιατί ο γράφος είναι ήδη εκεί.
Claude Code
Στο αρχείο κανόνων: πριν απαντήσεις ερώτηση δομής, ενημέρωσε τον γράφο και ρώτα τον.
graphify update . && graphify query "how does authentication reach the database?"Codex CLI
Το ίδιο σε AGENTS.md, με μία διαφορά: ζήτα να το χρησιμοποιεί πριν ανοίξει αρχεία, αλλιώς διαβάζει τα πάντα και μετά ρωτά.
graphify path "Config" "Pool"Cursor
Μία οδηγία στους κανόνες αρκεί. Ζήτα του να διαβάζει και το GRAPH_REPORT.md, γιατί είναι ήδη συμπυκνωμένη γνώση.
graphify update .Σε αλυσίδα αυτοματισμού
Οι κωδικοί εξόδου ξεχωρίζουν την αποτυχία από την ανάγκη διευκρίνισης χωρίς να διαβάσεις κείμενο, και η έξοδος μένει σε αρχεία μέσα στο graphify-out/. Αυτό είναι δική μου σύσταση: μη χτίζεις τον γράφο δύο φορές στην ίδια δουλειά. Το κόστος είναι στο χτίσιμο· οι ερωτήσεις είναι φτηνές.
Πού κερδίζει, πού χάνει
Κερδίζει στον χρόνο, μετρημένα: 1,18 και 1,34 δευτερόλεπτα για το χτίσιμο σε φάκελο τριών αρχείων.
Κερδίζει στη διάκριση EXTRACTED και INFERRED με βαθμό: σου λένε πόσο να εμπιστευτείς κάθε γραμμή, και ότι ο κατασκευαστής ξέρει τη διαφορά ανάμεσα σε ό,τι διάβασε και σε ό,τι υποψιάστηκε.
Κερδίζει στη θέση: κάθε απάντηση έχει αρχείο και γραμμή, όχι σύνοψη — UserService --uses [INFERRED]--> Pool at=pkg/service.py:L4. Πάτησα και πήγα.
Κερδίζει στη συνεννόηση με πράκτορες: μηδέν σύμβολα σχήματος, μηδέν ρυθμίσεις, μηδέν tokens για την ανάλυση.
Κερδίζει ακόμη στο ότι δεν κάνει τον βοηθό να διαβάσει το αποθετήριο: το εργαλείο διαβάζει, ο βοηθός διαβάζει την απάντηση. Είναι η διαφορά ανάμεσα σε πλαίσιο γεμάτο αρχεία και σε πλαίσιο γεμάτο σχέσεις.
Τώρα πού χάνει. Η κάλυψη: χωρίς μοντέλο μόνο ο κώδικας, τα υπόλοιπα θέλουν κλειδί Gemini. Οι ισχυρισμοί: οι «71,5× λιγότερα tokens ανά ερώτηση» είναι ισχυρισμός κατασκευαστή, δεν τον μέτρησα. Το δεύτερο εκτελέσιμο: το graphify-mcp δεν το εξέτασα. Η ηλικία: γεννήθηκε τον Απρίλιο του 2026, με 1.632 ανοιχτά ζητήματα — λόγος να ξέρεις τι κρατάς. Και δεν λέω ότι δουλεύει σε μεγάλο αποθετήριο: η δοκιμή ήταν τρία αρχεία.
Δοκιμή
Έτρεξα και μέτρησα· τα νούμερα βγήκαν από τις εκτελέσεις, όχι από τεκμηρίωση.
Τρία δικά μου αρχεία: UserService στο πρώτο, Pool στο δεύτερο, Config στο τρίτο, με πραγματική εισαγωγή from .db import Pool. Δηλαδή μια σχέση που δεν φαίνεται από το όνομα αλλά από το συντακτικό.
graphify update .11 κόμβοι, 13 ακμές, 3 κοινότητες, μήνυμα Re-extracting code files in . (no LLM needed). Χρόνος 1,18 και 1,34 δευτερόλεπτα. Κωδικός 0.
graphify path "UserService" "Pool"Μία ακμή, ένα βήμα: UserService --uses [INFERRED 0.95]--> Pool, με γραμμή «Path confidence». Κωδικός 0. Δεν είδε απλή εισαγωγή· συμπέρανε χρήση και το είπε με βαθμό.
graphify query "what connects UserService to the database?"8 κόμβοι, 12 ακμές, με θέση για το καθένα: UserService --uses [INFERRED]--> Pool at=pkg/service.py:L4 και service.py --imports_from [EXTRACTED context=import]--> db.py at=pkg/service.py:L1.
graphify explain "UserService"Βαθμός κόμβου 4, με κάθε σύνδεση και τη γραμμή της.
Τι άφησε: graph.json 5.298 bytes, graph.html 28.477 bytes, GRAPH_REPORT.md 1.289 bytes, ο φάκελος 75 KB.
Δύο πράγματα αξίζουν σχολιασμό. Οι 13 ακμές είναι περισσότερες από τους 11 κόμβους, δηλαδή υπάρχουν σημεία με πάνω από μία σχέση· δεν είναι επίπεδη λίστα. Και οι 3 κοινότητες σημαίνουν ότι το εργαλείο ομαδοποίησε τα σημεία σε συστάδες που συνεργάζονται στενότερα — χρήσιμο όταν το αποθετήριο μεγαλώσει και θέλεις να δεις περιοχές, όχι αρχεία.
Τι δεν μέτρησα: το κομμάτι με κλειδί Gemini, τον ισχυρισμό των 71,5 φορών, το graphify-mcp ως διακομιστή, και την επίδοση σε μεγάλο αποθετήριο. Όποιο νούμερο δεν αναφέρεται εδώ, δεν είναι δικό μας.
Τι κοστίζει
Όσα μέτρησα.
Χτίσιμο: 11 κόμβοι, 13 ακμές, 3 κοινότητες, σε 1,18 με 1,34 δευτερόλεπτα.
Έξοδος: 5.298 bytes το graph.json, 28.477 bytes το graph.html, 1.289 bytes η αναφορά, 75 KB ο φάκελος.
Δίσκος: 143,94 MB με τις εξαρτήσεις. Wheel 1.805.544 bytes = 1,72 MB, sdist 3.102.438 bytes = 2,96 MB. Το βάρος είναι τα 26 γραμματικά του tree-sitter.
Πλαίσιο βοηθού: μηδέν σύμβολα σχήματος· μόνο η έξοδος που ζήτησες. Το graphify-mcp υπάρχει, το σχήμα του δεν μετρήθηκε.
Tokens και χρήματα για τον κώδικα: μηδέν και μηδέν, με Apache-2.0, χωρίς λογαριασμό και κλειδί. Λήψεις: 1.630.115 τον μήνα, 480.736 την εβδομάδα, 51.169 τη μέρα (στατιστικά) — δεν ξεχωρίζουν αυτόματες δοκιμές από ανθρώπους, οπότε οροφή.
Απαιτήσεις: Python >=3.10.
Όσα λέει ο κατασκευαστής, χωρίς επαλήθευση. Τις 71,5 φορές λιγότερα tokens ανά ερώτηση. Ότι με κλειδί Gemini διαβάζει και PDF, εικόνες, διαγράμματα και σημειώσεις. Ότι προσφέρεται και ως διακομιστής MCP μέσα από το graphify-mcp.
Ετυμηγορία
Score: 7.8/10.
Κάνει αυτό που υπόσχεται στο κομμάτι που μέτρησα. Διάβασε τρία αρχεία σε ένα δευτερόλεπτο, βρήκε τη σχέση που δεν φαινόταν από το όνομα, είπε από πού τη συμπέρανε και με πόση βεβαιότητα, και έδωσε αρχείο και γραμμή για κάθε σύνδεση. Δεν θέλει λογαριασμό, κλειδί, ρυθμίσεις, επανεκκίνηση, χώρο στο πλαίσιο — ούτε χρήματα.
Δεν παίρνει δέκα για τρεις λόγους. Η υπόσχεση για έγγραφα πέρα από κώδικα περνά από κλειδί άλλης εταιρείας και μένει μη μετρημένη. Το πιο ελκυστικό νούμερο της σελίδας του είναι δικό του, όχι δικό μας. Και η δοκιμή ήταν μικρή, το αποθετήριο νέο, με 1.632 ανοιχτά ζητήματα.
Πρακτικά: βάλε το όπου χάνεις χρόνο ξαναδιαβάζοντας κώδικα, και βάλε τον βοηθό σου να το τρέχει πρώτο, πριν ανοίξει αρχεία. Κράτα τον διαχωρισμό — γράφο για τον κώδικα, μοντέλο για τα έγγραφα — και δοκίμασέ το στα δικά σου πριν βασιστείς σε μας για μεγάλα έργα.
Πηγές:
https://github.com/Graphify-Labs/graphify
Εγκατάσταση
3 ΒΗΜΑΤΑ- uv tool install graphifyy
- graphify update .
- graphify query "what connects X to Y?"