# GEMINI.md kertoo Geminille säännöt. Ei koodiasi.

Canonical source: https://maguyva.ai/fi/for-gemini

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

GEMINI.md asettaa työkontekstin. MCP antaa Geminille pääsyn työkaluihin. Maguyva on MCP-palvelin, joka antaa Geminille kysyttävän kartan reposta, joten ensimmäinen muokkaus ei ole arvaus tiedostorakenteesta.

> GEMINI.md on konteksti. MCP on kanava. Maguyva on kartta.

## Kerroksittainen pino

Neljä ideaa. Jokainen hoitaa yhden tehtävän.

### GEMINI.md

Miten Geminin tulisi käyttäytyä tässä repossa.

### MCP

Miten Gemini tavoittaa ulkoiset työkalut ja kontekstin.

### Maguyva

MCP-palvelin, joka palauttaa ankkuroituja repofaktoja.

### Työtiloja, ei käyttäjäpaikkoja

Agenteista ei veloiteta käyttäjäpaikkamaksuja. [Katso hinnoittelu](https://maguyva.ai/fi/pricing)

## GEMINI.md on työkonteksti. Käytä sitä.

Pysyvät ohjeet kuuluvat tiedostoon `GEMINI.md`. Se on oikea paikka:

- Build-, testi- ja lint-komennoille, jotka Geminin tulisi ajaa.
- “Tee aina X / älä koskaan tee Y” -kaiteille, jotka on rajattu hakemistoon.
- Nimeämiskonventioille ja refaktorointimieltymyksille.
- Viittauksille kanonisiin päätöslokeihin ja arkkitehtuurimuistiinpanoihin.

Pidä se tiiviinä. Rajaa se. Committaa se.

Mutta `GEMINI.md`-tiedostoa ei ole koskaan suunniteltu kysyttäväksi indeksiksi jokaisesta symbolista, tiedostosta ja kutsupaikasta repossasi.

## Missä pelkkä GEMINI.md loppuu kesken

Neljä vikaantumistapaa, yksi per kortti.

### // konteksti ei ole indeksi

Kertominen Geminille *miten työskennellä* ei kerro sille, *mitä on olemassa*. Ensimmäinen muokkaus tuntemattomassa paketissa on arvaus tiedostopoluista ja funktioiden nimistä. GEMINI.md ei voi listata jokaista symbolia, eikä sen pitäisikään.

### // dokumentti ei enää vastaa koodia

GEMINI.md-lohko, joka kuvaa jonorakennettasi, on oikein, kunnes joku ottaa käyttöön uuden kuluttajan. Koodi on nyt totuuden lähde ja dokumentti on itsevarmasti vanhentunut. Gemini lukee väärän.

### // nimeäminen on graafiongelma

“Mikä viittaa tähän luokkaan?” ei ole vastattavissa markdown-tiedostosta. Gemini joko grep-ja-rukoilee koko monorepon läpi tai pyytää sinua liittämään kutsupaikat chattiin.

### // konteksti-ikkunat eivät ole ilmaisia

Iso ikkuna ei ole sama kuin kysyttävä indeksi. GEMINI.md:n lataaminen kunnes Gemini “tietää tarpeeksi” vaihtaa silti päättelybudjettia staattiseen kontekstimäärään.

## Miten kolme kerrosta sopivat yhteen

Gemini-käyttäjät ajattelevat jo tässä muodossa. Sivun pitäisi tehdä siitä ilmeinen.

- **GEMINI.md**: konteksti (miten Gemini käyttäytyy)
- **MCP**: kanava (miten se tavoittaa)
- **Maguyva**: koodikannan faktat (mitä se näkee)

- **GEMINI.md**: miten Gemini käyttäytyy tässä repossa.
- **MCP**: miten Gemini tavoittaa työkalut ja kontekstin. [(spesifikaatio)](https://modelcontextprotocol.io/docs/getting-started/intro)
- **Maguyva**: mitä Gemini näkee, kun se kysyy koodikannalta kysymyksen. Semanttinen, AST-, graafi- ja tekstihaku palautettuna tiedostopolkujen ja rivinumeroiden kera.

> GEMINI.md kertoo Geminille *miten työskennellä*.
> Maguyva antaa Geminille *jotain, mistä lähteä liikkeelle*.

## Kolme työnkulkua

Gemini-kohtainen. Ankkuroitu oikeaan kutsugraafiin, ei Geminin grepiin.

### 01. Nimeä jaettu luokka uudelleen, löydä ensin jokainen riippuvainen komponentti

```text
gemini> nimeä uudelleen PaymentClient → BillingClient

graph::callers(PaymentClient)            12 viittausta 7 paketissa
graph::importers(src/payments/client.ts)  9 tuovaa kohdetta
graph::extends(PaymentClient)             2 aliluokkaa (RetryClient, MockClient)

→ Gemini ehdottaa 21 muokkauksen migraatiota, jonka tiedostoluettelo näkyy suoraan vastauksessa.
[exit 0]
```

Gemini kysyy Maguyva-palvelulta riippuvaisista komponenteista *ennen* muokkaamista. Migraatioluettelo perustuu todelliseen graafiin, ei Geminin muistiin.

### 02. Löydä oikea toteutus, ei testitynkää

```text
gemini> miten normalizePhoneNumber käsittelee E.164-muodon?

semantic::query("normalize phone E.164")
  src/util/phone.ts:88   normalizePhoneNumber()   ← oikea toteutus
  test/util/phone.spec.ts:14  jest.mock(...)      ← stub
[exit 0]
```

Nimet valehtelevat. Mockit peittävät oikean koodin. Maguyva järjestää oikean toteutuksen testimockin yläpuolelle.

### 03. Tarkista vaikutusalue ennen refaktorointia

```text
gemini> mikä kutsuu QueueDispatcher.publish-metodia?

graph::callers(QueueDispatcher.publish)
  3 in src/billing/*    1 in src/audit/*    1 in src/notifications/*
[exit 0]
```

Pakettirajat ylittävät kutsupaikat tulevat esiin suoraan. Diffi on ankkuroitu oikeisiin tuojiin, ei Geminin grepiin.

## Asennus Gemini CLI:ssä

Kolme vaihetta. Free-taso: 3 repositoriota, Enintään 50 000 indeksoitua repo-riviä, ei luottokorttia.

### 01. Indeksoi repo osoitteessa maguyva.ai

Valitse sellainen, jonka tunnet hyvin, jotta voit tarkistaa vastaukset.

### 02. Lisää Maguyva MCP-palvelimeksi Gemini CLI:n asetuksiin

`~/.gemini/settings.json`

```json
{
  "mcpServers": {
    "maguyva": {
      "httpUrl": "https://maguyva.tools/mcp",
      "headers": {
        "Authorization": "Bearer ${MAGUYVA_API_KEY}"
      }
    }
  }
}
```

### 03. Kysy yksi kysymys, jonka vastauksen jo tiedät

Älä aloita koko yrityksestäsi. Aloita yhdestä reposta ja yhdestä todennettavasta kysymyksestä.

## Indeksoi yksi repo, jonka jo tunnet.

Yhdistä Gemini MCP:n yli. Kysy yksi kysymys, jonka vastauksen voit tarkistaa.
